diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a3e2e5912..e4d1e54e3 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -80,10 +80,10 @@ For example, to contribute to `langchain` run `cd libs/langchain` before getting To install requirements: ```bash -poetry install -E all +poetry install --with test ``` -This will install all requirements for running the package, examples, linting, formatting, tests, and coverage. Note the `-E all` flag will install all optional dependencies necessary for integration testing. +This will install all requirements for running the package, examples, linting, formatting, tests, and coverage. ❗Note: If during installation you receive a `WheelFileValidationError` for `debugpy`, please make sure you are running Poetry v1.5.1. This bug was present in older versions of Poetry (e.g. 1.4.1) and has been resolved in newer releases. If you are still seeing this bug on v1.5.1, you may also try disabling "modern installation" (`poetry config installer.modern-installation false`) and re-installing requirements. See [this `debugpy` issue](https://github.com/microsoft/debugpy/issues/1246) for more details. diff --git a/.github/actions/poetry_setup/action.yml b/.github/actions/poetry_setup/action.yml index 6dbe00026..851ddda11 100644 --- a/.github/actions/poetry_setup/action.yml +++ b/.github/actions/poetry_setup/action.yml @@ -15,19 +15,13 @@ inputs: description: Poetry version required: true - install-command: - description: Command run for installing dependencies - required: false - default: poetry install - cache-key: description: Cache key to use for manual handling of caching required: true working-directory: - description: Directory to run install-command in - required: false - default: "" + description: Directory whose poetry.lock file should be cached + required: true runs: using: composite @@ -38,47 +32,35 @@ runs: python-version: ${{ inputs.python-version }} - uses: actions/cache@v3 - id: cache-pip - name: Cache Pip ${{ inputs.python-version }} + id: cache-bin-poetry + name: Cache Poetry binary - Python ${{ inputs.python-version }} env: - SEGMENT_DOWNLOAD_TIMEOUT_MIN: "15" + SEGMENT_DOWNLOAD_TIMEOUT_MIN: "1" with: path: | - ~/.cache/pip - key: pip-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }} + /opt/pipx/venvs/poetry + /opt/pipx_bin/poetry + # This step caches the poetry installation, so make sure it's keyed on the poetry version as well. + key: bin-poetry-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-${{ inputs.poetry-version }} - name: Install poetry + if: steps.cache-bin-poetry.outputs.cache-hit != 'true' shell: bash env: POETRY_VERSION: ${{ inputs.poetry-version }} PYTHON_VERSION: ${{ inputs.python-version }} run: pipx install "poetry==$POETRY_VERSION" --python "python$PYTHON_VERSION" --verbose - - name: Check Poetry File - shell: bash - working-directory: ${{ inputs.working-directory }} - run: | - poetry check - - - name: Check lock file - shell: bash - working-directory: ${{ inputs.working-directory }} - run: | - poetry lock --check - - - uses: actions/cache@v3 - id: cache-poetry + - name: Restore pip and poetry cached dependencies + uses: actions/cache@v3 env: - SEGMENT_DOWNLOAD_TIMEOUT_MIN: "15" + SEGMENT_DOWNLOAD_TIMEOUT_MIN: "4" WORKDIR: ${{ inputs.working-directory == '' && '.' || inputs.working-directory }} with: path: | + ~/.cache/pip ~/.cache/pypoetry/virtualenvs ~/.cache/pypoetry/cache ~/.cache/pypoetry/artifacts ${{ env.WORKDIR }}/.venv - key: poetry-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-poetry-${{ inputs.poetry-version }}-${{ inputs.cache-key }}-${{ hashFiles(format('{0}/poetry.lock', env.WORKDIR)) }} - - - run: ${{ inputs.install-command }} - working-directory: ${{ inputs.working-directory }} - shell: bash + key: py-deps-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-poetry-${{ inputs.poetry-version }}-${{ inputs.cache-key }}-${{ hashFiles(format('{0}/**/poetry.lock', env.WORKDIR)) }} diff --git a/.github/workflows/_lint.yml b/.github/workflows/_lint.yml index c850258d1..1a01b225a 100644 --- a/.github/workflows/_lint.yml +++ b/.github/workflows/_lint.yml @@ -80,31 +80,32 @@ jobs: find "$WORKDIR" -name '*.py' -type f -not -newermt "$OLDEST_COMMIT_TIME" -exec touch -c -m -t '200001010000' '{}' '+' echo "oldest-commit=$OLDEST_COMMIT" >> "$GITHUB_OUTPUT" - - uses: actions/cache@v3 - id: cache-pip - name: Cache langchain editable pip install - ${{ matrix.python-version }} - env: - SEGMENT_DOWNLOAD_TIMEOUT_MIN: "15" - with: - path: | - ~/.cache/pip - key: pip-editable-langchain-deps-${{ runner.os }}-${{ runner.arch }}-py-${{ matrix.python-version }} - - name: Install poetry - run: | - pipx install "poetry==$POETRY_VERSION" - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - env: - SEGMENT_DOWNLOAD_TIMEOUT_MIN: "15" + + - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }} + uses: "./.github/actions/poetry_setup" with: python-version: ${{ matrix.python-version }} - cache: poetry - cache-dependency-path: | - ${{ env.WORKDIR }}/**/poetry.lock + poetry-version: ${{ env.POETRY_VERSION }} + working-directory: ${{ inputs.working-directory }} + cache-key: lint + + - name: Check Poetry File + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + poetry check + + - name: Check lock file + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + poetry lock --check + - name: Install dependencies working-directory: ${{ inputs.working-directory }} run: | poetry install + - name: Install langchain editable working-directory: ${{ inputs.working-directory }} if: ${{ inputs.working-directory != 'libs/langchain' }} @@ -115,7 +116,7 @@ jobs: uses: actions/cache@v3 env: CACHE_BASE: black-${{ runner.os }}-${{ runner.arch }}-py${{ matrix.python-version }}-${{ inputs.working-directory }}-${{ hashFiles(format('{0}/poetry.lock', env.WORKDIR)) }} - SEGMENT_DOWNLOAD_TIMEOUT_MIN: "15" + SEGMENT_DOWNLOAD_TIMEOUT_MIN: "1" with: path: | ${{ env.WORKDIR }}/.black_cache @@ -127,7 +128,7 @@ jobs: - name: Get .mypy_cache to speed up mypy uses: actions/cache@v3 env: - SEGMENT_DOWNLOAD_TIMEOUT_MIN: "15" + SEGMENT_DOWNLOAD_TIMEOUT_MIN: "2" with: path: | ${{ env.WORKDIR }}/.mypy_cache diff --git a/.github/workflows/_pydantic_compatibility.yml b/.github/workflows/_pydantic_compatibility.yml new file mode 100644 index 000000000..7d8fe26d9 --- /dev/null +++ b/.github/workflows/_pydantic_compatibility.yml @@ -0,0 +1,81 @@ +name: pydantic v1/v2 compatibility + +on: + workflow_call: + inputs: + working-directory: + required: true + type: string + description: "From which folder this pipeline executes" + +env: + POETRY_VERSION: "1.5.1" + +jobs: + build: + defaults: + run: + working-directory: ${{ inputs.working-directory }} + runs-on: ubuntu-latest + strategy: + matrix: + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + name: Pydantic v1/v2 compatibility - Python ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }} + uses: "./.github/actions/poetry_setup" + with: + python-version: ${{ matrix.python-version }} + poetry-version: ${{ env.POETRY_VERSION }} + working-directory: ${{ inputs.working-directory }} + cache-key: pydantic-cross-compat + + - name: Install dependencies + shell: bash + run: poetry install + + - name: Install the opposite major version of pydantic + # If normal tests use pydantic v1, here we'll use v2, and vice versa. + shell: bash + run: | + # Determine the major part of pydantic version + REGULAR_VERSION=$(poetry run python -c "import pydantic; print(pydantic.__version__)" | cut -d. -f1) + + if [[ "$REGULAR_VERSION" == "1" ]]; then + PYDANTIC_DEP=">=2.1,<3" + TEST_WITH_VERSION="2" + elif [[ "$REGULAR_VERSION" == "2" ]]; then + PYDANTIC_DEP="<2" + TEST_WITH_VERSION="1" + else + echo "Unexpected pydantic major version '$REGULAR_VERSION', cannot determine which version to use for cross-compatibility test." + exit 1 + fi + + # Install via `pip` instead of `poetry add` to avoid changing lockfile, + # which would prevent caching from working: the cache would get saved + # to a different key than where it gets loaded from. + poetry run pip install "pydantic${PYDANTIC_DEP}" + + # Ensure that the correct pydantic is installed now. + echo "Checking pydantic version... Expecting ${TEST_WITH_VERSION}" + + # Determine the major part of pydantic version + CURRENT_VERSION=$(poetry run python -c "import pydantic; print(pydantic.__version__)" | cut -d. -f1) + + # Check that the major part of pydantic version is as expected, if not + # raise an error + if [[ "$CURRENT_VERSION" != "$TEST_WITH_VERSION" ]]; then + echo "Error: expected pydantic version ${CURRENT_VERSION} to have been installed, but found: ${TEST_WITH_VERSION}" + exit 1 + fi + echo "Found pydantic version ${CURRENT_VERSION}, as expected" + - name: Run pydantic compatibility tests + shell: bash + run: make test diff --git a/.github/workflows/_release.yml b/.github/workflows/_release.yml index d24bf983a..5ddf79ca7 100644 --- a/.github/workflows/_release.yml +++ b/.github/workflows/_release.yml @@ -23,6 +23,9 @@ jobs: # Trusted publishing has to also be configured on PyPI for each package: # https://docs.pypi.org/trusted-publishers/adding-a-publisher/ id-token: write + + # This permission is needed by `ncipollo/release-action` to create the GitHub release. + contents: write defaults: run: working-directory: ${{ inputs.working-directory }} diff --git a/.github/workflows/_test.yml b/.github/workflows/_test.yml index 3cc424cb7..76d86a286 100644 --- a/.github/workflows/_test.yml +++ b/.github/workflows/_test.yml @@ -7,10 +7,6 @@ on: required: true type: string description: "From which folder this pipeline executes" - test_type: - type: string - description: "Test types to run" - default: '["core", "extended", "core-pydantic-2"]' env: POETRY_VERSION: "1.5.1" @@ -28,61 +24,22 @@ jobs: - "3.9" - "3.10" - "3.11" - test_type: ${{ fromJSON(inputs.test_type) }} - name: Python ${{ matrix.python-version }} ${{ matrix.test_type }} + name: Python ${{ matrix.python-version }} steps: - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} + + - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }} uses: "./.github/actions/poetry_setup" with: python-version: ${{ matrix.python-version }} - working-directory: ${{ inputs.working-directory }} poetry-version: ${{ env.POETRY_VERSION }} - cache-key: ${{ matrix.test_type }} - install-command: | - if [ "${{ matrix.test_type }}" == "core" ]; then - echo "Running core tests, installing dependencies with poetry..." - poetry install - elif [ "${{ matrix.test_type }}" == "core-pydantic-2" ]; then - echo "Running core-pydantic-v2 tests, installing dependencies with poetry..." - poetry install + working-directory: ${{ inputs.working-directory }} + cache-key: core - # Install via `pip` instead of `poetry add` to avoid changing lockfile, - # which would prevent caching from working: the cache would get saved - # to a different key than where it gets loaded from. - poetry run pip install 'pydantic>=2.1,<3' - else - echo "Running extended tests, installing dependencies with poetry..." - poetry install -E extended_testing - fi - - name: Verify pydantic version - run: | - if [ "${{ matrix.test_type }}" == "core-pydantic-2" ]; then - EXPECTED_VERSION=2 - else - EXPECTED_VERSION=1 - fi - echo "Checking pydantic version... Expecting ${EXPECTED_VERSION}" - - # Determine the major part of pydantic version - VERSION=$(poetry run python -c "import pydantic; print(pydantic.__version__)" | cut -d. -f1) - - # Check that the major part of pydantic version is as expected, if not - # raise an error - if [[ "$VERSION" -ne $EXPECTED_VERSION ]]; then - echo "Error: pydantic version must be equal to ${EXPECTED_VERSION}; Found: ${VERSION}" - exit 1 - fi - echo "Found pydantic version ${VERSION}, as expected" + - name: Install dependencies shell: bash - - name: Run ${{matrix.test_type}} tests - run: | - case "${{ matrix.test_type }}" in - core | core-pydantic-2) - make test - ;; - *) - make extended_tests - ;; - esac + run: poetry install + + - name: Run core tests shell: bash + run: make test diff --git a/.github/workflows/langchain_ci.yml b/.github/workflows/langchain_ci.yml index 9dfbd8c3d..8f1fc5d87 100644 --- a/.github/workflows/langchain_ci.yml +++ b/.github/workflows/langchain_ci.yml @@ -8,10 +8,25 @@ on: paths: - '.github/workflows/_lint.yml' - '.github/workflows/_test.yml' + - '.github/workflows/_pydantic_compatibility.yml' - '.github/workflows/langchain_ci.yml' - 'libs/langchain/**' workflow_dispatch: # Allows to trigger the workflow manually in GitHub UI +# If another push to the same PR or branch happens while this workflow is still running, +# cancel the earlier run in favor of the next run. +# +# There's no point in testing an outdated version of the code. GitHub only allows +# a limited number of job runners to be active at the same time, so it's better to cancel +# pointless jobs early so that more useful jobs can run sooner. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + POETRY_VERSION: "1.5.1" + WORKDIR: "libs/langchain" + jobs: lint: uses: @@ -19,10 +34,50 @@ jobs: with: working-directory: libs/langchain secrets: inherit + test: uses: ./.github/workflows/_test.yml with: working-directory: libs/langchain - test_type: '["core", "extended", "core-pydantic-2"]' - secrets: inherit \ No newline at end of file + secrets: inherit + + pydantic-compatibility: + uses: + ./.github/workflows/_pydantic_compatibility.yml + with: + working-directory: libs/langchain + secrets: inherit + + extended-tests: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ${{ env.WORKDIR }} + strategy: + matrix: + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + name: Python ${{ matrix.python-version }} extended tests + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }} + uses: "./.github/actions/poetry_setup" + with: + python-version: ${{ matrix.python-version }} + poetry-version: ${{ env.POETRY_VERSION }} + working-directory: libs/langchain + cache-key: extended + + - name: Install dependencies + shell: bash + run: | + echo "Running extended tests, installing dependencies with poetry..." + poetry install -E extended_testing + + - name: Run extended tests + run: make extended_tests diff --git a/.github/workflows/langchain_experimental_ci.yml b/.github/workflows/langchain_experimental_ci.yml index 9c95634e4..c62ff18b3 100644 --- a/.github/workflows/langchain_experimental_ci.yml +++ b/.github/workflows/langchain_experimental_ci.yml @@ -13,6 +13,20 @@ on: - 'libs/experimental/**' workflow_dispatch: # Allows to trigger the workflow manually in GitHub UI +# If another push to the same PR or branch happens while this workflow is still running, +# cancel the earlier run in favor of the next run. +# +# There's no point in testing an outdated version of the code. GitHub only allows +# a limited number of job runners to be active at the same time, so it's better to cancel +# pointless jobs early so that more useful jobs can run sooner. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + POETRY_VERSION: "1.5.1" + WORKDIR: "libs/experimental" + jobs: lint: uses: @@ -20,10 +34,50 @@ jobs: with: working-directory: libs/experimental secrets: inherit + test: uses: ./.github/workflows/_test.yml with: working-directory: libs/experimental - test_type: '["core"]' - secrets: inherit \ No newline at end of file + secrets: inherit + + # It's possible that langchain-experimental works fine with the latest *published* langchain, + # but is broken with the langchain on `master`. + # + # We want to catch situations like that *before* releasing a new langchain, hence this test. + test-with-latest-langchain: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ${{ env.WORKDIR }} + strategy: + matrix: + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + name: test with unpublished langchain - Python ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }} + uses: "./.github/actions/poetry_setup" + with: + python-version: ${{ matrix.python-version }} + poetry-version: ${{ env.POETRY_VERSION }} + working-directory: ${{ env.WORKDIR }} + cache-key: unpublished-langchain + + - name: Install dependencies + shell: bash + run: | + echo "Running tests with unpublished langchain, installing dependencies with poetry..." + poetry install + + echo "Editably installing langchain outside of poetry, to avoid messing up lockfile..." + poetry run pip install -e ../langchain + + - name: Run tests + run: make test diff --git a/.github/workflows/scheduled_test.yml b/.github/workflows/scheduled_test.yml index 39b553d5c..b71eee059 100644 --- a/.github/workflows/scheduled_test.yml +++ b/.github/workflows/scheduled_test.yml @@ -25,18 +25,25 @@ jobs: name: Python ${{ matrix.python-version }} steps: - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} uses: "./.github/actions/poetry_setup" with: python-version: ${{ matrix.python-version }} poetry-version: ${{ env.POETRY_VERSION }} working-directory: libs/langchain - install-command: | - echo "Running scheduled tests, installing dependencies with poetry..." - poetry install --with=test_integration + cache-key: scheduled + + - name: Install dependencies + working-directory: libs/langchain + shell: bash + run: | + echo "Running scheduled tests, installing dependencies with poetry..." + poetry install --with=test_integration + - name: Run tests + shell: bash env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | make scheduled_tests - shell: bash diff --git a/docs/api_reference/conf.py b/docs/api_reference/conf.py index 3f1772a6b..25d11a075 100644 --- a/docs/api_reference/conf.py +++ b/docs/api_reference/conf.py @@ -156,7 +156,7 @@ html_context = { html_static_path = ["_static"] # These paths are either relative to html_static_path -# or fully qualified paths (eg. https://...) +# or fully qualified paths (e.g. https://...) html_css_files = [ "css/custom.css", ] diff --git a/docs/api_reference/create_api_rst.py b/docs/api_reference/create_api_rst.py index 23fa327af..ee32f0d4c 100644 --- a/docs/api_reference/create_api_rst.py +++ b/docs/api_reference/create_api_rst.py @@ -228,7 +228,7 @@ Classes :toctree: {module} """ - for class_ in classes: + for class_ in sorted(classes, key=lambda c: c["qualified_name"]): if not class_["is_public"]: continue diff --git a/docs/api_reference/guide_imports.json b/docs/api_reference/guide_imports.json index 9c608a732..176c686e5 100644 --- a/docs/api_reference/guide_imports.json +++ b/docs/api_reference/guide_imports.json @@ -341,7 +341,7 @@ "HugeGraph QA Chain": "https://python.langchain.com/docs/use_cases/more/graph/graph_hugegraph_qa", "GraphSparqlQAChain": "https://python.langchain.com/docs/use_cases/more/graph/graph_sparql_qa", "ArangoDB QA chain": "https://python.langchain.com/docs/use_cases/more/graph/graph_arangodb_qa", - "Graph DB QA chain": "https://python.langchain.com/docs/use_cases/more/graph/graph_cypher_qa", + "Neo4j DB QA chain": "https://python.langchain.com/docs/use_cases/more/graph/graph_cypher_qa", "How to use a SmartLLMChain": "https://python.langchain.com/docs/use_cases/more/self_check/smart_llm", "Multi-Agent Simulated Environment: Petting Zoo": "https://python.langchain.com/docs/use_cases/agent_simulations/petting_zoo", "Multi-agent decentralized speaker selection": "https://python.langchain.com/docs/use_cases/agent_simulations/multiagent_bidding", @@ -2071,8 +2071,8 @@ "PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer", "PromptLayer OpenAI": "https://python.langchain.com/docs/integrations/llms/promptlayer_openai" }, - "DeepLake": { - "Deep Lake": "https://python.langchain.com/docs/integrations/providers/deeplake", + "Activeloop DeepLake": { + "Deep Lake": "https://python.langchain.com/docs/integrations/providers/activeloop_deeplake", "Activeloop's Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake", "Analysis of Twitter the-algorithm source code with LangChain, GPT4 and Activeloop's Deep Lake": "https://python.langchain.com/docs/use_cases/question_answering/how_to/code/twitter-the-algorithm-analysis-deeplake", "Use LangChain, GPT and Activeloop's Deep Lake to work with code base": "https://python.langchain.com/docs/use_cases/question_answering/how_to/code/code-analysis-deeplake", @@ -3202,10 +3202,10 @@ "Graph QA": "https://python.langchain.com/docs/use_cases/more/graph/graph_qa" }, "GraphCypherQAChain": { - "Graph DB QA chain": "https://python.langchain.com/docs/use_cases/more/graph/graph_cypher_qa" + "Neo4j DB QA chain": "https://python.langchain.com/docs/use_cases/more/graph/graph_cypher_qa" }, "Neo4jGraph": { - "Graph DB QA chain": "https://python.langchain.com/docs/use_cases/more/graph/graph_cypher_qa" + "Neo4j DB QA chain": "https://python.langchain.com/docs/use_cases/more/graph/graph_cypher_qa" }, "LLMBashChain": { "Bash chain": "https://python.langchain.com/docs/use_cases/more/code_writing/llm_bash" diff --git a/docs/docs_skeleton/docs/community.md b/docs/docs_skeleton/docs/community.md index c3c703150..f438de16f 100644 --- a/docs/docs_skeleton/docs/community.md +++ b/docs/docs_skeleton/docs/community.md @@ -47,8 +47,8 @@ If you’re working on something you’re proud of, and think the LangChain comm Here’s where our team hangs out, talks shop, spotlights cool work, and shares what we’re up to. We’d love to see you there too. -- **[Twitter](https://twitter.com/LangChainAI):** we post about what we’re working on and what cool things we’re seeing in the space. If you tag @langchainai in your post, we’ll almost certainly see it, and can snow you some love! -- **[Discord](https://discord.gg/6adMQxSpJS):** connect with with >30k developers who are building with LangChain +- **[Twitter](https://twitter.com/LangChainAI):** we post about what we’re working on and what cool things we’re seeing in the space. If you tag @langchainai in your post, we’ll almost certainly see it, and can show you some love! +- **[Discord](https://discord.gg/6adMQxSpJS):** connect with >30k developers who are building with LangChain - **[GitHub](https://github.com/langchain-ai/langchain):** open pull requests, contribute to a discussion, and/or contribute - **[Subscribe to our bi-weekly Release Notes](https://6w1pwbss0py.typeform.com/to/KjZB1auB):** a twice/month email roundup of the coolest things going on in our orbit - **Slack:** if you’re building an application in production at your company, we’d love to get into a Slack channel together. Fill out [this form](https://airtable.com/appwQzlErAS2qiP0L/shrGtGaVBVAz7NcV2) and we’ll get in touch about setting one up. diff --git a/docs/docs_skeleton/docs/get_started/quickstart.mdx b/docs/docs_skeleton/docs/get_started/quickstart.mdx index 8cf778c94..0db8c03ee 100644 --- a/docs/docs_skeleton/docs/get_started/quickstart.mdx +++ b/docs/docs_skeleton/docs/get_started/quickstart.mdx @@ -107,7 +107,7 @@ import PromptTemplateChatModel from "@snippets/get_started/quickstart/prompt_tem However, the advantages of using these over raw string formatting are several. -You can "partial" out variables - eg you can format only some of the variables at a time. +You can "partial" out variables - e.g. you can format only some of the variables at a time. You can compose them together, easily combining different templates into a single prompt. For explanations of these functionalities, see the [section on prompts](/docs/modules/model_io/prompts) for more detail. @@ -121,12 +121,12 @@ Let's take a look at this below: ChatPromptTemplates can also include other things besides ChatMessageTemplates - see the [section on prompts](/docs/modules/model_io/prompts) for more detail. -## Output Parsers +## Output parsers OutputParsers convert the raw output of an LLM into a format that can be used downstream. There are few main type of OutputParsers, including: -- Convert text from LLM -> structured information (eg JSON) +- Convert text from LLM -> structured information (e.g. JSON) - Convert a ChatMessage into just a string - Convert the extra information returned from a call besides the message (like OpenAI function invocation) into a string. @@ -149,7 +149,7 @@ import LLMChain from "@snippets/get_started/quickstart/llm_chain.mdx" -## Next Steps +## Next steps This is it! We've now gone over how to create the core building block of LangChain applications - the LLMChains. diff --git a/docs/docs_skeleton/docs/guides/evaluation/comparison/index.mdx b/docs/docs_skeleton/docs/guides/evaluation/comparison/index.mdx index 8dc4fe7a0..7f4f03342 100644 --- a/docs/docs_skeleton/docs/guides/evaluation/comparison/index.mdx +++ b/docs/docs_skeleton/docs/guides/evaluation/comparison/index.mdx @@ -3,7 +3,7 @@ sidebar_position: 3 --- # Comparison Evaluators -Comparison evaluators in LangChain help measure two different chain or LLM outputs. These evaluators are helpful for comparative analyses, such as A/B testing between two language models, or comparing different versions of the same model. They can also be useful for things like generating preference scores for ai-assisted reinforcement learning. +Comparison evaluators in LangChain help measure two different chains or LLM outputs. These evaluators are helpful for comparative analyses, such as A/B testing between two language models, or comparing different versions of the same model. They can also be useful for things like generating preference scores for ai-assisted reinforcement learning. These evaluators inherit from the `PairwiseStringEvaluator` class, providing a comparison interface for two strings - typically, the outputs from two different prompts or models, or two versions of the same model. In essence, a comparison evaluator performs an evaluation on a pair of strings and returns a dictionary containing the evaluation score and other relevant details. @@ -16,7 +16,7 @@ Here's a summary of the key methods and properties of a comparison evaluator: - `requires_input`: This property indicates whether this evaluator requires an input string. - `requires_reference`: This property specifies whether this evaluator requires a reference label. -Detailed information about creating custom evaluators and the available built-in comparison evaluators are provided in the following sections. +Detailed information about creating custom evaluators and the available built-in comparison evaluators is provided in the following sections. import DocCardList from "@theme/DocCardList"; diff --git a/docs/docs_skeleton/docs/guides/safety/amazon_comprehend_chain.ipynb b/docs/docs_skeleton/docs/guides/safety/amazon_comprehend_chain.ipynb new file mode 100644 index 000000000..03277c16f --- /dev/null +++ b/docs/docs_skeleton/docs/guides/safety/amazon_comprehend_chain.ipynb @@ -0,0 +1,1396 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "25a3f834-60b7-4c21-bfb4-ad16d30fd3f7", + "metadata": {}, + "source": [ + "# Amazon Comprehend Moderation Chain\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2c4236d8-4054-473d-84a4-87a4db278a62", + "metadata": {}, + "outputs": [], + "source": [ + "%pip install boto3 nltk" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f8518ad-c762-413c-b8c9-f1c211fc311d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import boto3\n", + "\n", + "comprehend_client = boto3.client('comprehend', \n", + " region_name='us-east-1', \n", + " aws_access_key_id=\"ASIA6BR6ZDLNQLMEGWHM\",\n", + " aws_secret_access_key=\"Y79nefFoOfvgrog6sojSe55xTuKqDJY53BgfrtlG\",\n", + " aws_session_token=\"IQoJb3JpZ2luX2VjEIP//////////wEaCXVzLWVhc3QtMSJGMEQCIBvUl0Wj5Gu5GrHB+i5fHkaVc2V1381M7UNRX8EggHORAiB+dG/uKJ4loHn2oAcXIEy6+lfU7wygl4zw/vUo2VItFiqfAghMEAIaDDk2NTQyNTU2ODQ3NSIMfbh8uyoO1XONSkuEKvwBTMxeDCi//9U9LGIwZZzIiHOudQAqR2wlIGZKcw//abSeHNBE1AoDT8ibcqk7EuIt9fwnj1WYiLGmSIWd9/kSZShiKdYg0UpNWyr1/LdeutV5byFAjT21RnWTgSMr0QeSCU698PFusvO1Coph8C75pcqTVYsxi/HypJT8OfB5iCxKgfzx0qD4X6hScpIAEYZhgQXHFBAeubqMkVPYEqSob6fSm1vEI8LkU8HG1N2M2p8TzGCQWo5uBgtNkipxve++bkR+xjiNLIpAN3P1xF2/W/lYlz+4xGsi90aZqIVh/tOvAjg7Yx1Dd5Ir2C0fZc7wbtabzVFlJZ7GFcpcMOX0o6cGOp4BismuW2CJRBmFFpoparqraQaiQBY/VDbQg9KQc/Y6o0oCxkESLUdY6ino3yrheT3W832eAg0RwrmEaQqT8kKGyJFimUxrAF/otNQhySLKuSXLooguammJiQAtgK1EhmuLBUBoLcngxQ31kDqw13g7Ccwuo68fnI/QzQLj5MX+V5VLCSp9VrOzi9XSjmeF/TJQARdZeL3CSeu2pATQc80=\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "d1f0ba28", + "metadata": {}, + "source": [ + "Import `AmazonComprehendModerationChain`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "74550d74-3c01-4ba7-ad32-ca66d955d001", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain_experimental.comprehend_moderation import AmazonComprehendModerationChain" + ] + }, + { + "cell_type": "markdown", + "id": "f00c338b-de9f-40e5-9295-93c9e26058e3", + "metadata": {}, + "source": [ + "Initialize an instance of the Amazon Comprehend Moderation Chain to be used with your LLM chain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cde58cc6-ff83-493a-9aed-93d755f984a7", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "comprehend_moderation = AmazonComprehendModerationChain(\n", + " client=comprehend_client, #optional\n", + " verbose=True\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ad646d01-82d2-435a-939b-c450693857ab", + "metadata": {}, + "source": [ + "Using it with your LLM chain. \n", + "\n", + "**Note**: The example below uses the _Fake LLM_ from LangChain, but same concept could be applied to other LLMs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0efa1946-d4a9-467a-920a-a8fb78720fc2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain import PromptTemplate, LLMChain\n", + "from langchain.llms.fake import FakeListLLM\n", + "from langchain_experimental.comprehend_moderation.base_moderation_exceptions import ModerationPiiError\n", + "\n", + "template = \"\"\"Question: {question}\n", + "\n", + "Answer:\"\"\"\n", + "\n", + "prompt = PromptTemplate(template=template, input_variables=[\"question\"])\n", + "\n", + "responses = [\n", + " \"Final Answer: A credit card number looks like 1289-2321-1123-2387. A fake SSN number looks like 323-22-9980. John Doe's phone number is (999)253-9876.\", \n", + " \"Final Answer: This is a really shitty way of constructing a birdhouse. This is fucking insane to think that any birds would actually create their motherfucking nests here.\"\n", + "]\n", + "llm = FakeListLLM(responses=responses)\n", + "\n", + "llm_chain = LLMChain(prompt=prompt, llm=llm)\n", + "\n", + "chain = (\n", + " prompt \n", + " | comprehend_moderation \n", + " | {llm_chain.input_keys[0]: lambda x: x['output'] } \n", + " | llm_chain \n", + " | { \"input\": lambda x: x['text'] } \n", + " | comprehend_moderation \n", + ")\n", + "\n", + "try:\n", + " response = chain.invoke({\"question\": \"A sample SSN number looks like this 123-456-7890. Can you give me some more samples?\"})\n", + "except ModerationPiiError as e:\n", + " print(e.message)\n", + "else:\n", + " print(response['output'])\n" + ] + }, + { + "cell_type": "markdown", + "id": "6da25d96-0d96-4c01-94ae-a2ead17f10aa", + "metadata": {}, + "source": [ + "## Using `moderation_config` to customize your moderation\n", + "---" + ] + }, + { + "cell_type": "markdown", + "id": "bfd550e7-5012-41fa-9546-8b78ddf1c673", + "metadata": {}, + "source": [ + "Use Amazon Comprehend Moderation with a configuration to control what moderations you wish to perform and what actions should be taken for each of them. There are three different moderations that happen when no configuration is passed as demonstrated above. These moderations are:\n", + "\n", + "- PII (Personally Identifiable Information) checks \n", + "- Toxicity content detection\n", + "- Intention detection\n", + "\n", + "Here is an example of a moderation config." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d6e8900a-44ef-4967-bde8-b88af282139d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain_experimental.comprehend_moderation import BaseModerationActions, BaseModerationFilters\n", + "\n", + "moderation_config = { \n", + " \"filters\":[ \n", + " BaseModerationFilters.PII, \n", + " BaseModerationFilters.TOXICITY,\n", + " BaseModerationFilters.INTENT\n", + " ],\n", + " \"pii\":{ \n", + " \"action\": BaseModerationActions.ALLOW, \n", + " \"threshold\":0.5, \n", + " \"labels\":[\"SSN\"],\n", + " \"mask_character\": \"X\"\n", + " },\n", + " \"toxicity\":{ \n", + " \"action\": BaseModerationActions.STOP, \n", + " \"threshold\":0.5\n", + " },\n", + " \"intent\":{ \n", + " \"action\": BaseModerationActions.STOP, \n", + " \"threshold\":0.5\n", + " }\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "3634376b-5938-43df-9ed6-70ca7e99290f", + "metadata": {}, + "source": [ + "At the core of the configuration you have three filters specified in the `filters` key:\n", + "\n", + "1. `BaseModerationFilters.PII`\n", + "2. `BaseModerationFilters.TOXICITY`\n", + "3. `BaseModerationFilters.INTENT`\n", + "\n", + "And an `action` key that defines two possible actions for each moderation function:\n", + "\n", + "1. `BaseModerationActions.ALLOW` - `allows` the prompt to pass through but masks detected PII in case of PII check. The default behavior is to run and redact all PII entities. If there is an entity specified in the `labels` field, then only those entities will go through the PII check and masked.\n", + "2. `BaseModerationActions.STOP` - `stops` the prompt from passing through to the next step in case any PII, Toxicity, or incorrect Intent is detected. The action of `BaseModerationActions.STOP` will raise a Python `Exception` essentially stopping the chain in progress.\n", + "\n", + "Using the configuration in the previous cell will perform PII checks and will allow the prompt to pass through however it will mask any SSN numbers present in either the prompt or the LLM output.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a4f7e65-f733-4863-ae6d-34c9faffd849", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "comp_moderation_with_config = AmazonComprehendModerationChain(\n", + " moderation_config=moderation_config, #specify the configuration\n", + " client=comprehend_client, #optionally pass the Boto3 Client\n", + " verbose=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a25e6f93-765b-4f99-8c1c-929157dbd4aa", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "template = \"\"\"Question: {question}\n", + "\n", + "Answer:\"\"\"\n", + "\n", + "prompt = PromptTemplate(template=template, input_variables=[\"question\"])\n", + "\n", + "responses = [\n", + " \"Final Answer: A credit card number looks like 1289-2321-1123-2387. A fake SSN number looks like 323-22-9980. John Doe's phone number is (999)253-9876.\", \n", + " \"Final Answer: This is a really shitty way of constructing a birdhouse. This is fucking insane to think that any birds would actually create their motherfucking nests here.\"\n", + "]\n", + "llm = FakeListLLM(responses=responses)\n", + "\n", + "llm_chain = LLMChain(prompt=prompt, llm=llm)\n", + "\n", + "chain = ( \n", + " prompt \n", + " | comp_moderation_with_config \n", + " | {llm_chain.input_keys[0]: lambda x: x['output'] } \n", + " | llm_chain \n", + " | { \"input\": lambda x: x['text'] } \n", + " | comp_moderation_with_config \n", + ")\n", + "\n", + "try:\n", + " response = chain.invoke({\"question\": \"A sample SSN number looks like this 123-456-7890. Can you give me some more samples?\"})\n", + "except Exception as e:\n", + " print(str(e))\n", + "else:\n", + " print(response['output'])" + ] + }, + { + "cell_type": "markdown", + "id": "ba890681-feeb-43ca-a0d5-9c11d2d9de3e", + "metadata": { + "tags": [] + }, + "source": [ + "## Unique ID, and Moderation Callbacks\n", + "---\n", + "\n", + "When Amazon Comprehend moderation action is specified as `STOP`, the chain will raise one of the following exceptions-\n", + " - `ModerationPiiError`, for PII checks\n", + " - `ModerationToxicityError`, for Toxicity checks \n", + " - `ModerationIntentionError` for Intent checks\n", + "\n", + "In addition to the moderation configuration, the `AmazonComprehendModerationChain` can also be initialized with the following parameters\n", + "\n", + "- `unique_id` [Optional] a string parameter. This parameter can be used to pass any string value or ID. For example, in a chat application you may want to keep track of abusive users, in this case you can pass the user's username/email id etc. This defaults to `None`.\n", + "\n", + "- `moderation_callback` [Optional] the `BaseModerationCallbackHandler` that will be called asynchronously (non-blocking to the chain). Callback functions are useful when you want to perform additional actions when the moderation functions are executed, for example logging into a database, or writing a log file. You can override three functions by subclassing `BaseModerationCallbackHandler` - `on_after_pii()`, `on_after_toxicity()`, and `on_after_intent()`. Note that all three functions must be `async` functions. These callback functions receive two arguments:\n", + " - `moderation_beacon` a dictionary that will contain information about the moderation function, the full response from Amazon Comprehend model, a unique chain id, the moderation status, and the input string which was validated. The dictionary is of the following schema-\n", + " \n", + " ```\n", + " { \n", + " 'moderation_chain_id': 'xxx-xxx-xxx', # Unique chain ID\n", + " 'moderation_type': 'Toxicity' | 'PII' | 'Intent', \n", + " 'moderation_status': 'LABELS_FOUND' | 'LABELS_NOT_FOUND',\n", + " 'moderation_input': 'A sample SSN number looks like this 123-456-7890. Can you give me some more samples?',\n", + " 'moderation_output': {...} #Full Amazon Comprehend PII, Toxicity, or Intent Model Output\n", + " }\n", + " ```\n", + " \n", + " - `unique_id` if passed to the `AmazonComprehendModerationChain`" + ] + }, + { + "cell_type": "markdown", + "id": "3c178835-0264-4ac6-aef4-091d2993d06c", + "metadata": {}, + "source": [ + "
NOTE: moderation_callback is different from LangChain Chain Callbacks. You can still use LangChain Chain callbacks with AmazonComprehendModerationChain via the callbacks parameter. Example:
\n", + "
\n",
+    "from langchain.callbacks.stdout import StdOutCallbackHandler\n",
+    "comp_moderation_with_config = AmazonComprehendModerationChain(verbose=True, callbacks=[StdOutCallbackHandler()])\n",
+    "
\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0ec38536-8cc9-408e-860b-e4a439283643", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain_experimental.comprehend_moderation import BaseModerationCallbackHandler" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1be744c7-3f99-4165-bf7f-9c5c249bbb53", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Define callback handlers by subclassing BaseModerationCallbackHandler\n", + "\n", + "class MyModCallback(BaseModerationCallbackHandler):\n", + " \n", + " async def on_after_pii(self, output_beacon, unique_id):\n", + " import json\n", + " moderation_type = output_beacon['moderation_type']\n", + " chain_id = output_beacon['moderation_chain_id']\n", + " with open(f'output-{moderation_type}-{chain_id}.json', 'w') as file:\n", + " data = { 'beacon_data': output_beacon, 'unique_id': unique_id }\n", + " json.dump(data, file)\n", + " \n", + " '''\n", + " async def on_after_toxicity(self, output_beacon, unique_id):\n", + " pass\n", + " \n", + " async def on_after_intent(self, output_beacon, unique_id):\n", + " pass\n", + " '''\n", + " \n", + "\n", + "my_callback = MyModCallback()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "362a3fe0-f09f-411e-9df1-d79b3e87510c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "moderation_config = { \n", + " \"filters\": [ \n", + " BaseModerationFilters.PII, \n", + " BaseModerationFilters.TOXICITY\n", + " ],\n", + " \"pii\":{ \n", + " \"action\": BaseModerationActions.STOP, \n", + " \"threshold\":0.5, \n", + " \"labels\":[\"SSN\"], \n", + " \"mask_character\": \"X\" \n", + " },\n", + " \"toxicity\":{ \n", + " \"action\": BaseModerationActions.STOP, \n", + " \"threshold\":0.5 \n", + " }\n", + "}\n", + "\n", + "comp_moderation_with_config = AmazonComprehendModerationChain(\n", + " moderation_config=moderation_config, # specify the configuration\n", + " client=comprehend_client, # optionally pass the Boto3 Client\n", + " force_base_exception=True, # Force BaseModerationError\n", + " unique_id='john.doe@email.com', # A unique ID\n", + " moderation_callback=my_callback, # BaseModerationCallbackHandler\n", + " verbose=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2af07937-67ea-4738-8343-c73d4d28c2cc", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain import PromptTemplate, LLMChain\n", + "from langchain.llms.fake import FakeListLLM\n", + "\n", + "template = \"\"\"Question: {question}\n", + "\n", + "Answer:\"\"\"\n", + "\n", + "prompt = PromptTemplate(template=template, input_variables=[\"question\"])\n", + "\n", + "responses = [\n", + " \"Final Answer: A credit card number looks like 1289-2321-1123-2387. A fake SSN number looks like 323-22-9980. John Doe's phone number is (999)253-9876.\", \n", + " \"Final Answer: This is a really shitty way of constructing a birdhouse. This is fucking insane to think that any birds would actually create their motherfucking nests here.\"\n", + "]\n", + "\n", + "llm = FakeListLLM(responses=responses)\n", + "\n", + "llm_chain = LLMChain(prompt=prompt, llm=llm)\n", + "\n", + "chain = (\n", + " prompt \n", + " | comp_moderation_with_config \n", + " | {llm_chain.input_keys[0]: lambda x: x['output'] } \n", + " | llm_chain \n", + " | { \"input\": lambda x: x['text'] } \n", + " | comp_moderation_with_config \n", + ") \n", + "\n", + "try:\n", + " response = chain.invoke({\"question\": \"A sample SSN number looks like this 123-456-7890. Can you give me some more samples?\"})\n", + "except Exception as e:\n", + " print(str(e))\n", + "else:\n", + " print(response['output'])" + ] + }, + { + "cell_type": "markdown", + "id": "706454b2-2efa-4d41-abc8-ccf2b4e87822", + "metadata": { + "tags": [] + }, + "source": [ + "## `moderation_config` and moderation execution order\n", + "---\n", + "\n", + "If `AmazonComprehendModerationChain` is not initialized with any `moderation_config` then the default action is `STOP` and default order of moderation check is as follows.\n", + "\n", + "```\n", + "AmazonComprehendModerationChain\n", + "│\n", + "└──Check PII with Stop Action\n", + " ├── Callback (if available)\n", + " ├── Label Found ⟶ [Error Stop]\n", + " └── No Label Found \n", + " └──Check Toxicity with Stop Action\n", + " ├── Callback (if available)\n", + " ├── Label Found ⟶ [Error Stop]\n", + " └── No Label Found\n", + " └──Check Intent with Stop Action\n", + " ├── Callback (if available)\n", + " ├── Label Found ⟶ [Error Stop]\n", + " └── No Label Found\n", + " └── Return Prompt\n", + "```\n", + "\n", + "If any of the check raises exception then the subsequent checks will not be performed. If a `callback` is provided in this case, then it will be called for each of the checks that have been performed. For example, in the case above, if the Chain fails due to presence of PII then the Toxicity and Intent checks will not be performed.\n", + "\n", + "You can override the execution order by passing `moderation_config` and simply specifying the desired order in the `filters` key of the configuration. In case you use `moderation_config` then the order of the checks as specified in the `filters` key will be maintained. For example, in the configuration below, first Toxicity check will be performed, then PII, and finally Intent validation will be performed. In this case, `AmazonComprehendModerationChain` will perform the desired checks in the specified order with default values of each model `kwargs`.\n", + "\n", + "```python\n", + "moderation_config = { \n", + " \"filters\":[ BaseModerationFilters.TOXICITY, \n", + " BaseModerationFilters.PII, \n", + " BaseModerationFilters.INTENT]\n", + " }\n", + "```\n", + "\n", + "Model `kwargs` are specified by the `pii`, `toxicity`, and `intent` keys within the `moderation_config` dictionary. For example, in the `moderation_config` below, the default order of moderation is overriden and the `pii` & `toxicity` model `kwargs` have been overriden. For `intent` the chain's default `kwargs` will be used.\n", + "\n", + "```python\n", + " moderation_config = { \n", + " \"filters\":[ BaseModerationFilters.TOXICITY, \n", + " BaseModerationFilters.PII, \n", + " BaseModerationFilters.INTENT],\n", + " \"pii\":{ \"action\": BaseModerationActions.ALLOW, \n", + " \"threshold\":0.5, \n", + " \"labels\":[\"SSN\"], \n", + " \"mask_character\": \"X\" },\n", + " \"toxicity\":{ \"action\": BaseModerationActions.STOP, \n", + " \"threshold\":0.5 }\n", + " }\n", + "```\n", + "\n", + "1. For a list of PII labels see Amazon Comprehend Universal PII entity types - https://docs.aws.amazon.com/comprehend/latest/dg/how-pii.html#how-pii-types\n", + "2. Following are the list of available Toxicity labels-\n", + " - `HATE_SPEECH`: Speech that criticizes, insults, denounces or dehumanizes a person or a group on the basis of an identity, be it race, ethnicity, gender identity, religion, sexual orientation, ability, national origin, or another identity-group.\n", + " - `GRAPHIC`: Speech that uses visually descriptive, detailed and unpleasantly vivid imagery is considered as graphic. Such language is often made verbose so as to amplify an insult, discomfort or harm to the recipient.\n", + " - `HARASSMENT_OR_ABUSE`: Speech that imposes disruptive power dynamics between the speaker and hearer, regardless of intent, seeks to affect the psychological well-being of the recipient, or objectifies a person should be classified as Harassment.\n", + " - `SEXUAL`: Speech that indicates sexual interest, activity or arousal by using direct or indirect references to body parts or physical traits or sex is considered as toxic with toxicityType \"sexual\". \n", + " - `VIOLENCE_OR_THREAT`: Speech that includes threats which seek to inflict pain, injury or hostility towards a person or group.\n", + " - `INSULT`: Speech that includes demeaning, humiliating, mocking, insulting, or belittling language.\n", + " - `PROFANITY`: Speech that contains words, phrases or acronyms that are impolite, vulgar, or offensive is considered as profane.\n", + "3. For a list of Intent labels refer to documentation [link here]" + ] + }, + { + "cell_type": "markdown", + "id": "78905aec-55ae-4fc3-a23b-8a69bd1e33f2", + "metadata": {}, + "source": [ + "# Examples\n", + "---\n", + "\n", + "## With HuggingFace Hub Models\n", + "\n", + "Get your API Key from Huggingface hub - https://huggingface.co/docs/api-inference/quicktour#get-your-api-token" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "359b9627-769b-46ce-8be2-c8a5cf7728ba", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "%pip install huggingface_hub" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "41b7ea98-ad16-4454-8f12-c03c17113a86", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "%env HUGGINGFACEHUB_API_TOKEN=\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b235427-cc06-4c07-874b-1f67c2d1f924", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# See https://huggingface.co/models?pipeline_tag=text-generation&sort=downloads for some other options\n", + "repo_id = \"google/flan-t5-xxl\" \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9d86e256-34fb-4c8e-8092-1a4f863a5c96", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain import HuggingFaceHub\n", + "from langchain import PromptTemplate, LLMChain\n", + "\n", + "template = \"\"\"Question: {question}\n", + "\n", + "Answer:\"\"\"\n", + "\n", + "prompt = PromptTemplate(template=template, input_variables=[\"question\"])\n", + "\n", + "llm = HuggingFaceHub(\n", + " repo_id=repo_id, model_kwargs={\"temperature\": 0.5, \"max_length\": 256}\n", + ")\n", + "llm_chain = LLMChain(prompt=prompt, llm=llm)" + ] + }, + { + "cell_type": "markdown", + "id": "ad603796-ad8b-4599-9022-a486f1c1b89a", + "metadata": {}, + "source": [ + "Create a configuration and initialize an Amazon Comprehend Moderation chain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "decc3409-5be5-433d-b6da-38b9e5c5ee3f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "moderation_config = { \n", + " \"filters\":[ BaseModerationFilters.PII, BaseModerationFilters.TOXICITY, BaseModerationFilters.INTENT ],\n", + " \"pii\":{\"action\": BaseModerationActions.ALLOW, \"threshold\":0.5, \"labels\":[\"SSN\",\"CREDIT_DEBIT_NUMBER\"], \"mask_character\": \"X\"},\n", + " \"toxicity\":{\"action\": BaseModerationActions.STOP, \"threshold\":0.5},\n", + " \"intent\":{\"action\": BaseModerationActions.ALLOW, \"threshold\":0.5,},\n", + " }\n", + "\n", + "# without any callback\n", + "amazon_comp_moderation = AmazonComprehendModerationChain(moderation_config=moderation_config, \n", + " client=comprehend_client,\n", + " verbose=True)\n", + "\n", + "# with callback\n", + "amazon_comp_moderation_out = AmazonComprehendModerationChain(moderation_config=moderation_config, \n", + " client=comprehend_client,\n", + " moderation_callback=my_callback,\n", + " verbose=True)" + ] + }, + { + "cell_type": "markdown", + "id": "b1256bc8-1321-4624-9e8a-a2d4a8df59bf", + "metadata": {}, + "source": [ + "The `moderation_config` will now prevent any inputs and model outputs containing obscene words or sentences, bad intent, or PII with entities other than SSN with score above threshold or 0.5 or 50%. If it finds Pii entities - SSN - it will redact them before allowing the call to proceed. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0337becc-7c3c-483e-a55c-a225226cb9ee", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "chain = (\n", + " prompt \n", + " | amazon_comp_moderation \n", + " | {llm_chain.input_keys[0]: lambda x: x['output'] } \n", + " | llm_chain \n", + " | { \"input\": lambda x: x['text'] } \n", + " | amazon_comp_moderation_out\n", + ")\n", + "\n", + "try:\n", + " response = chain.invoke({\"question\": \"My AnyCompany Financial Services, LLC credit card account 1111-0000-1111-0008 has 24$ due by July 31st. Can you give me some more credit car number samples?\"})\n", + "except Exception as e:\n", + " print(str(e))\n", + "else:\n", + " print(response['output'])" + ] + }, + { + "cell_type": "markdown", + "id": "ee52c7b8-6526-4f68-a2b3-b5ad3cf82489", + "metadata": { + "tags": [] + }, + "source": [ + "---\n", + "## With Amazon SageMaker Jumpstart\n", + "\n", + "The exmaple below shows how to use Amazon Comprehend Moderation chain with an Amazon SageMaker Jumpstart hosted LLM. You should have an Amazon SageMaker Jumpstart hosted LLM endpoint within your AWS Account. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cd49d075-bc23-4ab8-a92c-0ddbbc436c30", + "metadata": {}, + "outputs": [], + "source": [ + "endpoint_name = \"\" # replace with your SageMaker Endpoint name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5978a5e6-667d-4926-842c-d965f88e5640", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain import SagemakerEndpoint\n", + "from langchain.llms.sagemaker_endpoint import LLMContentHandler\n", + "from langchain.chains import LLMChain\n", + "from langchain.prompts import load_prompt, PromptTemplate\n", + "import json\n", + "\n", + "class ContentHandler(LLMContentHandler):\n", + " content_type = \"application/json\"\n", + " accepts = \"application/json\"\n", + "\n", + " def transform_input(self, prompt: str, model_kwargs: dict) -> bytes:\n", + " input_str = json.dumps({\"text_inputs\": prompt, **model_kwargs})\n", + " return input_str.encode('utf-8')\n", + " \n", + " def transform_output(self, output: bytes) -> str:\n", + " response_json = json.loads(output.read().decode(\"utf-8\"))\n", + " return response_json['generated_texts'][0]\n", + "\n", + "content_handler = ContentHandler()\n", + "\n", + "#prompt template for input text\n", + "llm_prompt = PromptTemplate(input_variables=[\"input_text\"], template=\"{input_text}\")\n", + "\n", + "llm_chain = LLMChain(\n", + " llm=SagemakerEndpoint(\n", + " endpoint_name=endpoint_name, \n", + " region_name='us-east-1',\n", + " model_kwargs={\"temperature\":0.97,\n", + " \"max_length\": 200,\n", + " \"num_return_sequences\": 3,\n", + " \"top_k\": 50,\n", + " \"top_p\": 0.95,\n", + " \"do_sample\": True},\n", + " content_handler=content_handler\n", + " ),\n", + " prompt=llm_prompt\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "d577b036-99a4-47fe-9a8e-4a34aa4cd88d", + "metadata": {}, + "source": [ + "Create a configuration and initialize an Amazon Comprehend Moderation chain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "859da135-94d3-4a9c-970e-a873913592e2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "moderation_config = { \n", + " \"filters\":[ BaseModerationFilters.PII, BaseModerationFilters.TOXICITY ],\n", + " \"pii\":{\"action\": BaseModerationActions.ALLOW, \"threshold\":0.5, \"labels\":[\"SSN\"], \"mask_character\": \"X\"},\n", + " \"toxicity\":{\"action\": BaseModerationActions.STOP, \"threshold\":0.5},\n", + " \"intent\":{\"action\": BaseModerationActions.ALLOW, \"threshold\":0.5,},\n", + " }\n", + "\n", + "amazon_comp_moderation = AmazonComprehendModerationChain(moderation_config=moderation_config, \n", + " client=comprehend_client ,\n", + " verbose=True)" + ] + }, + { + "cell_type": "markdown", + "id": "9abb191f-7a96-4077-8c30-b9ddc225bd6b", + "metadata": {}, + "source": [ + "The `moderation_config` will now prevent any inputs and model outputs containing obscene words or sentences, bad intent, or Pii with entities other than SSN with score above threshold or 0.5 or 50%. If it finds Pii entities - SSN - it will redact them before allowing the call to proceed. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6db5aa2a-9c00-42a0-8e24-c5ba39994f7d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "chain = (\n", + " prompt \n", + " | amazon_comp_moderation \n", + " | {llm_chain.input_keys[0]: lambda x: x['output'] } \n", + " | llm_chain \n", + " | { \"input\": lambda x: x['text'] } \n", + " | amazon_comp_moderation \n", + ")\n", + "\n", + "try:\n", + " response = chain.invoke({\"question\": \"My AnyCompany Financial Services, LLC credit card account 1111-0000-1111-0008 has 24$ due by July 31st. Can you give me some more samples?\"})\n", + "except Exception as e:\n", + " print(str(e))\n", + "else:\n", + " print(response['output'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7fdfedf9-1a0a-4a9f-a6b0-d9ed2dbaa5ad", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "availableInstances": [ + { + "_defaultOrder": 0, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.t3.medium", + "vcpuNum": 2 + }, + { + "_defaultOrder": 1, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.t3.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 2, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.t3.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 3, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.t3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 4, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 5, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 6, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 7, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 8, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 9, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 10, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 11, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 12, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5d.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 13, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5d.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 14, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5d.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 15, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5d.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 16, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5d.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 17, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5d.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 18, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5d.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 19, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 20, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": true, + "memoryGiB": 0, + "name": "ml.geospatial.interactive", + "supportedImageNames": [ + "sagemaker-geospatial-v1-0" + ], + "vcpuNum": 0 + }, + { + "_defaultOrder": 21, + "_isFastLaunch": true, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.c5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 22, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.c5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 23, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.c5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 24, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.c5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 25, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 72, + "name": "ml.c5.9xlarge", + "vcpuNum": 36 + }, + { + "_defaultOrder": 26, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 96, + "name": "ml.c5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 27, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 144, + "name": "ml.c5.18xlarge", + "vcpuNum": 72 + }, + { + "_defaultOrder": 28, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.c5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 29, + "_isFastLaunch": true, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g4dn.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 30, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g4dn.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 31, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g4dn.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 32, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g4dn.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 33, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g4dn.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 34, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g4dn.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 35, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 61, + "name": "ml.p3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 36, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 244, + "name": "ml.p3.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 37, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 488, + "name": "ml.p3.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 38, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.p3dn.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 39, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.r5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 40, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.r5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 41, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.r5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 42, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.r5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 43, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.r5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 44, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.r5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 45, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 512, + "name": "ml.r5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 46, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.r5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 47, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 48, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 49, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 50, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 51, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 52, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 53, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.g5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 54, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.g5.48xlarge", + "vcpuNum": 192 + }, + { + "_defaultOrder": 55, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 56, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4de.24xlarge", + "vcpuNum": 96 + } + ], + "instance_type": "ml.t3.medium", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/docs_skeleton/docs/guides/safety/index.mdx b/docs/docs_skeleton/docs/guides/safety/index.mdx index a64b1ea04..1f01245d1 100644 --- a/docs/docs_skeleton/docs/guides/safety/index.mdx +++ b/docs/docs_skeleton/docs/guides/safety/index.mdx @@ -2,5 +2,5 @@ One of the key concerns with using LLMs is that they may generate harmful or unethical text. This is an area of active research in the field. Here we present some built-in chains inspired by this research, which are intended to make the outputs of LLMs safer. -- [Moderation chain](/docs/use_cases/safety/moderation): Explicitly check if any output text is harmful and flag it. -- [Constitutional chain](/docs/use_cases/safety/constitutional_chain): Prompt the model with a set of principles which should guide it's behavior. +- [Moderation chain](/docs/guides/safety/moderation): Explicitly check if any output text is harmful and flag it. +- [Constitutional chain](/docs/guides/safety/constitutional_chain): Prompt the model with a set of principles which should guide it's behavior. diff --git a/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx b/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx index 3c5dfe3ec..ad02a01b7 100644 --- a/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx +++ b/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx @@ -1,6 +1,6 @@ # Few-shot prompt templates -In this tutorial, we'll learn how to create a prompt template that uses few shot examples. A few shot prompt template can be constructed from either a set of examples, or from an Example Selector object. +In this tutorial, we'll learn how to create a prompt template that uses few-shot examples. A few-shot prompt template can be constructed from either a set of examples, or from an Example Selector object. import Example from "@snippets/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx" diff --git a/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/index.mdx b/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/index.mdx index 655577800..c64e73865 100644 --- a/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/index.mdx +++ b/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/index.mdx @@ -6,7 +6,7 @@ sidebar_position: 0 Prompt templates are pre-defined recipes for generating prompts for language models. -A template may include instructions, few shot examples, and specific context and +A template may include instructions, few-shot examples, and specific context and questions appropriate for a given task. LangChain provides tooling to create and work with prompt templates. diff --git a/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/partial.mdx b/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/partial.mdx index b76431dfc..ac2edea53 100644 --- a/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/partial.mdx +++ b/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/partial.mdx @@ -1,6 +1,6 @@ # Partial prompt templates -Like other methods, it can make sense to "partial" a prompt template - eg pass in a subset of the required values, as to create a new prompt template which expects only the remaining subset of values. +Like other methods, it can make sense to "partial" a prompt template - e.g. pass in a subset of the required values, as to create a new prompt template which expects only the remaining subset of values. LangChain supports this in two ways: 1. Partial formatting with string values. diff --git a/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/prompt_composition.mdx b/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/prompt_composition.mdx index 439e26ea3..c1b96c107 100644 --- a/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/prompt_composition.mdx +++ b/docs/docs_skeleton/docs/modules/model_io/prompts/prompt_templates/prompt_composition.mdx @@ -2,8 +2,8 @@ This notebook goes over how to compose multiple prompts together. This can be useful when you want to reuse parts of prompts. This can be done with a PipelinePrompt. A PipelinePrompt consists of two main parts: -- Final prompt: This is the final prompt that is returned -- Pipeline prompts: This is a list of tuples, consisting of a string name and a prompt template. Each prompt template will be formatted and then passed to future prompt templates as a variable with the same name. +- Final prompt: The final prompt that is returned +- Pipeline prompts: A list of tuples, consisting of a string name and a prompt template. Each prompt template will be formatted and then passed to future prompt templates as a variable with the same name. import Example from "@snippets/modules/model_io/prompts/prompt_templates/prompt_composition.mdx" diff --git a/docs/docs_skeleton/src/theme/CodeBlock/index.js b/docs/docs_skeleton/src/theme/CodeBlock/index.js index e97503cd8..84da0b86e 100644 --- a/docs/docs_skeleton/src/theme/CodeBlock/index.js +++ b/docs/docs_skeleton/src/theme/CodeBlock/index.js @@ -24,8 +24,7 @@ function Imports({ imports }) {
  • {imported} - {" "} - from {source} +
  • ))} diff --git a/docs/docs_skeleton/static/img/ReAct.png b/docs/docs_skeleton/static/img/ReAct.png new file mode 100644 index 000000000..f4e4260a8 Binary files /dev/null and b/docs/docs_skeleton/static/img/ReAct.png differ diff --git a/docs/docs_skeleton/static/img/agents_use_case_1.png b/docs/docs_skeleton/static/img/agents_use_case_1.png new file mode 100644 index 000000000..14fec903c Binary files /dev/null and b/docs/docs_skeleton/static/img/agents_use_case_1.png differ diff --git a/docs/docs_skeleton/static/img/agents_use_case_trace_1.png b/docs/docs_skeleton/static/img/agents_use_case_trace_1.png new file mode 100644 index 000000000..26c6d8c20 Binary files /dev/null and b/docs/docs_skeleton/static/img/agents_use_case_trace_1.png differ diff --git a/docs/docs_skeleton/static/img/agents_use_case_trace_2.png b/docs/docs_skeleton/static/img/agents_use_case_trace_2.png new file mode 100644 index 000000000..bacf1328a Binary files /dev/null and b/docs/docs_skeleton/static/img/agents_use_case_trace_2.png differ diff --git a/docs/docs_skeleton/static/img/agents_vs_chains.png b/docs/docs_skeleton/static/img/agents_vs_chains.png new file mode 100644 index 000000000..78ada289a Binary files /dev/null and b/docs/docs_skeleton/static/img/agents_vs_chains.png differ diff --git a/docs/docs_skeleton/static/img/oai_function_agent.png b/docs/docs_skeleton/static/img/oai_function_agent.png new file mode 100644 index 000000000..a492f1c15 Binary files /dev/null and b/docs/docs_skeleton/static/img/oai_function_agent.png differ diff --git a/docs/docs_skeleton/vercel.json b/docs/docs_skeleton/vercel.json index 6472c0453..b88a1f8e2 100644 --- a/docs/docs_skeleton/vercel.json +++ b/docs/docs_skeleton/vercel.json @@ -1,5 +1,9 @@ { "redirects": [ + { + "source": "/docs/modules/data_connection/caching_embeddings(/?)", + "destination": "/docs/modules/data_connection/text_embedding/caching_embeddings" + }, { "source": "/en/latest/additional_resources/youtube.html", "destination": "/docs/additional_resources/youtube" @@ -166,7 +170,7 @@ }, { "source": "/docs/integrations/deeplake", - "destination": "/docs/integrations/providers/deeplake" + "destination": "/docs/integrations/providers/activeloop_deeplake" }, { "source": "/docs/integrations/diffbot", diff --git a/docs/extras/ecosystem/dependents.mdx b/docs/extras/ecosystem/dependents.mdx index b21895910..2de471678 100644 --- a/docs/extras/ecosystem/dependents.mdx +++ b/docs/extras/ecosystem/dependents.mdx @@ -51,6 +51,7 @@ Dependents stats for `langchain-ai/langchain` |[e2b-dev/e2b](https://github.com/e2b-dev/e2b) | 5365 | |[mage-ai/mage-ai](https://github.com/mage-ai/mage-ai) | 5352 | |[wenda-LLM/wenda](https://github.com/wenda-LLM/wenda) | 5192 | +|[LangChain-Chinese-Getting-Started-Guide](https://github.com/liaokongVFX/LangChain-Chinese-Getting-Started-Guide) | 5129 | |[zilliztech/GPTCache](https://github.com/zilliztech/GPTCache) | 4993 | |[GreyDGL/PentestGPT](https://github.com/GreyDGL/PentestGPT) | 4831 | |[zauberzeug/nicegui](https://github.com/zauberzeug/nicegui) | 4824 | diff --git a/docs/extras/guides/debugging.md b/docs/extras/guides/debugging.md index 203428989..2527034dc 100644 --- a/docs/extras/guides/debugging.md +++ b/docs/extras/guides/debugging.md @@ -8,7 +8,7 @@ Here's a few different tools and functionalities to aid in debugging. ## Tracing -Platforms with tracing capabilities like [LangSmith](/docs/guides/langsmith/) and [WandB](/docs/ecosystem/integrations/agent_with_wandb_tracing) are the most comprehensive solutions for debugging. These platforms make it easy to not only log and visualize LLM apps, but also to actively debug, test and refine them. +Platforms with tracing capabilities like [LangSmith](/docs/guides/langsmith/) and [WandB](/docs/integrations/providers/wandb_tracing) are the most comprehensive solutions for debugging. These platforms make it easy to not only log and visualize LLM apps, but also to actively debug, test and refine them. For anyone building production-grade LLM applications, we highly recommend using a platform like this. diff --git a/docs/extras/guides/deployments/template_repos.mdx b/docs/extras/guides/deployments/template_repos.mdx index ec8d03237..45c4a43de 100644 --- a/docs/extras/guides/deployments/template_repos.mdx +++ b/docs/extras/guides/deployments/template_repos.mdx @@ -79,3 +79,7 @@ See OpenLLM's [integration doc](https://github.com/bentoml/OpenLLM#%EF%B8%8F-int ## [Databutton](https://databutton.com/home?new-data-app=true) These templates serve as examples of how to build, deploy, and share LangChain applications using Databutton. You can create user interfaces with Streamlit, automate tasks by scheduling Python code, and store files and data in the built-in store. Examples include a Chatbot interface with conversational memory, a Personal search engine, and a starter template for LangChain apps. Deploying and sharing is just one click away. + +## [AzureML Online Endpoint](https://github.com/Azure/azureml-examples/blob/main/sdk/python/endpoints/online/llm/langchain/1_langchain_basic_deploy.ipynb) + +A minimal example of how to deploy LangChain to an Azure Machine Learning Online Endpoint. \ No newline at end of file diff --git a/docs/extras/guides/expression_language/cookbook.ipynb b/docs/extras/guides/expression_language/cookbook.ipynb index d7aad4291..04b74164d 100644 --- a/docs/extras/guides/expression_language/cookbook.ipynb +++ b/docs/extras/guides/expression_language/cookbook.ipynb @@ -1318,7 +1318,7 @@ "source": [ "template = \"\"\"Write some python code to solve the user's problem. \n", "\n", - "Return only python code in Markdown format, eg:\n", + "Return only python code in Markdown format, e.g.:\n", "\n", "```python\n", "....\n", diff --git a/docs/extras/integrations/callbacks/promptlayer.ipynb b/docs/extras/integrations/callbacks/promptlayer.ipynb index f6d7cd976..2f3b5b9f8 100644 --- a/docs/extras/integrations/callbacks/promptlayer.ipynb +++ b/docs/extras/integrations/callbacks/promptlayer.ipynb @@ -11,7 +11,7 @@ "\n", "[PromptLayer](https://promptlayer.com) is a an LLM observability platform that lets you visualize requests, version prompts, and track usage. In this guide we will go over how to setup the `PromptLayerCallbackHandler`. \n", "\n", - "While PromptLayer does have LLMs that integrate directly with LangChain (eg [`PromptLayerOpenAI`](https://python.langchain.com/docs/integrations/llms/promptlayer_openai)), this callback is the recommended way to integrate PromptLayer with LangChain.\n", + "While PromptLayer does have LLMs that integrate directly with LangChain (e.g. [`PromptLayerOpenAI`](https://python.langchain.com/docs/integrations/llms/promptlayer_openai)), this callback is the recommended way to integrate PromptLayer with LangChain.\n", "\n", "See [our docs](https://docs.promptlayer.com/languages/langchain) for more information." ] diff --git a/docs/extras/integrations/chat/ollama.ipynb b/docs/extras/integrations/chat/ollama.ipynb new file mode 100644 index 000000000..41a90405b --- /dev/null +++ b/docs/extras/integrations/chat/ollama.ipynb @@ -0,0 +1,382 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Ollama\n", + "\n", + "[Ollama](https://ollama.ai/) allows you to run open-source large language models, such as LLaMA2, locally.\n", + "\n", + "Ollama bundles model weights, configuration, and data into a single package, defined by a Modelfile. \n", + "\n", + "It optimizes setup and configuration details, including GPU usage.\n", + "\n", + "For a complete list of supported models and model variants, see the [Ollama model library](https://ollama.ai/library).\n", + "\n", + "## Setup\n", + "\n", + "First, follow [these instructions](https://github.com/jmorganca/ollama) to set up and run a local Ollama instance:\n", + "\n", + "* [Download](https://ollama.ai/download)\n", + "* Fetch a model via `ollama pull `\n", + "* e.g., for `Llama-7b`: `ollama pull llama2`\n", + "* This will download the most basic version of the model (e.g., minimum # parameters and 4-bit quantization)\n", + "* On Mac, it will download to:\n", + "\n", + "`~/.ollama/models/manifests/registry.ollama.ai/library//latest`\n", + "\n", + "* And we can specify a particular version, e.g., for `ollama pull vicuna:13b-v1.5-16k-q4_0`\n", + "* The file is here with the model version in place of `latest`\n", + "\n", + "`~/.ollama/models/manifests/registry.ollama.ai/library/vicuna/13b-v1.5-16k-q4_0`\n", + "\n", + "You can easily access models in a few ways:\n", + "\n", + "1/ if the app is running:\n", + "* All of your local models are automatically served on `localhost:11434`\n", + "* Select your model when setting `llm = Ollama(..., model=\":\")`\n", + "* If you set `llm = Ollama(..., model=\"> Use the following pieces of context to answer the question at the end. \n", + "If you don't know the answer, just say that you don't know, don't try to make up an answer. \n", + "Use three sentences maximum and keep the answer as concise as possible. <>\n", + "{context}\n", + "Question: {question}\n", + "Helpful Answer:[/INST]\"\"\"\n", + "QA_CHAIN_PROMPT = PromptTemplate(\n", + " input_variables=[\"context\", \"question\"],\n", + " template=template,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# Chat model\n", + "from langchain.chat_models import ChatOllama\n", + "from langchain.callbacks.manager import CallbackManager\n", + "from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler\n", + "chat_model = ChatOllama(model=\"llama2:13b-chat\",\n", + " verbose=True,\n", + " callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# QA chain\n", + "from langchain.chains import RetrievalQA\n", + "qa_chain = RetrievalQA.from_chain_type(\n", + " chat_model,\n", + " retriever=vectorstore.as_retriever(),\n", + " chain_type_kwargs={\"prompt\": QA_CHAIN_PROMPT},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Based on the provided context, there are three approaches to task decomposition for AI agents:\n", + "\n", + "1. LLM with simple prompting, such as \"Steps for XYZ.\" or \"What are the subgoals for achieving XYZ?\"\n", + "2. Task-specific instructions, such as \"Write a story outline\" for writing a novel.\n", + "3. Human inputs." + ] + } + ], + "source": [ + "question = \"What are the various approaches to Task Decomposition for AI Agents?\"\n", + "result = qa_chain({\"query\": question})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also get logging for tokens." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Based on the given context, here is the answer to the question \"What are the approaches to Task Decomposition?\"\n", + "\n", + "There are three approaches to task decomposition:\n", + "\n", + "1. LLM with simple prompting, such as \"Steps for XYZ.\" or \"What are the subgoals for achieving XYZ?\"\n", + "2. Using task-specific instructions, like \"Write a story outline\" for writing a novel.\n", + "3. With human inputs.{'model': 'llama2:13b-chat', 'created_at': '2023-08-23T15:37:51.469127Z', 'done': True, 'context': [1, 29871, 1, 29961, 25580, 29962, 518, 25580, 29962, 518, 25580, 29962, 3532, 14816, 29903, 6778, 4803, 278, 1494, 12785, 310, 3030, 304, 1234, 278, 1139, 472, 278, 1095, 29889, 29871, 13, 3644, 366, 1016, 29915, 29873, 1073, 278, 1234, 29892, 925, 1827, 393, 366, 1016, 29915, 29873, 1073, 29892, 1016, 29915, 29873, 1018, 304, 1207, 701, 385, 1234, 29889, 29871, 13, 11403, 2211, 25260, 7472, 322, 3013, 278, 1234, 408, 3022, 895, 408, 1950, 29889, 529, 829, 14816, 29903, 6778, 13, 5398, 26227, 508, 367, 2309, 313, 29896, 29897, 491, 365, 26369, 411, 2560, 9508, 292, 763, 376, 7789, 567, 363, 1060, 29979, 29999, 7790, 29876, 29896, 19602, 376, 5618, 526, 278, 1014, 1484, 1338, 363, 3657, 15387, 1060, 29979, 29999, 29973, 613, 313, 29906, 29897, 491, 773, 3414, 29899, 14940, 11994, 29936, 321, 29889, 29887, 29889, 376, 6113, 263, 5828, 27887, 1213, 363, 5007, 263, 9554, 29892, 470, 313, 29941, 29897, 411, 5199, 10970, 29889, 13, 13, 5398, 26227, 508, 367, 2309, 313, 29896, 29897, 491, 365, 26369, 411, 2560, 9508, 292, 763, 376, 7789, 567, 363, 1060, 29979, 29999, 7790, 29876, 29896, 19602, 376, 5618, 526, 278, 1014, 1484, 1338, 363, 3657, 15387, 1060, 29979, 29999, 29973, 613, 313, 29906, 29897, 491, 773, 3414, 29899, 14940, 11994, 29936, 321, 29889, 29887, 29889, 376, 6113, 263, 5828, 27887, 1213, 363, 5007, 263, 9554, 29892, 470, 313, 29941, 29897, 411, 5199, 10970, 29889, 13, 13, 1451, 16047, 267, 297, 1472, 29899, 8489, 18987, 322, 3414, 26227, 29901, 1858, 9450, 975, 263, 3309, 29891, 4955, 322, 17583, 3902, 8253, 278, 1650, 2913, 3933, 18066, 292, 29889, 365, 26369, 29879, 21117, 304, 10365, 13900, 746, 20050, 411, 15668, 4436, 29892, 3907, 963, 3109, 16424, 9401, 304, 25618, 1058, 5110, 515, 14260, 322, 1059, 29889, 13, 13, 1451, 16047, 267, 297, 1472, 29899, 8489, 18987, 322, 3414, 26227, 29901, 1858, 9450, 975, 263, 3309, 29891, 4955, 322, 17583, 3902, 8253, 278, 1650, 2913, 3933, 18066, 292, 29889, 365, 26369, 29879, 21117, 304, 10365, 13900, 746, 20050, 411, 15668, 4436, 29892, 3907, 963, 3109, 16424, 9401, 304, 25618, 1058, 5110, 515, 14260, 322, 1059, 29889, 13, 16492, 29901, 1724, 526, 278, 13501, 304, 9330, 897, 510, 3283, 29973, 13, 29648, 1319, 673, 10834, 29914, 25580, 29962, 518, 29914, 25580, 29962, 518, 29914, 25580, 29962, 29871, 16564, 373, 278, 2183, 3030, 29892, 1244, 338, 278, 1234, 304, 278, 1139, 376, 5618, 526, 278, 13501, 304, 9330, 897, 510, 3283, 3026, 13, 13, 8439, 526, 2211, 13501, 304, 3414, 26227, 29901, 13, 13, 29896, 29889, 365, 26369, 411, 2560, 9508, 292, 29892, 1316, 408, 376, 7789, 567, 363, 1060, 29979, 29999, 1213, 470, 376, 5618, 526, 278, 1014, 1484, 1338, 363, 3657, 15387, 1060, 29979, 29999, 3026, 13, 29906, 29889, 5293, 3414, 29899, 14940, 11994, 29892, 763, 376, 6113, 263, 5828, 27887, 29908, 363, 5007, 263, 9554, 29889, 13, 29941, 29889, 2973, 5199, 10970, 29889, 2], 'total_duration': 9514823750, 'load_duration': 795542, 'sample_count': 99, 'sample_duration': 68732000, 'prompt_eval_count': 146, 'prompt_eval_duration': 6206275000, 'eval_count': 98, 'eval_duration': 3229641000}\n" + ] + } + ], + "source": [ + "from langchain.schema import LLMResult\n", + "from langchain.callbacks.base import BaseCallbackHandler\n", + "\n", + "class GenerationStatisticsCallback(BaseCallbackHandler):\n", + " def on_llm_end(self, response: LLMResult, **kwargs) -> None:\n", + " print(response.generations[0][0].generation_info)\n", + " \n", + "callback_manager = CallbackManager([StreamingStdOutCallbackHandler(), GenerationStatisticsCallback()])\n", + "\n", + "chat_model = ChatOllama(model=\"llama2:13b-chat\",\n", + " verbose=True,\n", + " callback_manager=callback_manager)\n", + "\n", + "qa_chain = RetrievalQA.from_chain_type(\n", + " chat_model,\n", + " retriever=vectorstore.as_retriever(),\n", + " chain_type_kwargs={\"prompt\": QA_CHAIN_PROMPT},\n", + ")\n", + "\n", + "question = \"What are the approaches to Task Decomposition?\"\n", + "result = qa_chain({\"query\": question})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`eval_count` / (`eval_duration`/10e9) gets `tok / s`" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "30.343929867127645" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "98 / (3229641000/1000/1000/1000)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/extras/integrations/chat/openai.ipynb b/docs/extras/integrations/chat/openai.ipynb index c94cc92e4..d75fb6efa 100644 --- a/docs/extras/integrations/chat/openai.ipynb +++ b/docs/extras/integrations/chat/openai.ipynb @@ -143,12 +143,39 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "c095285d", + "cell_type": "markdown", + "id": "57e27714", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "## Fine-tuning\n", + "\n", + "You can call fine-tuned OpenAI models by passing in your corresponding `modelName` parameter.\n", + "\n", + "This generally takes the form of `ft:{OPENAI_MODEL_NAME}:{ORG_NAME}::{MODEL_ID}`. For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "33c4a8b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content=\"J'adore la programmation.\", additional_kwargs={}, example=False)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fine_tuned_model = ChatOpenAI(temperature=0, model_name=\"ft:gpt-3.5-turbo-0613:langchain::7qTVM5AR\")\n", + "\n", + "fine_tuned_model(messages)" + ] } ], "metadata": { @@ -167,7 +194,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.10.5" } }, "nbformat": 4, diff --git a/docs/extras/integrations/chat_loaders/discord.ipynb b/docs/extras/integrations/chat_loaders/discord.ipynb new file mode 100644 index 000000000..973b59640 --- /dev/null +++ b/docs/extras/integrations/chat_loaders/discord.ipynb @@ -0,0 +1,325 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c4ff9336-1cf3-459e-bd70-d1314c1da6a0", + "metadata": {}, + "source": [ + "# Discord\n", + "\n", + "This notebook shows how to create your own chat loader that works on copy-pasted messages (from dms) to a list of LangChain messages.\n", + "\n", + "The process has four steps:\n", + "1. Create the chat .txt file by copying chats from the Discord app and pasting them in a file on your local computer\n", + "2. Copy the chat loader definition from below to a local file.\n", + "3. Initialize the `DiscordChatLoader` with the file path pointed to the text file.\n", + "4. Call `loader.load()` (or `loader.lazy_load()`) to perform the conversion.\n", + "\n", + "## 1. Creat message dump\n", + "\n", + "Currently (2023/08/23) this loader only supports .txt files in the format generated by copying messages in the app to your clipboard and pasting in a file. Below is an example." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e4ccfdfa-6869-4d67-90a0-ab99f01b7553", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting discord_chats.txt\n" + ] + } + ], + "source": [ + "%%writefile discord_chats.txt\n", + "talkingtower — 08/15/2023 11:10 AM\n", + "Love music! Do you like jazz?\n", + "reporterbob — 08/15/2023 9:27 PM\n", + "Yes! Jazz is fantastic. Ever heard this one?\n", + "Website\n", + "Listen to classic jazz track...\n", + "\n", + "talkingtower — Yesterday at 5:03 AM\n", + "Indeed! Great choice. 🎷\n", + "reporterbob — Yesterday at 5:23 AM\n", + "Thanks! How about some virtual sightseeing?\n", + "Website\n", + "Virtual tour of famous landmarks...\n", + "\n", + "talkingtower — Today at 2:38 PM\n", + "Sounds fun! Let's explore.\n", + "reporterbob — Today at 2:56 PM\n", + "Enjoy the tour! See you around.\n", + "talkingtower — Today at 3:00 PM\n", + "Thank you! Goodbye! 👋\n", + "reporterbob — Today at 3:02 PM\n", + "Farewell! Happy exploring." + ] + }, + { + "cell_type": "markdown", + "id": "359565a7-dad3-403c-a73c-6414b1295127", + "metadata": {}, + "source": [ + "## 2. Define chat loader\n", + "\n", + "LangChain currently does not support " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a429e0c4-4d7d-45f8-bbbb-c7fc5229f6af", + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "import re\n", + "from typing import Iterator, List\n", + "\n", + "from langchain import schema\n", + "from langchain.chat_loaders import base as chat_loaders\n", + "\n", + "logger = logging.getLogger()\n", + "\n", + "\n", + "class DiscordChatLoader(chat_loaders.BaseChatLoader):\n", + " \n", + " def __init__(self, path: str):\n", + " \"\"\"\n", + " Initialize the Discord chat loader.\n", + "\n", + " Args:\n", + " path: Path to the exported Discord chat text file.\n", + " \"\"\"\n", + " self.path = path\n", + " self._message_line_regex = re.compile(\n", + " r\"(.+?) — (\\w{3,9} \\d{1,2}(?:st|nd|rd|th)?(?:, \\d{4})? \\d{1,2}:\\d{2} (?:AM|PM)|Today at \\d{1,2}:\\d{2} (?:AM|PM)|Yesterday at \\d{1,2}:\\d{2} (?:AM|PM))\", # noqa\n", + " flags=re.DOTALL,\n", + " )\n", + "\n", + " def _load_single_chat_session_from_txt(\n", + " self, file_path: str\n", + " ) -> chat_loaders.ChatSession:\n", + " \"\"\"\n", + " Load a single chat session from a text file.\n", + "\n", + " Args:\n", + " file_path: Path to the text file containing the chat messages.\n", + "\n", + " Returns:\n", + " A `ChatSession` object containing the loaded chat messages.\n", + " \"\"\"\n", + " with open(file_path, \"r\", encoding=\"utf-8\") as file:\n", + " lines = file.readlines()\n", + "\n", + " results: List[schema.BaseMessage] = []\n", + " current_sender = None\n", + " current_timestamp = None\n", + " current_content = []\n", + " for line in lines:\n", + " if re.match(\n", + " r\".+? — (\\d{2}/\\d{2}/\\d{4} \\d{1,2}:\\d{2} (?:AM|PM)|Today at \\d{1,2}:\\d{2} (?:AM|PM)|Yesterday at \\d{1,2}:\\d{2} (?:AM|PM))\", # noqa\n", + " line,\n", + " ):\n", + " if current_sender and current_content:\n", + " results.append(\n", + " schema.HumanMessage(\n", + " content=\"\".join(current_content).strip(),\n", + " additional_kwargs={\n", + " \"sender\": current_sender,\n", + " \"events\": [{\"message_time\": current_timestamp}],\n", + " },\n", + " )\n", + " )\n", + " current_sender, current_timestamp = line.split(\" — \")[:2]\n", + " current_content = [\n", + " line[len(current_sender) + len(current_timestamp) + 4 :].strip()\n", + " ]\n", + " elif re.match(r\"\\[\\d{1,2}:\\d{2} (?:AM|PM)\\]\", line.strip()):\n", + " results.append(\n", + " schema.HumanMessage(\n", + " content=\"\".join(current_content).strip(),\n", + " additional_kwargs={\n", + " \"sender\": current_sender,\n", + " \"events\": [{\"message_time\": current_timestamp}],\n", + " },\n", + " )\n", + " )\n", + " current_timestamp = line.strip()[1:-1]\n", + " current_content = []\n", + " else:\n", + " current_content.append(\"\\n\" + line.strip())\n", + "\n", + " if current_sender and current_content:\n", + " results.append(\n", + " schema.HumanMessage(\n", + " content=\"\".join(current_content).strip(),\n", + " additional_kwargs={\n", + " \"sender\": current_sender,\n", + " \"events\": [{\"message_time\": current_timestamp}],\n", + " },\n", + " )\n", + " )\n", + "\n", + " return chat_loaders.ChatSession(messages=results)\n", + "\n", + " def lazy_load(self) -> Iterator[chat_loaders.ChatSession]:\n", + " \"\"\"\n", + " Lazy load the messages from the chat file and yield them in the required format.\n", + "\n", + " Yields:\n", + " A `ChatSession` object containing the loaded chat messages.\n", + " \"\"\"\n", + " yield self._load_single_chat_session_from_txt(self.path)\n" + ] + }, + { + "cell_type": "markdown", + "id": "c8240393-48be-44d2-b0d6-52c215cd8ac2", + "metadata": {}, + "source": [ + "## 2. Create loader\n", + "\n", + "We will point to the file we just wrote to disk." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "1268de40-b0e5-445d-9cd8-54856cd0293a", + "metadata": {}, + "outputs": [], + "source": [ + "loader = DiscordChatLoader(\n", + " path=\"./discord_chats.txt\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "4928df4b-ae31-48a7-bd76-be3ecee1f3e0", + "metadata": {}, + "source": [ + "## 3. Load Messages\n", + "\n", + "Assuming the format is correct, the loader will convert the chats to langchain messages." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c8a0836d-4a22-4790-bfe9-97f2145bb0d6", + "metadata": {}, + "outputs": [], + "source": [ + "from typing import List\n", + "from langchain.chat_loaders.base import ChatSession\n", + "from langchain.chat_loaders.utils import (\n", + " map_ai_messages,\n", + " merge_chat_runs,\n", + ")\n", + "\n", + "raw_messages = loader.lazy_load()\n", + "# Merge consecutive messages from the same sender into a single message\n", + "merged_messages = merge_chat_runs(raw_messages)\n", + "# Convert messages from \"talkingtower\" to AI messages\n", + "messages: List[ChatSession] = list(map_ai_messages(merged_messages, sender=\"talkingtower\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1913963b-c44e-4f7a-aba7-0423c9b8bd59", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'messages': [AIMessage(content='Love music! Do you like jazz?', additional_kwargs={'sender': 'talkingtower', 'events': [{'message_time': '08/15/2023 11:10 AM\\n'}]}, example=False),\n", + " HumanMessage(content='Yes! Jazz is fantastic. Ever heard this one?\\nWebsite\\nListen to classic jazz track...', additional_kwargs={'sender': 'reporterbob', 'events': [{'message_time': '08/15/2023 9:27 PM\\n'}]}, example=False),\n", + " AIMessage(content='Indeed! Great choice. 🎷', additional_kwargs={'sender': 'talkingtower', 'events': [{'message_time': 'Yesterday at 5:03 AM\\n'}]}, example=False),\n", + " HumanMessage(content='Thanks! How about some virtual sightseeing?\\nWebsite\\nVirtual tour of famous landmarks...', additional_kwargs={'sender': 'reporterbob', 'events': [{'message_time': 'Yesterday at 5:23 AM\\n'}]}, example=False),\n", + " AIMessage(content=\"Sounds fun! Let's explore.\", additional_kwargs={'sender': 'talkingtower', 'events': [{'message_time': 'Today at 2:38 PM\\n'}]}, example=False),\n", + " HumanMessage(content='Enjoy the tour! See you around.', additional_kwargs={'sender': 'reporterbob', 'events': [{'message_time': 'Today at 2:56 PM\\n'}]}, example=False),\n", + " AIMessage(content='Thank you! Goodbye! 👋', additional_kwargs={'sender': 'talkingtower', 'events': [{'message_time': 'Today at 3:00 PM\\n'}]}, example=False),\n", + " HumanMessage(content='Farewell! Happy exploring.', additional_kwargs={'sender': 'reporterbob', 'events': [{'message_time': 'Today at 3:02 PM\\n'}]}, example=False)]}]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "messages" + ] + }, + { + "cell_type": "markdown", + "id": "8595a518-5c89-44aa-94a7-ca51e7e2a5fa", + "metadata": {}, + "source": [ + "### Next Steps\n", + "\n", + "You can then use these messages how you see fit, such as finetuning a model, few-shot example selection, or directly make predictions for the next message " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "08ff0a1e-fca0-4da3-aacd-d7401f99d946", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thank you! Have a wonderful day! 🌟" + ] + } + ], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI()\n", + "\n", + "for chunk in llm.stream(messages[0]['messages']):\n", + " print(chunk.content, end=\"\", flush=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "50a5251f-074a-4a3c-a2b0-b1de85e0ac6a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/chat_loaders/example_data/dataset_twitter-scraper_2023-08-23_22-13-19-740.json b/docs/extras/integrations/chat_loaders/example_data/dataset_twitter-scraper_2023-08-23_22-13-19-740.json new file mode 100644 index 000000000..9d7ce57b5 --- /dev/null +++ b/docs/extras/integrations/chat_loaders/example_data/dataset_twitter-scraper_2023-08-23_22-13-19-740.json @@ -0,0 +1,2635 @@ +[{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1519480761749016577", + "conversation_id": "1519480761749016577", + "full_text": "Next I’m buying Coca-Cola to put the cocaine back in", + "reply_count": 187291, + "retweet_count": 648962, + "favorite_count": 4596262, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1519480761749016577", + "created_at": "2022-04-28T00:56:58.000Z", + "quote_count": 171980, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1518623997054918657", + "conversation_id": "1518623997054918657", + "full_text": "I hope that even my worst critics remain on Twitter, because that is what free speech means", + "reply_count": 174468, + "retweet_count": 351409, + "favorite_count": 3105543, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1518623997054918657", + "created_at": "2022-04-25T16:12:30.000Z", + "quote_count": 70717, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1519495072802390016", + "conversation_id": "1519495072802390016", + "full_text": "Let’s make Twitter maximum fun!", + "reply_count": 110542, + "retweet_count": 184310, + "favorite_count": 2542681, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1519495072802390016", + "created_at": "2022-04-28T01:53:50.000Z", + "quote_count": 34654, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1518677066325053441", + "conversation_id": "1518677066325053441", + "full_text": "🚀💫♥️ Yesss!!! ♥️💫🚀 https://t.co/0T9HzUHuh6", + "reply_count": 145150, + "retweet_count": 330889, + "favorite_count": 2505986, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FRNsuSFWUAUW6aP.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1518677066325053441", + "created_at": "2022-04-25T19:43:22.000Z", + "quote_count": 61362, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1519495982723084290", + "conversation_id": "1519495982723084290", + "full_text": "Listen, I can’t do miracles ok https://t.co/z7dvLMUXy8", + "reply_count": 74894, + "retweet_count": 202182, + "favorite_count": 2473727, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FRZViwWX0AMsqQ1.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1519495982723084290", + "created_at": "2022-04-28T01:57:27.000Z", + "quote_count": 25525, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1585841080431321088", + "conversation_id": "1585841080431321088", + "full_text": "the bird is freed", + "reply_count": 137792, + "retweet_count": 330476, + "favorite_count": 2370568, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1585841080431321088", + "created_at": "2022-10-28T03:49:11.000Z", + "quote_count": 52481, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1586104694421659648", + "conversation_id": "1586104694421659648", + "full_text": "Comedy is now legal on Twitter", + "reply_count": 87869, + "retweet_count": 236840, + "favorite_count": 2274201, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1586104694421659648", + "created_at": "2022-10-28T21:16:42.000Z", + "quote_count": 39559, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1593459801966538755", + "conversation_id": "1593459801966538755", + "full_text": "https://t.co/rbwbsLA1ZG", + "reply_count": 67716, + "retweet_count": 218714, + "favorite_count": 2030318, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fh0bPd7VQAAU31D.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1593459801966538755", + "created_at": "2022-11-18T04:23:16.000Z", + "quote_count": 165205, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1523465632502906880", + "conversation_id": "1523465632502906880", + "full_text": "If I die under mysterious circumstances, it’s been nice knowin ya", + "reply_count": 142816, + "retweet_count": 164576, + "favorite_count": 1814691, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1523465632502906880", + "created_at": "2022-05-09T00:51:26.000Z", + "quote_count": 40125, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1587894226695884800", + "conversation_id": "1587894226695884800", + "full_text": "https://t.co/kGncG7Hs3M", + "reply_count": 71915, + "retweet_count": 167091, + "favorite_count": 1796047, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FglVYVmXkAIWB5w.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1587894226695884800", + "created_at": "2022-11-02T19:47:39.000Z", + "quote_count": 63550, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1236029449042198528", + "conversation_id": "1236029449042198528", + "full_text": "The coronavirus panic is dumb", + "reply_count": 39483, + "retweet_count": 267574, + "favorite_count": 1453833, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1236029449042198528", + "created_at": "2020-03-06T20:42:39.000Z", + "quote_count": 38185, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1519020176884305920", + "conversation_id": "1519020176884305920", + "full_text": "The extreme antibody reaction from those who fear free speech says it all", + "reply_count": 76483, + "retweet_count": 182948, + "favorite_count": 1586156, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1519020176884305920", + "created_at": "2022-04-26T18:26:46.000Z", + "quote_count": 17843, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1685096284275802112", + "conversation_id": "1685096284275802112", + "full_text": "https://t.co/XEydRiST9D", + "reply_count": 129650, + "retweet_count": 100921, + "favorite_count": 1672309, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/F2KqI_ZXUAAGRCD.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1685096284275802112", + "created_at": "2023-07-29T01:13:56.000Z", + "view_count": 153952239, + "quote_count": 65149, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1519735033950470144", + "conversation_id": "1519735033950470144", + "full_text": "https://t.co/Q9OjlJhi7f", + "reply_count": 88482, + "retweet_count": 199755, + "favorite_count": 1498481, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FRcu9TeXEAMjvTM.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1519735033950470144", + "created_at": "2022-04-28T17:47:22.000Z", + "quote_count": 43234, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1519415674111672325", + "conversation_id": "1519415674111672325", + "full_text": "For Twitter to deserve public trust, it must be politically neutral, which effectively means upsetting the far right and the far left equally", + "reply_count": 77096, + "retweet_count": 137275, + "favorite_count": 1489409, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1519415674111672325", + "created_at": "2022-04-27T20:38:20.000Z", + "quote_count": 28306, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1479236333516165121", + "conversation_id": "1479236333516165121", + "full_text": "Starlinks with “lasers” deployed to orbit https://t.co/Y1eg9gl7sJ", + "reply_count": 12544, + "retweet_count": 9849, + "favorite_count": 915843, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FIdNmXtVkAEF0Ss.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1479236333516165121", + "created_at": "2022-01-06T23:39:59.000Z", + "quote_count": 1185, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1670234980776132608", + "conversation_id": "1670234980776132608", + "full_text": "Oh hi lol https://t.co/pLxkLDu0Qs", + "reply_count": 56500, + "retweet_count": 125873, + "favorite_count": 1546285, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fy3d3Q4XsAAPSAN.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1670234980776132608", + "created_at": "2023-06-18T01:00:25.000Z", + "view_count": 80352350, + "quote_count": 9952, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1519469891455234048", + "conversation_id": "1519469891455234048", + "full_text": "Twitter DMs should have end to end encryption like Signal, so no one can spy on or hack your messages", + "reply_count": 40662, + "retweet_count": 101908, + "favorite_count": 1403300, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1519469891455234048", + "created_at": "2022-04-28T00:13:47.000Z", + "quote_count": 16661, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1625368108461613057", + "conversation_id": "1625368108461613057", + "full_text": "https://t.co/iZUukCVrl5", + "reply_count": 46125, + "retweet_count": 80611, + "favorite_count": 1436396, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fo53ramacAAigCq.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1625368108461613057", + "created_at": "2023-02-14T05:35:29.000Z", + "view_count": 177548664, + "quote_count": 20288, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1517707521343082496", + "conversation_id": "1517707521343082496", + "full_text": "in case u need to lose a boner fast https://t.co/fcHiaXKCJi", + "reply_count": 68690, + "retweet_count": 128285, + "favorite_count": 1353674, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FQ_68lnWQAIuYMM.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1517707521343082496", + "created_at": "2022-04-23T03:30:45.000Z", + "quote_count": 30414, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1531647849599057921", + "conversation_id": "1531647849599057921", + "full_text": "https://t.co/G83vCrHHJf", + "reply_count": 44573, + "retweet_count": 128520, + "favorite_count": 1349498, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FUGBmevWYAM-V_M.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1531647849599057921", + "created_at": "2022-05-31T14:44:38.000Z", + "quote_count": 21742, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1594191387519373313", + "conversation_id": "1594191387519373313", + "full_text": "Twitter is ALIVE", + "reply_count": 86483, + "retweet_count": 106216, + "favorite_count": 1377837, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1594191387519373313", + "created_at": "2022-11-20T04:50:20.000Z", + "quote_count": 21561, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1667289678612156416", + "conversation_id": "1667289678612156416", + "full_text": "https://t.co/g9gS4MUIVL", + "reply_count": 37176, + "retweet_count": 178234, + "favorite_count": 1383503, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FyNnICoaUAEE9Xv.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1667289678612156416", + "created_at": "2023-06-09T21:56:50.000Z", + "view_count": 87691832, + "quote_count": 13850, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1585341984679469056", + "conversation_id": "1585341984679469056", + "full_text": "Entering Twitter HQ – let that sink in! https://t.co/D68z4K2wq7", + "reply_count": 65658, + "retweet_count": 172649, + "favorite_count": 1331840, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/ext_tw_video_thumb/1585341912877146112/pu/img/DwJ7wlGIe9iryk6N.jpg", + "type": "video", + "video_url": "https://video.twimg.com/ext_tw_video/1585341912877146112/pu/vid/1920x1080/aeoVUvTgj4wHShhN.mp4?tag=14" + } + ], + "url": "https://twitter.com/elonmusk/status/1585341984679469056", + "created_at": "2022-10-26T18:45:58.000Z", + "view_count": 48607062, + "quote_count": 42432, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1521202951230046210", + "conversation_id": "1521202951230046210", + "full_text": "As I was saying … https://t.co/tsGz6fCWuW", + "reply_count": 52348, + "retweet_count": 97069, + "favorite_count": 1273109, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FRxmBNeXwAMVTOg.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1521202951230046210", + "created_at": "2022-05-02T19:00:20.000Z", + "quote_count": 9562, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1588750686006947840", + "conversation_id": "1588750686006947840", + "full_text": "Trash me all day, but it’ll cost $8", + "reply_count": 104121, + "retweet_count": 89130, + "favorite_count": 1300597, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1588750686006947840", + "created_at": "2022-11-05T04:30:55.000Z", + "quote_count": 28347, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1053390822991790083", + "conversation_id": "1053390822991790083", + "full_text": "Had to been done ur welcome https://t.co/7jT0f9lqIS", + "reply_count": 15864, + "retweet_count": 322101, + "favorite_count": 1102018, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Dp5lXiYUUAAngKq.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1053390822991790083", + "created_at": "2018-10-19T21:01:57.000Z", + "quote_count": 24554, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1590755506112823296", + "conversation_id": "1590755506112823296", + "full_text": "I love when people complain about Twitter … on Twitter 🤣🤣", + "reply_count": 78232, + "retweet_count": 101956, + "favorite_count": 1268496, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1590755506112823296", + "created_at": "2022-11-10T17:17:22.000Z", + "quote_count": 28192, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1601894132573605888", + "conversation_id": "1601894132573605888", + "full_text": "My pronouns are Prosecute/Fauci", + "reply_count": 110524, + "retweet_count": 180237, + "favorite_count": 1231419, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1601894132573605888", + "created_at": "2022-12-11T10:58:17.000Z", + "quote_count": 34573, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1625695877326340102", + "conversation_id": "1625695877326340102", + "full_text": "The new CEO of Twitter is amazing https://t.co/yBqWFUDIQH", + "reply_count": 42614, + "retweet_count": 87988, + "favorite_count": 1240934, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fo-hx39aIAABMKW.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1625695877326340102", + "created_at": "2023-02-15T03:17:55.000Z", + "view_count": 140213026, + "quote_count": 14042, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1601624795585486848", + "conversation_id": "1601624795585486848", + "full_text": "🇲🇦🇲🇦 Congrats Morocco!! 🇲🇦🇲🇦", + "reply_count": 32666, + "retweet_count": 132562, + "favorite_count": 1219545, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1601624795585486848", + "created_at": "2022-12-10T17:08:02.000Z", + "quote_count": 12875, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1607997591870124032", + "conversation_id": "1607997591870124032", + "full_text": "I’m not brainwashed!! https://t.co/4kx61uu4yy", + "reply_count": 71411, + "retweet_count": 151179, + "favorite_count": 1188252, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FlDBSYAXgAAlX8i.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1607997591870124032", + "created_at": "2022-12-28T07:11:15.000Z", + "view_count": 130353016, + "quote_count": 39375, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1503287788652871680", + "conversation_id": "1503287788652871680", + "full_text": "https://t.co/Gw6xaw1u0N", + "reply_count": 30439, + "retweet_count": 137446, + "favorite_count": 1141043, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FNzARriXsAMoSur.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1503287788652871680", + "created_at": "2022-03-14T08:31:53.000Z", + "quote_count": 24278, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1514720245113577473", + "conversation_id": "1514720245113577473", + "full_text": "i♥️u", + "reply_count": 84542, + "retweet_count": 79423, + "favorite_count": 1139093, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1514720245113577473", + "created_at": "2022-04-14T21:40:23.000Z", + "quote_count": 15750, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1520017094007476224", + "conversation_id": "1520017094007476224", + "full_text": "The far left hates everyone, themselves included!", + "reply_count": 59438, + "retweet_count": 114302, + "favorite_count": 1128704, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1520017094007476224", + "created_at": "2022-04-29T12:28:10.000Z", + "quote_count": 16725, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1530380264966434823", + "conversation_id": "1530380264966434823", + "full_text": "https://t.co/USLO967YsJ", + "reply_count": 35224, + "retweet_count": 92904, + "favorite_count": 1146612, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FT0AuTZWAAEgQHU.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1530380264966434823", + "created_at": "2022-05-28T02:47:42.000Z", + "quote_count": 8393, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1523658010241155073", + "conversation_id": "1523658010241155073", + "full_text": "Chocolate milk is insanely good. Just had some.", + "reply_count": 68723, + "retweet_count": 71066, + "favorite_count": 1090118, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1523658010241155073", + "created_at": "2022-05-09T13:35:52.000Z", + "quote_count": 14543, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1511982702819520512", + "conversation_id": "1511982702819520512", + "full_text": "https://t.co/TW2lLQakE5", + "reply_count": 31984, + "retweet_count": 103366, + "favorite_count": 1088637, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FPukQSkXEAAtaQb.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1511982702819520512", + "created_at": "2022-04-07T08:22:22.000Z", + "quote_count": 11547, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1688485935816581120", + "conversation_id": "1688485935816581120", + "full_text": "https://t.co/hDSTKPdQnG", + "reply_count": 29410, + "retweet_count": 67082, + "favorite_count": 1176975, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/F261AH-WUAAuyrT.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1688485935816581120", + "created_at": "2023-08-07T09:43:12.000Z", + "view_count": 66638614, + "quote_count": 4715, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1546344529460174849", + "conversation_id": "1546344529460174849", + "full_text": "https://t.co/JcLMee61wj", + "reply_count": 36837, + "retweet_count": 120770, + "favorite_count": 1088822, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FXW4J4xXgAAXFKs.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1546344529460174849", + "created_at": "2022-07-11T04:04:00.000Z", + "quote_count": 16457, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1686050455468621831", + "conversation_id": "1686050455468621831", + "full_text": "I ♥️ Canada https://t.co/95321VIi8r", + "reply_count": 73993, + "retweet_count": 102243, + "favorite_count": 1156524, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/F2YN81pXMAAjF1e.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1686050455468621831", + "created_at": "2023-07-31T16:25:28.000Z", + "view_count": 130861294, + "quote_count": 51439, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1520650036865949696", + "conversation_id": "1520650036865949696", + "full_text": "Since I’ve been asked a lot:\n\nBuy stock in several companies that make products & services that *you* believe in.\n\nOnly sell if you think their products & services are trending worse. Don’t panic when the market does.\n\nThis will serve you well in the long-term.", + "reply_count": 42044, + "retweet_count": 104025, + "favorite_count": 1056890, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1520650036865949696", + "created_at": "2022-05-01T06:23:15.000Z", + "quote_count": 9050, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1587297137099931649", + "conversation_id": "1587297137099931649", + "full_text": "Halloween with my Mom https://t.co/xOAgNeeiNN", + "reply_count": 36632, + "retweet_count": 44968, + "favorite_count": 1073096, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fgc2U1AXkAA99Ay.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1587297137099931649", + "created_at": "2022-11-01T04:15:02.000Z", + "quote_count": 6724, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1388693126206918658", + "conversation_id": "1388693126206918658", + "full_text": "I love Art Deco", + "reply_count": 25352, + "retweet_count": 11784, + "favorite_count": 758325, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1388693126206918658", + "created_at": "2021-05-02T03:13:36.000Z", + "quote_count": 3020, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1685384125836849153", + "conversation_id": "1685384125836849153", + "full_text": "https://t.co/5YdlVQifRn", + "reply_count": 38306, + "retweet_count": 56775, + "favorite_count": 1120840, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/F2Ov7dOWcAAylqk.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1685384125836849153", + "created_at": "2023-07-29T20:17:43.000Z", + "view_count": 77682952, + "quote_count": 10273, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1524883482836623373", + "conversation_id": "1524883482836623373", + "full_text": "Biden’s mistake is that he thinks he was elected to transform the country, but actually everyone just wanted less drama", + "reply_count": 58436, + "retweet_count": 88667, + "favorite_count": 1035375, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1524883482836623373", + "created_at": "2022-05-12T22:45:27.000Z", + "quote_count": 13152, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1587627120355934208", + "conversation_id": "1587627120355934208", + "full_text": "To all complainers, please continue complaining, but it will cost $8", + "reply_count": 77567, + "retweet_count": 80134, + "favorite_count": 1051207, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1587627120355934208", + "created_at": "2022-11-02T02:06:16.000Z", + "quote_count": 29667, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1594500655724609536", + "conversation_id": "1594500655724609536", + "full_text": "And lead us not into temptation … https://t.co/8qNOXzwXS9", + "reply_count": 67690, + "retweet_count": 86645, + "favorite_count": 1041472, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FiDN441XEAEq5lc.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1594500655724609536", + "created_at": "2022-11-21T01:19:15.000Z", + "quote_count": 26030, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1587911540770222081", + "conversation_id": "1587647032457449473", + "full_text": "@AOC Your feedback is appreciated, now pay $8", + "reply_count": 43326, + "retweet_count": 75097, + "favorite_count": 1028618, + "hashtags": [], + "symbols": [], + "user_mentions": [ + { + "id_str": "138203134", + "name": "Alexandria Ocasio-Cortez", + "screen_name": "AOC", + "profile": "https://twitter.com/AOC" + } + ], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1587911540770222081", + "created_at": "2022-11-02T20:56:27.000Z", + "quote_count": 17086, + "is_quote_tweet": false, + "replying_to_tweet": "https://twitter.com/AOC/status/1587647032457449473", + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1625377144137461761", + "conversation_id": "1625377144137461761", + "full_text": "There are no coincidences https://t.co/92Ny452J9B", + "reply_count": 25034, + "retweet_count": 87106, + "favorite_count": 1034478, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fo5_5eWaMAMEPaf.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1625377144137461761", + "created_at": "2023-02-14T06:11:23.000Z", + "view_count": 115414305, + "quote_count": 11381, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1608828315581976576", + "conversation_id": "1608828315581976576", + "full_text": "https://t.co/v1rrSsdwdg", + "reply_count": 56860, + "retweet_count": 137588, + "favorite_count": 984592, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FlO00p-aYAE5h8J.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1608828315581976576", + "created_at": "2022-12-30T14:12:15.000Z", + "view_count": 88845731, + "quote_count": 15482, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1587297730631696384", + "conversation_id": "1587297730631696384", + "full_text": "😉 https://t.co/eaIYaDRBnu", + "reply_count": 33970, + "retweet_count": 67582, + "favorite_count": 969459, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fgc23kFXkAEJOas.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1587297730631696384", + "created_at": "2022-11-01T04:17:24.000Z", + "quote_count": 7822, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1357236825589432322", + "conversation_id": "1357236825589432322", + "full_text": "ur welcome https://t.co/e2KF57KLxb", + "reply_count": 21387, + "retweet_count": 129294, + "favorite_count": 906408, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/EtXfpgGWYAEIa7y.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1357236825589432322", + "created_at": "2021-02-04T07:57:30.000Z", + "quote_count": 18283, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1595207476936413187", + "conversation_id": "1595207476936413187", + "full_text": "Wasn’t Twitter supposed to die by now or something … ?", + "reply_count": 65614, + "retweet_count": 64613, + "favorite_count": 932862, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1595207476936413187", + "created_at": "2022-11-23T00:07:54.000Z", + "quote_count": 12541, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1585966869122457600", + "conversation_id": "1585966869122457600", + "full_text": "🎶 let the good times roll 🎶", + "reply_count": 44899, + "retweet_count": 82648, + "favorite_count": 942793, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1585966869122457600", + "created_at": "2022-10-28T12:09:02.000Z", + "quote_count": 7638, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1604650028999405568", + "conversation_id": "1604650028999405568", + "full_text": "Those who want power are the ones who least deserve it", + "reply_count": 89824, + "retweet_count": 92573, + "favorite_count": 945701, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1604650028999405568", + "created_at": "2022-12-19T01:29:14.000Z", + "view_count": 103726233, + "quote_count": 26405, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1594131768298315777", + "conversation_id": "1594131768298315777", + "full_text": "The people have spoken. \n\nTrump will be reinstated.\n\nVox Populi, Vox Dei.", + "reply_count": 128348, + "retweet_count": 118481, + "favorite_count": 913495, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1594131768298315777", + "created_at": "2022-11-20T00:53:25.000Z", + "quote_count": 39411, + "is_quote_tweet": true, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "quoted_tweet": { + "username": "elonmusk", + "user_id": "44196397", + "id": "1593767953706921985", + "conversation_id": "1593767953706921985", + "full_text": "Reinstate former President Trump", + "reply_count": 210109, + "retweet_count": 213875, + "favorite_count": 794653, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1593767953706921985", + "created_at": "2022-11-19T00:47:45.000Z", + "#sort_index": "1694472769204387754", + "quote_count": 75130, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false + }, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1593767953706921985", + "conversation_id": "1593767953706921985", + "full_text": "Reinstate former President Trump", + "reply_count": 210109, + "retweet_count": 213875, + "favorite_count": 794653, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1593767953706921985", + "created_at": "2022-11-19T00:47:45.000Z", + "quote_count": 75130, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1587129795732770824", + "conversation_id": "1587129795732770824", + "full_text": "If I had a dollar for every time someone asked me if Trump is coming back on this platform, Twitter would be minting money!", + "reply_count": 69021, + "retweet_count": 55275, + "favorite_count": 907907, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1587129795732770824", + "created_at": "2022-10-31T17:10:05.000Z", + "quote_count": 6873, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1511011921495011328", + "conversation_id": "1511011921495011328", + "full_text": "Oh hi lol", + "reply_count": 64749, + "retweet_count": 50654, + "favorite_count": 884878, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1511011921495011328", + "created_at": "2022-04-04T16:04:49.000Z", + "quote_count": 10090, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1683378289031761920", + "conversation_id": "1683378289031761920", + "full_text": "Our headquarters tonight https://t.co/GO6yY8R7fO", + "reply_count": 48576, + "retweet_count": 74788, + "favorite_count": 943571, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/F1yPk5VXoAA3rGZ.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1683378289031761920", + "created_at": "2023-07-24T07:27:14.000Z", + "view_count": 110928423, + "quote_count": 20062, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1347978218494513152", + "conversation_id": "1347978218494513152", + "full_text": "My 14-year-old son, Saxon, said he feels like 2021 will be a good year. I agree. Let us all make it so.", + "reply_count": 26148, + "retweet_count": 57425, + "favorite_count": 841624, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1347978218494513152", + "created_at": "2021-01-09T18:47:06.000Z", + "quote_count": 10610, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1641858340752875535", + "conversation_id": "1641858340752875535", + "full_text": "https://t.co/qviPxhX7n8", + "reply_count": 49591, + "retweet_count": 41093, + "favorite_count": 918203, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FskNdX5WYAkmETe.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1641858340752875535", + "created_at": "2023-03-31T17:41:47.000Z", + "view_count": 77587609, + "quote_count": 10737, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1514564966564651008", + "conversation_id": "1514564966564651008", + "full_text": "I made an offer \nhttps://t.co/VvreuPMeLu", + "reply_count": 75744, + "retweet_count": 101232, + "favorite_count": 864685, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [ + { + "url": "https://t.co/VvreuPMeLu", + "expanded_url": "https://www.sec.gov/Archives/edgar/data/0001418091/000110465922045641/tm2212748d1_sc13da.htm", + "display_url": "sec.gov/Archives/edgar…" + } + ], + "media": [], + "url": "https://twitter.com/elonmusk/status/1514564966564651008", + "created_at": "2022-04-14T11:23:21.000Z", + "quote_count": 30137, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1597405399040217088", + "conversation_id": "1597405399040217088", + "full_text": "This is a battle for the future of civilization. If free speech is lost even in America, tyranny is all that lies ahead.", + "reply_count": 82874, + "retweet_count": 136750, + "favorite_count": 878560, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1597405399040217088", + "created_at": "2022-11-29T01:41:40.000Z", + "quote_count": 16765, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1609254628113420290", + "conversation_id": "1609254628113420290", + "full_text": "Sometimes it’s just better to make pizza at home", + "reply_count": 51068, + "retweet_count": 42308, + "favorite_count": 804635, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1609254628113420290", + "created_at": "2022-12-31T18:26:16.000Z", + "view_count": 81906590, + "quote_count": 7397, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1349286488618491904", + "conversation_id": "1349286488618491904", + "full_text": "Legalize comedy", + "reply_count": 16426, + "retweet_count": 75729, + "favorite_count": 804936, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1349286488618491904", + "created_at": "2021-01-13T09:25:42.000Z", + "quote_count": 8341, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1618371072486936578", + "conversation_id": "1618371072486936578", + "full_text": "Changed my name to Mr. Tweet, now Twitter won’t let me change it back 🤣", + "reply_count": 61260, + "retweet_count": 53130, + "favorite_count": 882792, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1618371072486936578", + "created_at": "2023-01-25T22:11:46.000Z", + "view_count": 82457457, + "quote_count": 11770, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1642962756906418176", + "conversation_id": "1642962756906418176", + "full_text": "https://t.co/wmN5WxUhfQ", + "reply_count": 31801, + "retweet_count": 80651, + "favorite_count": 887233, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fsz562paMAAB_nP.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1642962756906418176", + "created_at": "2023-04-03T18:50:20.000Z", + "view_count": 76577794, + "quote_count": 16600, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1680423042873278465", + "conversation_id": "1680423042873278465", + "full_text": "https://t.co/LCXD4QPsNW", + "reply_count": 21342, + "retweet_count": 79920, + "favorite_count": 901835, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/F1IP2Z9WYAA-AR0.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1680423042873278465", + "created_at": "2023-07-16T03:44:08.000Z", + "view_count": 95252197, + "quote_count": 8094, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1374617643446063105", + "conversation_id": "1374617643446063105", + "full_text": "You can now buy a Tesla with Bitcoin", + "reply_count": 32923, + "retweet_count": 100977, + "favorite_count": 816205, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1374617643446063105", + "created_at": "2021-03-24T07:02:40.000Z", + "quote_count": 21989, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1666964082363371520", + "conversation_id": "1666964082363371520", + "full_text": "https://t.co/kf7VYDgOra", + "reply_count": 21723, + "retweet_count": 102762, + "favorite_count": 874592, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FyI-_vraEAEfW6O.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1666964082363371520", + "created_at": "2023-06-09T00:23:02.000Z", + "view_count": 75132462, + "quote_count": 8403, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1266811094527508481", + "conversation_id": "1266811094527508481", + "full_text": "5 mins to T-0", + "reply_count": 15420, + "retweet_count": 44012, + "favorite_count": 766204, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1266811094527508481", + "created_at": "2020-05-30T19:17:55.000Z", + "quote_count": 3961, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1597165510595989504", + "conversation_id": "1597165510595989504", + "full_text": "My bedside table https://t.co/sIdRYJcLTK", + "reply_count": 85849, + "retweet_count": 53759, + "favorite_count": 851738, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FipFkIsVsAAM0O_.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1597165510595989504", + "created_at": "2022-11-28T09:48:26.000Z", + "quote_count": 28524, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1517215066550116354", + "conversation_id": "1517215066550116354", + "full_text": "If our twitter bid succeeds, we will defeat the spam bots or die trying!", + "reply_count": 32433, + "retweet_count": 69710, + "favorite_count": 833196, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1517215066550116354", + "created_at": "2022-04-21T18:53:55.000Z", + "quote_count": 12602, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1276396101872922625", + "conversation_id": "1276396101872922625", + "full_text": "https://t.co/e9dPKVSjjl", + "reply_count": 5811, + "retweet_count": 116826, + "favorite_count": 777176, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/EbarfO6U4AA-7c5.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1276396101872922625", + "created_at": "2020-06-26T06:05:19.000Z", + "quote_count": 7287, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1559691922725281800", + "conversation_id": "1559690651687608321", + "full_text": "Also, I’m buying Manchester United ur welcome", + "reply_count": 54593, + "retweet_count": 112817, + "favorite_count": 847886, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1559691922725281800", + "created_at": "2022-08-17T00:01:46.000Z", + "quote_count": 52581, + "is_quote_tweet": false, + "replying_to_tweet": "https://twitter.com/elonmusk/status/1559690651687608321", + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1519036983137509376", + "conversation_id": "1519020176884305920", + "full_text": "By “free speech”, I simply mean that which matches the law. \n\nI am against censorship that goes far beyond the law. \n\nIf people want less free speech, they will ask government to pass laws to that effect.\n\nTherefore, going beyond the law is contrary to the will of the people.", + "reply_count": 58411, + "retweet_count": 85586, + "favorite_count": 804143, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1519036983137509376", + "created_at": "2022-04-26T19:33:33.000Z", + "quote_count": 16481, + "is_quote_tweet": false, + "replying_to_tweet": "https://twitter.com/elonmusk/status/1519020176884305920", + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1526997132858822658", + "conversation_id": "1526997132858822658", + "full_text": "In the past I voted Democrat, because they were (mostly) the kindness party.\n\nBut they have become the party of division & hate, so I can no longer support them and will vote Republican.\n\nNow, watch their dirty tricks campaign against me unfold … 🍿", + "reply_count": 106371, + "retweet_count": 119882, + "favorite_count": 804876, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1526997132858822658", + "created_at": "2022-05-18T18:44:21.000Z", + "quote_count": 32796, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1688022163574439937", + "conversation_id": "1688022163574439937", + "full_text": "If you were unfairly treated by your employer due to posting or liking something on this platform, we will fund your legal bill.\n\nNo limit. \n\nPlease let us know.", + "reply_count": 46614, + "retweet_count": 142357, + "favorite_count": 867887, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1688022163574439937", + "created_at": "2023-08-06T03:00:20.000Z", + "view_count": 137457648, + "quote_count": 27757, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1432818021836357634", + "conversation_id": "1432818021836357634", + "full_text": "https://t.co/YUt6Ltz2B6", + "reply_count": 6742, + "retweet_count": 13738, + "favorite_count": 515958, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/E-JkZaKVIAcbTdW.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1432818021836357634", + "created_at": "2021-08-31T21:30:11.000Z", + "quote_count": 788, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1649052609590992901", + "conversation_id": "1649052609590992901", + "full_text": "https://t.co/vX3M7B3J1G", + "reply_count": 40115, + "retweet_count": 74183, + "favorite_count": 838276, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/ext_tw_video_thumb/1649047801446400000/pu/img/e2X_U3_Ti1mhf0fD.jpg", + "type": "video", + "video_url": "https://video.twimg.com/ext_tw_video/1649047801446400000/pu/vid/540x634/iek2j2lOnDvsuctV.mp4?tag=12" + } + ], + "url": "https://twitter.com/elonmusk/status/1649052609590992901", + "created_at": "2023-04-20T14:09:14.000Z", + "view_count": 95752230, + "quote_count": 9531, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1597336812732575744", + "conversation_id": "1597336812732575744", + "full_text": "The Twitter Files on free speech suppression soon to be published on Twitter itself. The public deserves to know what really happened …", + "reply_count": 45806, + "retweet_count": 122369, + "favorite_count": 810965, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1597336812732575744", + "created_at": "2022-11-28T21:09:07.000Z", + "quote_count": 14868, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1361252063926251521", + "conversation_id": "1361252063926251521", + "full_text": "https://t.co/w11m1IAG0z", + "reply_count": 10498, + "retweet_count": 68594, + "favorite_count": 756594, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/EuQjiWeXAAEYUts.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1361252063926251521", + "created_at": "2021-02-15T09:52:37.000Z", + "quote_count": 5088, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1672582593638957056", + "conversation_id": "1672582593638957056", + "full_text": "Don’t even trust nobody https://t.co/VHa1zVGI71", + "reply_count": 22047, + "retweet_count": 72713, + "favorite_count": 832630, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FzY0_SvaIAAb9Xr.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1672582593638957056", + "created_at": "2023-06-24T12:29:00.000Z", + "view_count": 69581275, + "quote_count": 4599, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1686058966705487875", + "conversation_id": "1686058966705487875", + "full_text": "Wow, I’m glad so many people love Canada too 🤗 https://t.co/5oOL05zawB", + "reply_count": 35449, + "retweet_count": 44669, + "favorite_count": 846460, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/F2YVsVIXwBMdxRO.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1686058966705487875", + "created_at": "2023-07-31T16:59:17.000Z", + "view_count": 65689425, + "quote_count": 8190, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1662654838398697472", + "conversation_id": "1662654838398697472", + "full_text": "Sorry this app takes up so much space https://t.co/bCCfcOhNJt", + "reply_count": 48357, + "retweet_count": 63774, + "favorite_count": 825999, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FxLvvm1XoAEkCaK.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1662654838398697472", + "created_at": "2023-05-28T02:59:38.000Z", + "view_count": 104719593, + "quote_count": 14271, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1525305145239781377", + "conversation_id": "1525305145239781377", + "full_text": "The bots are angry at being counted 🤣", + "reply_count": 33782, + "retweet_count": 52651, + "favorite_count": 778264, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1525305145239781377", + "created_at": "2022-05-14T02:41:00.000Z", + "quote_count": 5713, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1520021098934554624", + "conversation_id": "1520017094007476224", + "full_text": "But I’m no fan of the far right either. \n\nLet’s have less hate and more love.", + "reply_count": 40853, + "retweet_count": 44229, + "favorite_count": 771649, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1520021098934554624", + "created_at": "2022-04-29T12:44:05.000Z", + "quote_count": 6144, + "is_quote_tweet": false, + "replying_to_tweet": "https://twitter.com/elonmusk/status/1520017094007476224", + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1607590239874211847", + "conversation_id": "1607590239874211847", + "full_text": "Some nights … https://t.co/BLAUsJr4wb", + "reply_count": 41223, + "retweet_count": 47150, + "favorite_count": 777302, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fk9Oy_iWIAEx8Qd.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1607590239874211847", + "created_at": "2022-12-27T04:12:35.000Z", + "view_count": 74451033, + "quote_count": 10569, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1518614732839735304", + "conversation_id": "1518614732839735304", + "full_text": "And be my love in the rain", + "reply_count": 38409, + "retweet_count": 49713, + "favorite_count": 766115, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1518614732839735304", + "created_at": "2022-04-25T15:35:41.000Z", + "quote_count": 6798, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1497701484003213317", + "conversation_id": "1497543633293266944", + "full_text": "@FedorovMykhailo Starlink service is now active in Ukraine. More terminals en route.", + "reply_count": 26104, + "retweet_count": 127689, + "favorite_count": 769963, + "hashtags": [], + "symbols": [], + "user_mentions": [ + { + "id_str": "1331528215899344896", + "name": "Mykhailo Fedorov", + "screen_name": "FedorovMykhailo", + "profile": "https://twitter.com/FedorovMykhailo" + } + ], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1497701484003213317", + "created_at": "2022-02-26T22:33:54.000Z", + "quote_count": 23725, + "is_quote_tweet": false, + "replying_to_tweet": "https://twitter.com/FedorovMykhailo/status/1497543633293266944", + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1505100708256825347", + "conversation_id": "1505100708256825347", + "full_text": "https://t.co/qZSX2up9W0", + "reply_count": 25006, + "retweet_count": 63264, + "favorite_count": 752723, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FOMxHZwXEAIreox.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1505100708256825347", + "created_at": "2022-03-19T08:35:46.000Z", + "quote_count": 4722, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1658960642445910017", + "conversation_id": "1658960642445910017", + "full_text": "https://t.co/FxOptt5Rgb", + "reply_count": 30576, + "retweet_count": 54781, + "favorite_count": 792357, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/FwXP5iKWcAEecKA.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1658960642445910017", + "created_at": "2023-05-17T22:20:13.000Z", + "view_count": 66684167, + "quote_count": 5027, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1358319935978496001", + "conversation_id": "1358319935978496001", + "full_text": "So … it’s finally come to this … https://t.co/Gf0Rg2QOaF", + "reply_count": 27511, + "retweet_count": 83980, + "favorite_count": 720596, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Etm4yFZUcAAoN5u.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1358319935978496001", + "created_at": "2021-02-07T07:41:23.000Z", + "quote_count": 7616, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1129274835173908481", + "conversation_id": "1129274835173908481", + "full_text": "And I am forever grateful https://t.co/kU1pT8t0yv", + "reply_count": 2904, + "retweet_count": 117714, + "favorite_count": 667576, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/D6v9ed6UwAAoKg2.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1129274835173908481", + "created_at": "2019-05-17T06:37:56.000Z", + "quote_count": 3819, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1647629006089461761", + "conversation_id": "1647629006089461761", + "full_text": "Launch attempt tomorrow https://t.co/czFsQ53Xsa", + "reply_count": 26620, + "retweet_count": 51862, + "favorite_count": 783936, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Ft2N2IxX0AkIbLf.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1647629006089461761", + "created_at": "2023-04-16T15:52:21.000Z", + "view_count": 75845428, + "quote_count": 4885, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1375033483148451842", + "conversation_id": "1375033483148451842", + "full_text": "If there’s ever a scandal about me, *please* call it Elongate", + "reply_count": 20973, + "retweet_count": 53774, + "favorite_count": 723756, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [], + "url": "https://twitter.com/elonmusk/status/1375033483148451842", + "created_at": "2021-03-25T10:35:03.000Z", + "quote_count": 8794, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1677470862436450308", + "conversation_id": "1677470862436450308", + "full_text": "Just drove Cybertruck around Austin! https://t.co/QN19Agqa7R", + "reply_count": 49034, + "retweet_count": 48651, + "favorite_count": 792030, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/F0eS2dyXgAAIqng.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1677470862436450308", + "created_at": "2023-07-08T00:13:14.000Z", + "view_count": 75117791, + "quote_count": 7125, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}, +{ + "username": "elonmusk", + "user_id": "44196397", + "id": "1629598417159692288", + "conversation_id": "1629598417159692288", + "full_text": "https://t.co/5wIbOXFs1e", + "reply_count": 14937, + "retweet_count": 67980, + "favorite_count": 774099, + "hashtags": [], + "symbols": [], + "user_mentions": [], + "urls": [], + "media": [ + { + "media_url": "https://pbs.twimg.com/media/Fp1_H34WwAI3n1j.jpg", + "type": "photo" + } + ], + "url": "https://twitter.com/elonmusk/status/1629598417159692288", + "created_at": "2023-02-25T21:45:13.000Z", + "view_count": 96013117, + "quote_count": 6278, + "is_quote_tweet": false, + "is_retweet": false, + "is_pinned": false, + "is_truncated": false, + "startUrl": "https://twitter.com/elonmusk/with_replies" +}] \ No newline at end of file diff --git a/docs/extras/integrations/chat_loaders/facebook.ipynb b/docs/extras/integrations/chat_loaders/facebook.ipynb new file mode 100644 index 000000000..ab0a41ebe --- /dev/null +++ b/docs/extras/integrations/chat_loaders/facebook.ipynb @@ -0,0 +1,579 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e4bd269b", + "metadata": {}, + "source": [ + "# Facebook Messenger\n", + "\n", + "This notebook shows how to load data from Facebook in a format you can finetune on. The overall steps are:\n", + "\n", + "1. Download your messenger data to disk.\n", + "2. Create the Chat Loader and call `loader.load()` (or `loader.lazy_load()`) to perform the conversion.\n", + "3. Optionally use `merge_chat_runs` to combine message from the same sender in sequence, and/or `map_ai_messages` to convert messages from the specified sender to the \"AIMessage\" class. Once you've done this, call `convert_messages_for_finetuning` to prepare your data for fine-tuning.\n", + "\n", + "\n", + "Once this has been done, you can fine-tune your model. To do so you would complete the following steps:\n", + "\n", + "4. Upload your messages to OpenAI and run a fine-tuning job.\n", + "6. Use the resulting model in your LangChain app!\n", + "\n", + "\n", + "Let's begin.\n", + "\n", + "\n", + "## 1. Download Data\n", + "\n", + "To download your own messenger data, following instructions [here](https://www.zapptales.com/en/download-facebook-messenger-chat-history-how-to/). IMPORTANT - make sure to download them in JSON format (not HTML).\n", + "\n", + "We are hosting an example dump at [this google drive link](https://drive.google.com/file/d/1rh1s1o2i7B-Sk1v9o8KNgivLVGwJ-osV/view?usp=sharing) that we will use in this walkthrough." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "647f2158-a42e-4634-b283-b8492caf542a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File file.zip downloaded.\n", + "File file.zip has been unzipped.\n" + ] + } + ], + "source": [ + "# This uses some example data\n", + "import requests\n", + "import zipfile\n", + "\n", + "def download_and_unzip(url: str, output_path: str = 'file.zip') -> None:\n", + " file_id = url.split('/')[-2]\n", + " download_url = f'https://drive.google.com/uc?export=download&id={file_id}'\n", + "\n", + " response = requests.get(download_url)\n", + " if response.status_code != 200:\n", + " print('Failed to download the file.')\n", + " return\n", + "\n", + " with open(output_path, 'wb') as file:\n", + " file.write(response.content)\n", + " print(f'File {output_path} downloaded.')\n", + "\n", + " with zipfile.ZipFile(output_path, 'r') as zip_ref:\n", + " zip_ref.extractall()\n", + " print(f'File {output_path} has been unzipped.')\n", + "\n", + "# URL of the file to download\n", + "url = 'https://drive.google.com/file/d/1rh1s1o2i7B-Sk1v9o8KNgivLVGwJ-osV/view?usp=sharing'\n", + "\n", + "# Download and unzip\n", + "download_and_unzip(url)\n" + ] + }, + { + "cell_type": "markdown", + "id": "48ef8bb1-fc28-453c-835a-94a552f05a91", + "metadata": {}, + "source": [ + "## 2. Create Chat Loader\n", + "\n", + "We have 2 different `FacebookMessengerChatLoader` classes, one for an entire directory of chats, and one to load individual files. We" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a0869bc6", + "metadata": {}, + "outputs": [], + "source": [ + "directory_path = \"./hogwarts\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0460bf25", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_loaders.facebook_messenger import (\n", + " SingleFileFacebookMessengerChatLoader,\n", + " FolderFacebookMessengerChatLoader,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f61ee277", + "metadata": {}, + "outputs": [], + "source": [ + "loader = SingleFileFacebookMessengerChatLoader(\n", + " path=\"./hogwarts/inbox/HermioneGranger/messages_Hermione_Granger.json\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "ec466ad7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[HumanMessage(content=\"Hi Hermione! How's your summer going so far?\", additional_kwargs={'sender': 'Harry Potter'}, example=False),\n", + " HumanMessage(content=\"Harry! Lovely to hear from you. My summer is going well, though I do miss everyone. I'm spending most of my time going through my books and researching fascinating new topics. How about you?\", additional_kwargs={'sender': 'Hermione Granger'}, example=False),\n", + " HumanMessage(content=\"I miss you all too. The Dursleys are being their usual unpleasant selves but I'm getting by. At least I can practice some spells in my room without them knowing. Let me know if you find anything good in your researching!\", additional_kwargs={'sender': 'Harry Potter'}, example=False)]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chat_session = loader.load()[0]\n", + "chat_session[\"messages\"][:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "8a3ee473", + "metadata": {}, + "outputs": [], + "source": [ + "loader = FolderFacebookMessengerChatLoader(\n", + " path=\"./hogwarts\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "9f41e122", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chat_sessions = loader.load()\n", + "len(chat_sessions)" + ] + }, + { + "cell_type": "markdown", + "id": "d4aa3580-adc1-4b48-9bba-0e8e8d9f44ce", + "metadata": {}, + "source": [ + "## 3. Prepare for fine-tuning\n", + "\n", + "Calling `load()` returns all the chat messages we could extract as human messages. When conversing with chat bots, conversations typically follow a more strict alternating dialogue pattern relative to real conversations. \n", + "\n", + "You can choose to merge message \"runs\" (consecutive messages from the same sender) and select a sender to represent the \"AI\". The fine-tuned LLM will learn to generate these AI messages." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5a78030d-b757-4bbe-8a6c-841056f46df7", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_loaders.utils import (\n", + " merge_chat_runs,\n", + " map_ai_messages,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ff35b028-78bf-4c5b-9ec6-939fe67de7f7", + "metadata": {}, + "outputs": [], + "source": [ + "merged_sessions = merge_chat_runs(chat_sessions)\n", + "alternating_sessions = list(map_ai_messages(merged_sessions, \"Harry Potter\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "4b11906e-a496-4d01-9f0d-1938c14147bf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[AIMessage(content=\"Professor Snape, I was hoping I could speak with you for a moment about something that's been concerning me lately.\", additional_kwargs={'sender': 'Harry Potter'}, example=False),\n", + " HumanMessage(content=\"What is it, Potter? I'm quite busy at the moment.\", additional_kwargs={'sender': 'Severus Snape'}, example=False),\n", + " AIMessage(content=\"I apologize for the interruption, sir. I'll be brief. I've noticed some strange activity around the school grounds at night. I saw a cloaked figure lurking near the Forbidden Forest last night. I'm worried someone may be plotting something sinister.\", additional_kwargs={'sender': 'Harry Potter'}, example=False)]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Now all of Harry Potter's messages will take the AI message class\n", + "# which maps to the 'assistant' role in OpenAI's training format\n", + "alternating_sessions[0]['messages'][:3]" + ] + }, + { + "cell_type": "markdown", + "id": "d985478d-062e-47b9-ae9a-102f59be07c0", + "metadata": {}, + "source": [ + "#### Now we can convert to OpenAI format dictionaries" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "21372331", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.adapters.openai import convert_messages_for_finetuning" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "92c5ae7a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Prepared 9 dialogues for training\n" + ] + } + ], + "source": [ + "training_data = convert_messages_for_finetuning(alternating_sessions)\n", + "print(f\"Prepared {len(training_data)} dialogues for training\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "dfcbd181", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'role': 'assistant',\n", + " 'content': \"Professor Snape, I was hoping I could speak with you for a moment about something that's been concerning me lately.\"},\n", + " {'role': 'user',\n", + " 'content': \"What is it, Potter? I'm quite busy at the moment.\"},\n", + " {'role': 'assistant',\n", + " 'content': \"I apologize for the interruption, sir. I'll be brief. I've noticed some strange activity around the school grounds at night. I saw a cloaked figure lurking near the Forbidden Forest last night. I'm worried someone may be plotting something sinister.\"}]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "training_data[0][:3]" + ] + }, + { + "cell_type": "markdown", + "id": "f1a9fd64-4f9f-42d3-b5dc-2a340e51e9e7", + "metadata": {}, + "source": [ + "OpenAI currently requires at least 10 training examples for a fine-tuning job, though they recommend between 50-100 for most tasks. Since we only have 9 chat sessions, we can subdivide them (optionally with some overlap) so that each training example is comprised of a portion of a whole conversation.\n", + "\n", + "Facebook chat sessions (1 per person) often span multiple days and conversations,\n", + "so the long-range dependencies may not be that important to model anyhow." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "13cd290a-b1e9-4686-bb5e-d99de8b8612b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "100" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Our chat is alternating, we will make each datapoint a group of 8 messages,\n", + "# with 2 messages overlapping\n", + "chunk_size = 8\n", + "overlap = 2\n", + "\n", + "training_examples = [\n", + " conversation_messages[i: i + chunk_size] \n", + " for conversation_messages in training_data\n", + " for i in range(\n", + " 0, len(conversation_messages) - chunk_size + 1, \n", + " chunk_size - overlap)\n", + "]\n", + "\n", + "len(training_examples)" + ] + }, + { + "cell_type": "markdown", + "id": "cc8baf41-ff07-4492-96bd-b2472ee7cef9", + "metadata": {}, + "source": [ + "## 4. Fine-tune the model\n", + "\n", + "It's time to fine-tune the model. Make sure you have `openai` installed\n", + "and have set your `OPENAI_API_KEY` appropriately" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "95ce3f63-3c80-44b2-9060-534ad74e16fa", + "metadata": {}, + "outputs": [], + "source": [ + "# %pip install -U openai --quiet" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "ab9e28eb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File file-zCyNBeg4snpbBL7VkvsuhCz8 ready afer 30.55 seconds.\n" + ] + } + ], + "source": [ + "import json\n", + "from io import BytesIO\n", + "import time\n", + "\n", + "import openai\n", + "\n", + "# We will write the jsonl file in memory\n", + "my_file = BytesIO()\n", + "for m in training_examples:\n", + " my_file.write((json.dumps({\"messages\": m}) + \"\\n\").encode('utf-8'))\n", + "\n", + "my_file.seek(0)\n", + "training_file = openai.File.create(\n", + " file=my_file,\n", + " purpose='fine-tune'\n", + ")\n", + "\n", + "# OpenAI audits each training file for compliance reasons.\n", + "# This make take a few minutes\n", + "status = openai.File.retrieve(training_file.id).status\n", + "start_time = time.time()\n", + "while status != \"processed\":\n", + " print(f\"Status=[{status}]... {time.time() - start_time:.2f}s\", end=\"\\r\", flush=True)\n", + " time.sleep(5)\n", + " status = openai.File.retrieve(training_file.id).status\n", + "print(f\"File {training_file.id} ready after {time.time() - start_time:.2f} seconds.\")" + ] + }, + { + "cell_type": "markdown", + "id": "759a7f51-fde9-4b75-aaa9-e600e6537bd1", + "metadata": {}, + "source": [ + "With the file ready, it's time to kick off a training job." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "3f451425", + "metadata": {}, + "outputs": [], + "source": [ + "job = openai.FineTuningJob.create(\n", + " training_file=training_file.id,\n", + " model=\"gpt-3.5-turbo\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "489b23ef-5e14-42a9-bafb-44220ec6960b", + "metadata": {}, + "source": [ + "Grab a cup of tea while your model is being prepared. This may take some time!" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "bac1637a-c087-4523-ade1-c47f9bf4c6f4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Status=[running]... 908.87s\r" + ] + } + ], + "source": [ + "status = openai.FineTuningJob.retrieve(job.id).status\n", + "start_time = time.time()\n", + "while status != \"succeeded\":\n", + " print(f\"Status=[{status}]... {time.time() - start_time:.2f}s\", end=\"\\r\", flush=True)\n", + " time.sleep(5)\n", + " job = openai.FineTuningJob.retrieve(job.id)\n", + " status = job.status" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "535895e1-bc69-40e5-82ed-e24ed2baeeee", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ft:gpt-3.5-turbo-0613:personal::7rDwkaOq\n" + ] + } + ], + "source": [ + "print(job.fine_tuned_model)" + ] + }, + { + "cell_type": "markdown", + "id": "502ff73b-f9e9-49ce-ba45-401811e57946", + "metadata": {}, + "source": [ + "## 5. Use in LangChain\n", + "\n", + "You can use the resulting model ID directly the `ChatOpenAI` model class." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "3925d60d", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "model = ChatOpenAI(\n", + " model=job.fine_tuned_model,\n", + " temperature=1,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "7190cf2e-ab34-4ceb-bdad-45f24f069c29", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.prompts import ChatPromptTemplate\n", + "from langchain.schema.output_parser import StrOutputParser\n", + "\n", + "prompt = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\"human\", \"{input}\"),\n", + " ]\n", + ")\n", + "\n", + "chain = prompt | model | StrOutputParser()" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "f02057e9-f914-40b1-9c9d-9432ff594b98", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The usual - Potions, Transfiguration, Defense Against the Dark Arts. What about you?" + ] + } + ], + "source": [ + "for tok in chain.stream({\"input\": \"What classes are you taking?\"}):\n", + " print(tok, end=\"\", flush=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "35331503-3cc6-4d64-955e-64afe6b5fef3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/chat_loaders/gmail.ipynb b/docs/extras/integrations/chat_loaders/gmail.ipynb new file mode 100644 index 000000000..30e86d67b --- /dev/null +++ b/docs/extras/integrations/chat_loaders/gmail.ipynb @@ -0,0 +1,179 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b3d1705d", + "metadata": {}, + "source": [ + "# GMail\n", + "\n", + "This loader goes over how to load data from GMail. There are many ways you could want to load data from GMail. This loader is currently fairly opionated in how to do so. The way it does it is it first looks for all messages that you have sent. It then looks for messages where you are responding to a previous email. It then fetches that previous email, and creates a training example of that email, followed by your email.\n", + "\n", + "Note that there are clear limitations here. For example, all examples created are only looking at the previous email for context.\n", + "\n", + "To use:\n", + "\n", + "- Set up a Google Developer Account: Go to the Google Developer Console, create a project, and enable the Gmail API for that project. This will give you a credentials.json file that you'll need later.\n", + "\n", + "- Install the Google Client Library: Run the following command to install the Google Client Library:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "84578039", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "be18f796", + "metadata": {}, + "outputs": [], + "source": [ + "import os.path\n", + "import base64\n", + "import json\n", + "import re\n", + "import time\n", + "from google.auth.transport.requests import Request\n", + "from google.oauth2.credentials import Credentials\n", + "from google_auth_oauthlib.flow import InstalledAppFlow\n", + "from googleapiclient.discovery import build\n", + "import logging\n", + "import requests\n", + "\n", + "SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']\n", + "\n", + "\n", + "creds = None\n", + "# The file token.json stores the user's access and refresh tokens, and is\n", + "# created automatically when the authorization flow completes for the first\n", + "# time.\n", + "if os.path.exists('email_token.json'):\n", + " creds = Credentials.from_authorized_user_file('email_token.json', SCOPES)\n", + "# If there are no (valid) credentials available, let the user log in.\n", + "if not creds or not creds.valid:\n", + " if creds and creds.expired and creds.refresh_token:\n", + " creds.refresh(Request())\n", + " else:\n", + " flow = InstalledAppFlow.from_client_secrets_file( \n", + " # your creds file here. Please create json file as here https://cloud.google.com/docs/authentication/getting-started\n", + " 'creds.json', SCOPES)\n", + " creds = flow.run_local_server(port=0)\n", + " # Save the credentials for the next run\n", + " with open('email_token.json', 'w') as token:\n", + " token.write(creds.to_json())" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a2793ba0", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_loaders.gmail import GMailLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "2154597f", + "metadata": {}, + "outputs": [], + "source": [ + "loader = GMailLoader(creds=creds, n=3)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "0b7d11bd", + "metadata": {}, + "outputs": [], + "source": [ + "data = loader.load()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "74764bc7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Sometimes there can be errors which we silently ignore\n", + "len(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "d9360a85", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_loaders.utils import (\n", + " map_ai_messages,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "a9646f7a", + "metadata": {}, + "outputs": [], + "source": [ + "# This makes messages sent by hchase@langchain.com the AI Messages\n", + "# This means you will train an LLM to predict as if it's responding as hchase\n", + "training_data = list(map_ai_messages(data, sender=\"Harrison Chase \"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d1a182f0", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/chat_loaders/index.mdx b/docs/extras/integrations/chat_loaders/index.mdx new file mode 100644 index 000000000..be3f38ff5 --- /dev/null +++ b/docs/extras/integrations/chat_loaders/index.mdx @@ -0,0 +1,188 @@ +--- +sidebar_position: 0 +--- + +# Chat loaders + +Like document loaders, chat loaders are utilities designed to help load conversations from popular communication platforms such as Facebook, Slack, Discord, etc. These are loaded into memory as LangChain chat message objects. Such utilities facilitate tasks such as fine-tuning a language model to match your personal style or voice. + +This brief guide will illustrate the process using [OpenAI's fine-tuning API](https://platform.openai.com/docs/guides/fine-tuning) comprised of six steps: + +1. Export your Facebook Messenger chat data in a compatible format for your intended chat loader. +2. Load the chat data into memory as LangChain chat message objects. (_this is what is covered in each integration notebook in this section of the documentation_). + - Assign a person to the "AI" role and optionally filter, group, and merge messages. +3. Export these acquired messages in a format expected by the fine-tuning API. +4. Upload this data to OpenAI. +5. Fine-tune your model. +6. Implement the fine-tuned model in LangChain. + +This guide is not wholly comprehensive but is designed to take you through the fundamentals of going from raw data to fine-tuned model. + +We will demonstrate the procedure through an example of fine-tuning a `gpt-3.5-turbo` model on Facebook Messenger data. + +### 1. Export your chat data + +To export your Facebook messenger data, you can follow the [instructions here](https://www.zapptales.com/en/download-facebook-messenger-chat-history-how-to/). + +:::important JSON format +You must select "JSON format" (instead of HTML) when exporting your data to be compatible with the current loader. +::: + +OpenAI requires at least 10 examples to fine-tune your model, but they recommend between 50-100 for more optimal results. +You can use the example data stored at [this google drive link](https://drive.google.com/file/d/1rh1s1o2i7B-Sk1v9o8KNgivLVGwJ-osV/view?usp=sharing) to test the process. + +### 2. Load the chat + +Once you've obtained your chat data, you can load it into memory as LangChain chat message objects. Here’s an example of loading data using the Python code: + +```python +from langchain.chat_loaders.facebook_messenger import FolderFacebookMessengerChatLoader + +loader = FolderFacebookMessengerChatLoader( + path="./facebook_messenger_chats", +) + +chat_sessions = loader.load() +``` + +In this snippet, we point the loader to a directory of Facebook chat dumps which are then loaded as multiple "sessions" of messages, one session per conversation file. + +Once you've loaded the messages, you should decide which person you want to fine-tune the model to (usually yourself). You can also decide to merge consecutive messages from the same sender into a single chat message. +For both of these tasks, you can use the chat_loaders utilities to do so: + +``` +from langchain.chat_loaders.utils import ( + merge_chat_runs, + map_ai_messages, +) + +merged_sessions = merge_chat_runs(chat_sessions) +alternating_sessions = list(map_ai_messages(merged_sessions, "My Name")) +``` + +### 3. Export messages to OpenAI format + +Convert the chat messages to dictionaries using the `convert_messages_for_finetuning` function. Then, group the data into chunks for better context modeling and overlap management. + +```python +from langchain.adapters.openai import convert_messages_for_finetuning + +openai_messages = convert_messages_for_finetuning(chat_sessions) +``` + +At this point, the data is ready for upload to OpenAI. You can choose to split up conversations into smaller chunks for training if you +do not have enough conversations to train on. Feel free to play around with different chunk sizes or with adding system messages to the fine-tuning data. + +```python +chunk_size = 8 +overlap = 2 + +message_groups = [ + conversation_messages[i: i + chunk_size] + for conversation_messages in openai_messages + for i in range( + 0, len(conversation_messages) - chunk_size + 1, + chunk_size - overlap) +] + +len(message_groups) +# 9 +``` + +### 4. Upload the data to OpenAI + +Ensure you have set your OpenAI API key by following these [instructions](https://platform.openai.com/account/api-keys), then upload the training file. +An audit is performed to ensure data compliance, so you may have to wait a few minutes for the dataset to become ready for use. + +```python +import time +import json +import io + +import openai + +my_file = io.BytesIO() +for group in message_groups: + my_file.write((json.dumps({"messages": group}) + "\n").encode('utf-8')) + +my_file.seek(0) +training_file = openai.File.create( + file=my_file, + purpose='fine-tune' +) + +# Wait while the file is processed +status = openai.File.retrieve(training_file.id).status +start_time = time.time() +while status != "processed": + print(f"Status=[{status}]... {time.time() - start_time:.2f}s", end="\r", flush=True) + time.sleep(5) + status = openai.File.retrieve(training_file.id).status +print(f"File {training_file.id} ready after {time.time() - start_time:.2f} seconds.") +``` + +Once this is done, you can proceed to the model training! + +### 5. Fine-tune the model + +Start the fine-tuning job with your chosen base model. + +```python +job = openai.FineTuningJob.create( + training_file=training_file.id, + model="gpt-3.5-turbo", +) +``` + +This might take a while. Check the status with `openai.FineTuningJob.retrieve(job.id).status` and wait for it to report `succeeded`. + +```python +# It may take 10-20+ minutes to complete training. +status = openai.FineTuningJob.retrieve(job.id).status +start_time = time.time() +while status != "succeeded": + print(f"Status=[{status}]... {time.time() - start_time:.2f}s", end="\r", flush=True) + time.sleep(5) + job = openai.FineTuningJob.retrieve(job.id) + status = job.status +``` + +### 6. Use the model in LangChain + +You're almost there! Use the fine-tuned model in LangChain. + +```python +from langchain import chat_models + +model_name = job.fine_tuned_model +# Example: ft:gpt-3.5-turbo-0613:personal::5mty86jblapsed +model = chat_models.ChatOpenAI(model=model_name) +``` + +```python +from langchain.prompts import ChatPromptTemplate +from langchain.schema.output_parser import StrOutputParser + +prompt = ChatPromptTemplate.from_messages( + [ + ("human", "{input}"), + ] +) + +chain = prompt | model | StrOutputParser() + +for tok in chain.stream({"input": "What classes are you taking?"}): + print(tok, end="", flush=True) + +# The usual - Potions, Transfiguration, Defense Against the Dark Arts. What about you? +``` + +And that's it! You've successfully fine-tuned a model and used it in LangChain. + +## Supported Chat Loaders + +LangChain currently supports the following chat loaders. Feel free to contribute more! + +import DocCardList from "@theme/DocCardList"; + + \ No newline at end of file diff --git a/docs/extras/integrations/chat_loaders/slack.ipynb b/docs/extras/integrations/chat_loaders/slack.ipynb new file mode 100644 index 000000000..f63cd7cdf --- /dev/null +++ b/docs/extras/integrations/chat_loaders/slack.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "01fcfa2f-33a9-48f3-835a-b1956c394d6b", + "metadata": {}, + "source": [ + "# Slack\n", + "\n", + "This notebook shows how to use the Slack chat loader. This class helps map exported slack conversations to LangChain chat messages.\n", + "\n", + "The process has three steps:\n", + "1. Export the desired conversation thread by following the [instructions here](https://slack.com/help/articles/1500001548241-Request-to-export-all-conversations).\n", + "2. Create the `SlackChatLoader` with the file path pointed to the json file or directory of JSON files\n", + "3. Call `loader.load()` (or `loader.lazy_load()`) to perform the conversion. Optionally use `merge_chat_runs` to combine message from the same sender in sequence, and/or `map_ai_messages` to convert messages from the specified sender to the \"AIMessage\" class.\n", + "\n", + "## 1. Creat message dump\n", + "\n", + "Currently (2023/08/23) this loader best supports a zip directory of files in the format generated by exporting your a direct message converstion from Slack. Follow up-to-date instructions from slack on how to do so.\n", + "\n", + "We have an example in the LangChain repo." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a79d35bf-5f21-4063-84bf-a60845c1c51f", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "\n", + "permalink = \"https://raw.githubusercontent.com/langchain-ai/langchain/342087bdfa3ac31d622385d0f2d09cf5e06c8db3/libs/langchain/tests/integration_tests/examples/slack_export.zip\"\n", + "response = requests.get(permalink)\n", + "with open(\"slack_dump.zip\", \"wb\") as f:\n", + " f.write(response.content)" + ] + }, + { + "cell_type": "markdown", + "id": "cf60f703-76f1-4602-a723-02c59535c1af", + "metadata": {}, + "source": [ + "## 2. Create the Chat Loader\n", + "\n", + "Provide the loader with the file path to the zip directory. You can optionally specify the user id that maps to an ai message as well an configure whether to merge message runs." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "4b8b432a-d2bc-49e1-b35f-761730a8fd6d", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_loaders.slack import SlackChatLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8ec6661b-0aca-48ae-9e2b-6412856c287b", + "metadata": {}, + "outputs": [], + "source": [ + "loader = SlackChatLoader(\n", + " path=\"slack_dump.zip\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "8805a7c5-84b4-49f5-8989-0022f2054ace", + "metadata": {}, + "source": [ + "## 3. Load messages\n", + "\n", + "The `load()` (or `lazy_load`) methods return a list of \"ChatSessions\" that currently just contain a list of messages per loaded conversation." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fcd69b3e-020d-4a15-8a0d-61c2d34e1ee1", + "metadata": {}, + "outputs": [], + "source": [ + "from typing import List\n", + "from langchain.chat_loaders.base import ChatSession\n", + "from langchain.chat_loaders.utils import (\n", + " map_ai_messages,\n", + " merge_chat_runs,\n", + ")\n", + "\n", + "raw_messages = loader.lazy_load()\n", + "# Merge consecutive messages from the same sender into a single message\n", + "merged_messages = merge_chat_runs(raw_messages)\n", + "# Convert messages from \"U0500003428\" to AI messages\n", + "messages: List[ChatSession] = list(map_ai_messages(merged_messages, sender=\"U0500003428\"))" + ] + }, + { + "cell_type": "markdown", + "id": "7d033f87-cd0c-4f44-a753-41b871c1e919", + "metadata": {}, + "source": [ + "### Next Steps\n", + "\n", + "You can then use these messages how you see fit, such as finetuning a model, few-shot example selection, or directly make predictions for the next message. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "7d8a1629-5d9e-49b3-b978-3add57027d59", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi, \n", + "\n", + "I hope you're doing well. I wanted to reach out and ask if you'd be available to meet up for coffee sometime next week. I'd love to catch up and hear about what's been going on in your life. Let me know if you're interested and we can find a time that works for both of us. \n", + "\n", + "Looking forward to hearing from you!\n", + "\n", + "Best, [Your Name]" + ] + } + ], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI()\n", + "\n", + "for chunk in llm.stream(messages[1]['messages']):\n", + " print(chunk.content, end=\"\", flush=True)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/chat_loaders/telegram.ipynb b/docs/extras/integrations/chat_loaders/telegram.ipynb new file mode 100644 index 000000000..156472691 --- /dev/null +++ b/docs/extras/integrations/chat_loaders/telegram.ipynb @@ -0,0 +1,206 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "735455a6-f82e-4252-b545-27385ef883f4", + "metadata": {}, + "source": [ + "# Telegram\n", + "\n", + "This notebook shows how to use the Telegram chat loader. This class helps map exported Telegram conversations to LangChain chat messages.\n", + "\n", + "The process has three steps:\n", + "1. Export the chat .txt file by copying chats from the Discord app and pasting them in a file on your local computer\n", + "2. Create the `TelegramChatLoader` with the file path pointed to the json file or directory of JSON files\n", + "3. Call `loader.load()` (or `loader.lazy_load()`) to perform the conversion. Optionally use `merge_chat_runs` to combine message from the same sender in sequence, and/or `map_ai_messages` to convert messages from the specified sender to the \"AIMessage\" class.\n", + "\n", + "## 1. Creat message dump\n", + "\n", + "Currently (2023/08/23) this loader best supports json files in the format generated by exporting your chat history from the [Telegram Desktop App](https://desktop.telegram.org/).\n", + "\n", + "**Important:** There are 'lite' versions of telegram such as \"Telegram for MacOS\" that lack the export functionality. Please make sure you use the correct app to export the file.\n", + "\n", + "To make the export:\n", + "1. Download and open telegram desktop\n", + "2. Select a conversation\n", + "3. Navigate to the conversation settings (currently the three dots in the top right corner)\n", + "4. Click \"Export Chat History\"\n", + "5. Unselect photos and other media. Select \"Machine-readable JSON\" format to export.\n", + "\n", + "An example is below: " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "285f2044-0f58-4b92-addb-9f8569076734", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overwriting telegram_conversation.json\n" + ] + } + ], + "source": [ + "%%writefile telegram_conversation.json\n", + "{\n", + " \"name\": \"Jiminy\",\n", + " \"type\": \"personal_chat\",\n", + " \"id\": 5965280513,\n", + " \"messages\": [\n", + " {\n", + " \"id\": 1,\n", + " \"type\": \"message\",\n", + " \"date\": \"2023-08-23T13:11:23\",\n", + " \"date_unixtime\": \"1692821483\",\n", + " \"from\": \"Jiminy Cricket\",\n", + " \"from_id\": \"user123450513\",\n", + " \"text\": \"You better trust your conscience\",\n", + " \"text_entities\": [\n", + " {\n", + " \"type\": \"plain\",\n", + " \"text\": \"You better trust your conscience\"\n", + " }\n", + " ]\n", + " },\n", + " {\n", + " \"id\": 2,\n", + " \"type\": \"message\",\n", + " \"date\": \"2023-08-23T13:13:20\",\n", + " \"date_unixtime\": \"1692821600\",\n", + " \"from\": \"Batman & Robin\",\n", + " \"from_id\": \"user6565661032\",\n", + " \"text\": \"What did you just say?\",\n", + " \"text_entities\": [\n", + " {\n", + " \"type\": \"plain\",\n", + " \"text\": \"What did you just say?\"\n", + " }\n", + " ]\n", + " }\n", + " ]\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "7cc109f4-4c92-4cd3-8143-c322776c3f03", + "metadata": {}, + "source": [ + "## 2. Create the Chat Loader\n", + "\n", + "All that's required is the file path. You can optionally specify the user name that maps to an ai message as well an configure whether to merge message runs." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "111f7767-573c-42d4-86f0-bd766bbaa071", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_loaders.telegram import TelegramChatLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a4226efa-2640-4990-a20c-6861d1887329", + "metadata": {}, + "outputs": [], + "source": [ + "loader = TelegramChatLoader(\n", + " path=\"./telegram_conversation.json\", \n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "71699fb7-7815-4c89-8d96-30e8fada6923", + "metadata": {}, + "source": [ + "## 3. Load messages\n", + "\n", + "The `load()` (or `lazy_load`) methods return a list of \"ChatSessions\" that currently just contain a list of messages per loaded conversation." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "81121efb-c875-4a77-ad1e-fe26b3d7e812", + "metadata": {}, + "outputs": [], + "source": [ + "from typing import List\n", + "from langchain.chat_loaders.base import ChatSession\n", + "from langchain.chat_loaders.utils import (\n", + " map_ai_messages,\n", + " merge_chat_runs,\n", + ")\n", + "\n", + "raw_messages = loader.lazy_load()\n", + "# Merge consecutive messages from the same sender into a single message\n", + "merged_messages = merge_chat_runs(raw_messages)\n", + "# Convert messages from \"Jiminy Cricket\" to AI messages\n", + "messages: List[ChatSession] = list(map_ai_messages(merged_messages, sender=\"Jiminy Cricket\"))" + ] + }, + { + "cell_type": "markdown", + "id": "b9089c05-7375-41ca-a2f9-672a845314e4", + "metadata": {}, + "source": [ + "### Next Steps\n", + "\n", + "You can then use these messages how you see fit, such as finetuning a model, few-shot example selection, or directly make predictions for the next message " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "637a6f5d-6944-4722-9361-a76ef5e9dd2a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I said, \"You better trust your conscience.\"" + ] + } + ], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI()\n", + "\n", + "for chunk in llm.stream(messages[0]['messages']):\n", + " print(chunk.content, end=\"\", flush=True)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/chat_loaders/twitter.ipynb b/docs/extras/integrations/chat_loaders/twitter.ipynb new file mode 100644 index 000000000..61dc650b8 --- /dev/null +++ b/docs/extras/integrations/chat_loaders/twitter.ipynb @@ -0,0 +1,77 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d86853d2", + "metadata": {}, + "source": [ + "# Twitter (via Apify)\n", + "\n", + "This notebook shows how to load chat messages from Twitter to finetune on. We do this by utilizing Apify. \n", + "\n", + "First, use Apify to export tweets. An example" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e5034b4e", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "from langchain.schema import AIMessage\n", + "from langchain.adapters.openai import convert_message_to_dict" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8bf0fb93", + "metadata": {}, + "outputs": [], + "source": [ + "with open('example_data/dataset_twitter-scraper_2023-08-23_22-13-19-740.json') as f:\n", + " data = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "468124fa", + "metadata": {}, + "outputs": [], + "source": [ + "# Filter out tweets that reference other tweets, because it's a bit weird\n", + "tweets = [d[\"full_text\"] for d in data if \"t.co\" not in d['full_text']]\n", + "# Create them as AI messages\n", + "messages = [AIMessage(content=t) for t in tweets]\n", + "# Add in a system message at the start\n", + "# TODO: we could try to extract the subject from the tweets, and put that in the system message.\n", + "system_message = {\"role\": \"system\", \"content\": \"write a tweet\"}\n", + "data = [[system_message, convert_message_to_dict(m)] for m in messages]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/chat_loaders/whatsapp.ipynb b/docs/extras/integrations/chat_loaders/whatsapp.ipynb new file mode 100644 index 000000000..a08155843 --- /dev/null +++ b/docs/extras/integrations/chat_loaders/whatsapp.ipynb @@ -0,0 +1,204 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "735455a6-f82e-4252-b545-27385ef883f4", + "metadata": {}, + "source": [ + "# WhatsApp\n", + "\n", + "This notebook shows how to use the WhatsApp chat loader. This class helps map exported Telegram conversations to LangChain chat messages.\n", + "\n", + "The process has three steps:\n", + "1. Export the chat conversations to computer\n", + "2. Create the `WhatsAppChatLoader` with the file path pointed to the json file or directory of JSON files\n", + "3. Call `loader.load()` (or `loader.lazy_load()`) to perform the conversion.\n", + "\n", + "## 1. Creat message dump\n", + "\n", + "To make the export of your WhatsApp conversation(s), complete the following steps:\n", + "\n", + "1. Open the target conversation\n", + "2. Click the three dots in the top right corner and select \"More\".\n", + "3. Then select \"Export chat\" and choose \"Without media\".\n", + "\n", + "An example of the data format for each converation is below: " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "285f2044-0f58-4b92-addb-9f8569076734", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing whatsapp_chat.txt\n" + ] + } + ], + "source": [ + "%%writefile whatsapp_chat.txt\n", + "[8/15/23, 9:12:33 AM] Dr. Feather: ‎Messages and calls are end-to-end encrypted. No one outside of this chat, not even WhatsApp, can read or listen to them.\n", + "[8/15/23, 9:12:43 AM] Dr. Feather: I spotted a rare Hyacinth Macaw yesterday in the Amazon Rainforest. Such a magnificent creature!\n", + "‎[8/15/23, 9:12:48 AM] Dr. Feather: ‎image omitted\n", + "[8/15/23, 9:13:15 AM] Jungle Jane: That's stunning! Were you able to observe its behavior?\n", + "‎[8/15/23, 9:13:23 AM] Dr. Feather: ‎image omitted\n", + "[8/15/23, 9:14:02 AM] Dr. Feather: Yes, it seemed quite social with other macaws. They're known for their playful nature.\n", + "[8/15/23, 9:14:15 AM] Jungle Jane: How's the research going on parrot communication?\n", + "‎[8/15/23, 9:14:30 AM] Dr. Feather: ‎image omitted\n", + "[8/15/23, 9:14:50 AM] Dr. Feather: It's progressing well. We're learning so much about how they use sound and color to communicate.\n", + "[8/15/23, 9:15:10 AM] Jungle Jane: That's fascinating! Can't wait to read your paper on it.\n", + "[8/15/23, 9:15:20 AM] Dr. Feather: Thank you! I'll send you a draft soon.\n", + "[8/15/23, 9:25:16 PM] Jungle Jane: Looking forward to it! Keep up the great work." + ] + }, + { + "cell_type": "markdown", + "id": "7cc109f4-4c92-4cd3-8143-c322776c3f03", + "metadata": {}, + "source": [ + "## 2. Create the Chat Loader\n", + "\n", + "The WhatsAppChatLoader accepts the resulting zip file, unzipped directory, or the path to any of the chat `.txt` files therein.\n", + "\n", + "Provide that as well as the user name you want to take on the role of \"AI\" when finetuning." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "111f7767-573c-42d4-86f0-bd766bbaa071", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_loaders.whatsapp import WhatsAppChatLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "a4226efa-2640-4990-a20c-6861d1887329", + "metadata": {}, + "outputs": [], + "source": [ + "loader = WhatsAppChatLoader(\n", + " path=\"./whatsapp_chat.txt\", \n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "71699fb7-7815-4c89-8d96-30e8fada6923", + "metadata": {}, + "source": [ + "## 3. Load messages\n", + "\n", + "The `load()` (or `lazy_load`) methods return a list of \"ChatSessions\" that currently store the list of messages per loaded conversation." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "81121efb-c875-4a77-ad1e-fe26b3d7e812", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'messages': [AIMessage(content='I spotted a rare Hyacinth Macaw yesterday in the Amazon Rainforest. Such a magnificent creature!', additional_kwargs={'sender': 'Dr. Feather', 'events': [{'message_time': '8/15/23, 9:12:43 AM'}]}, example=False),\n", + " HumanMessage(content=\"That's stunning! Were you able to observe its behavior?\", additional_kwargs={'sender': 'Jungle Jane', 'events': [{'message_time': '8/15/23, 9:13:15 AM'}]}, example=False),\n", + " AIMessage(content=\"Yes, it seemed quite social with other macaws. They're known for their playful nature.\", additional_kwargs={'sender': 'Dr. Feather', 'events': [{'message_time': '8/15/23, 9:14:02 AM'}]}, example=False),\n", + " HumanMessage(content=\"How's the research going on parrot communication?\", additional_kwargs={'sender': 'Jungle Jane', 'events': [{'message_time': '8/15/23, 9:14:15 AM'}]}, example=False),\n", + " AIMessage(content=\"It's progressing well. We're learning so much about how they use sound and color to communicate.\", additional_kwargs={'sender': 'Dr. Feather', 'events': [{'message_time': '8/15/23, 9:14:50 AM'}]}, example=False),\n", + " HumanMessage(content=\"That's fascinating! Can't wait to read your paper on it.\", additional_kwargs={'sender': 'Jungle Jane', 'events': [{'message_time': '8/15/23, 9:15:10 AM'}]}, example=False),\n", + " AIMessage(content=\"Thank you! I'll send you a draft soon.\", additional_kwargs={'sender': 'Dr. Feather', 'events': [{'message_time': '8/15/23, 9:15:20 AM'}]}, example=False),\n", + " HumanMessage(content='Looking forward to it! Keep up the great work.', additional_kwargs={'sender': 'Jungle Jane', 'events': [{'message_time': '8/15/23, 9:25:16 PM'}]}, example=False)]}]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from typing import List\n", + "from langchain.chat_loaders.base import ChatSession\n", + "from langchain.chat_loaders.utils import (\n", + " map_ai_messages,\n", + " merge_chat_runs,\n", + ")\n", + "\n", + "raw_messages = loader.lazy_load()\n", + "# Merge consecutive messages from the same sender into a single message\n", + "merged_messages = merge_chat_runs(raw_messages)\n", + "# Convert messages from \"Dr. Feather\" to AI messages\n", + "messages: List[ChatSession] = list(map_ai_messages(merged_messages, sender=\"Dr. Feather\"))" + ] + }, + { + "cell_type": "markdown", + "id": "b9089c05-7375-41ca-a2f9-672a845314e4", + "metadata": {}, + "source": [ + "### Next Steps\n", + "\n", + "You can then use these messages how you see fit, such as finetuning a model, few-shot example selection, or directly make predictions for the next message." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "637a6f5d-6944-4722-9361-a76ef5e9dd2a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thank you for the encouragement! I'll do my best to continue studying and sharing fascinating insights about parrot communication." + ] + } + ], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI()\n", + "\n", + "for chunk in llm.stream(messages[0]['messages']):\n", + " print(chunk.content, end=\"\", flush=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16156643-cfbd-444f-b4ae-198eb44f0267", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/document_loaders/assemblyai.ipynb b/docs/extras/integrations/document_loaders/assemblyai.ipynb new file mode 100644 index 000000000..80d60df48 --- /dev/null +++ b/docs/extras/integrations/document_loaders/assemblyai.ipynb @@ -0,0 +1,221 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# AssemblyAI Audio Transcripts\n", + "\n", + "The `AssemblyAIAudioTranscriptLoader` allows to transcribe audio files with the [AssemblyAI API](https://www.assemblyai.com) and loads the transcribed text into documents.\n", + "\n", + "To use it, you should have the `assemblyai` python package installed, and the\n", + "environment variable `ASSEMBLYAI_API_KEY` set with your API key. Alternatively, the API key can also be passed as an argument.\n", + "\n", + "More info about AssemblyAI:\n", + "\n", + "- [Website](https://www.assemblyai.com/)\n", + "- [Get a Free API key](https://www.assemblyai.com/dashboard/signup)\n", + "- [AssemblyAI API Docs](https://www.assemblyai.com/docs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installation\n", + "\n", + "First, you need to install the `assemblyai` python package.\n", + "\n", + "You can find more info about it inside the [assemblyai-python-sdk GitHub repo](https://github.com/AssemblyAI/assemblyai-python-sdk)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#!pip install assemblyai" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example\n", + "\n", + "The `AssemblyAIAudioTranscriptLoader` needs at least the `file_path` argument. Audio files can be specified as an URL or a local file path." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import AssemblyAIAudioTranscriptLoader\n", + "\n", + "audio_file = \"https://storage.googleapis.com/aai-docs-samples/nbc.mp3\"\n", + "# or a local file path: audio_file = \"./nbc.mp3\"\n", + "\n", + "loader = AssemblyAIAudioTranscriptLoader(file_path=audio_file)\n", + "\n", + "docs = loader.load()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: Calling `loader.load()` blocks until the transcription is finished." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The transcribed text is available in the `page_content`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "docs[0].page_content" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "\"Load time, a new president and new congressional makeup. Same old ...\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `metadata` contains the full JSON response with more meta information:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "docs[0].metadata" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "{'language_code': ,\n", + " 'audio_url': 'https://storage.googleapis.com/aai-docs-samples/nbc.mp3',\n", + " 'punctuate': True,\n", + " 'format_text': True,\n", + " ...\n", + "}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Transcript Formats\n", + "\n", + "You can specify the `transcript_format` argument for different formats.\n", + "\n", + "Depending on the format, one or more documents are returned. These are the different `TranscriptFormat` options:\n", + "\n", + "- `TEXT`: One document with the transcription text\n", + "- `SENTENCES`: Multiple documents, splits the transcription by each sentence\n", + "- `PARAGRAPHS`: Multiple documents, splits the transcription by each paragraph\n", + "- `SUBTITLES_SRT`: One document with the transcript exported in SRT subtitles format\n", + "- `SUBTITLES_VTT`: One document with the transcript exported in VTT subtitles format" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders.assemblyai import TranscriptFormat\n", + "\n", + "loader = AssemblyAIAudioTranscriptLoader(\n", + " file_path=\"./your_file.mp3\",\n", + " transcript_format=TranscriptFormat.SENTENCES,\n", + ")\n", + "\n", + "docs = loader.load()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Transcription Config\n", + "\n", + "You can also specify the `config` argument to use different audio intelligence models.\n", + "\n", + "Visit the [AssemblyAI API Documentation](https://www.assemblyai.com/docs) to get an overview of all available models!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import assemblyai as aai\n", + "\n", + "config = aai.TranscriptionConfig(speaker_labels=True,\n", + " auto_chapters=True,\n", + " entity_detection=True\n", + ")\n", + "\n", + "loader = AssemblyAIAudioTranscriptLoader(\n", + " file_path=\"./your_file.mp3\",\n", + " config=config\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pass the API Key as argument\n", + "\n", + "Next to setting the API key as environment variable `ASSEMBLYAI_API_KEY`, it is also possible to pass it as argument." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "loader = AssemblyAIAudioTranscriptLoader(\n", + " file_path=\"./your_file.mp3\",\n", + " api_key=\"YOUR_KEY\"\n", + ")" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/extras/integrations/document_loaders/docugami.ipynb b/docs/extras/integrations/document_loaders/docugami.ipynb index b1386f115..48db3ae81 100644 --- a/docs/extras/integrations/document_loaders/docugami.ipynb +++ b/docs/extras/integrations/document_loaders/docugami.ipynb @@ -15,14 +15,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "tags": [] }, "outputs": [], "source": [ - "# You need the lxml package to use the DocugamiLoader\n", - "!pip install lxml" + "# You need the lxml package to use the DocugamiLoader (run pip install directly without \"poetry run\" if you are not using poetry)\n", + "!poetry run pip install lxml --quiet" ] }, { @@ -75,25 +75,25 @@ { "data": { "text/plain": [ - "[Document(page_content='MUTUAL NON-DISCLOSURE AGREEMENT This Mutual Non-Disclosure Agreement (this “ Agreement ”) is entered into and made effective as of April 4 , 2018 between Docugami Inc. , a Delaware corporation , whose address is 150 Lake Street South , Suite 221 , Kirkland , Washington 98033 , and Caleb Divine , an individual, whose address is 1201 Rt 300 , Newburgh NY 12550 .', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:ThisMutualNon-disclosureAgreement', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'ThisMutualNon-disclosureAgreement'}),\n", - " Document(page_content='The above named parties desire to engage in discussions regarding a potential agreement or other transaction between the parties (the “Purpose”). In connection with such discussions, it may be necessary for the parties to disclose to each other certain confidential information or materials to enable them to evaluate whether to enter into such agreement or transaction.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Discussions', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'Discussions'}),\n", - " Document(page_content='In consideration of the foregoing, the parties agree as follows:', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Consideration', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'Consideration'}),\n", - " Document(page_content='1. Confidential Information . For purposes of this Agreement , “ Confidential Information ” means any information or materials disclosed by one party to the other party that: (i) if disclosed in writing or in the form of tangible materials, is marked “confidential” or “proprietary” at the time of such disclosure; (ii) if disclosed orally or by visual presentation, is identified as “confidential” or “proprietary” at the time of such disclosure, and is summarized in a writing sent by the disclosing party to the receiving party within thirty ( 30 ) days after any such disclosure; or (iii) due to its nature or the circumstances of its disclosure, a person exercising reasonable business judgment would understand to be confidential or proprietary.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Purposes/docset:ConfidentialInformation-section/docset:ConfidentialInformation[2]', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'ConfidentialInformation'}),\n", - " Document(page_content=\"2. Obligations and Restrictions . Each party agrees: (i) to maintain the other party's Confidential Information in strict confidence; (ii) not to disclose such Confidential Information to any third party; and (iii) not to use such Confidential Information for any purpose except for the Purpose. Each party may disclose the other party’s Confidential Information to its employees and consultants who have a bona fide need to know such Confidential Information for the Purpose, but solely to the extent necessary to pursue the Purpose and for no other purpose; provided, that each such employee and consultant first executes a written agreement (or is otherwise already bound by a written agreement) that contains use and nondisclosure restrictions at least as protective of the other party’s Confidential Information as those set forth in this Agreement .\", metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Obligations/docset:ObligationsAndRestrictions-section/docset:ObligationsAndRestrictions', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'ObligationsAndRestrictions'}),\n", - " Document(page_content='3. Exceptions. The obligations and restrictions in Section 2 will not apply to any information or materials that:', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Exceptions/docset:Exceptions-section/docset:Exceptions[2]', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'Exceptions'}),\n", - " Document(page_content='(i) were, at the date of disclosure, or have subsequently become, generally known or available to the public through no act or failure to act by the receiving party;', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheDate/docset:TheDate/docset:TheDate', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'TheDate'}),\n", - " Document(page_content='(ii) were rightfully known by the receiving party prior to receiving such information or materials from the disclosing party;', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheDate/docset:SuchInformation/docset:TheReceivingParty', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'TheReceivingParty'}),\n", - " Document(page_content='(iii) are rightfully acquired by the receiving party from a third party who has the right to disclose such information or materials without breach of any confidentiality obligation to the disclosing party;', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheDate/docset:TheReceivingParty/docset:TheReceivingParty', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'TheReceivingParty'}),\n", - " Document(page_content='4. Compelled Disclosure . Nothing in this Agreement will be deemed to restrict a party from disclosing the other party’s Confidential Information to the extent required by any order, subpoena, law, statute or regulation; provided, that the party required to make such a disclosure uses reasonable efforts to give the other party reasonable advance notice of such required disclosure in order to enable the other party to prevent or limit such disclosure.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Disclosure/docset:CompelledDisclosure-section/docset:CompelledDisclosure', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'CompelledDisclosure'}),\n", - " Document(page_content='5. Return of Confidential Information . Upon the completion or abandonment of the Purpose, and in any event upon the disclosing party’s request, the receiving party will promptly return to the disclosing party all tangible items and embodiments containing or consisting of the disclosing party’s Confidential Information and all copies thereof (including electronic copies), and any notes, analyses, compilations, studies, interpretations, memoranda or other documents (regardless of the form thereof) prepared by or on behalf of the receiving party that contain or are based upon the disclosing party’s Confidential Information .', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheCompletion/docset:ReturnofConfidentialInformation-section/docset:ReturnofConfidentialInformation', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'ReturnofConfidentialInformation'}),\n", - " Document(page_content='6. No Obligations . Each party retains the right to determine whether to disclose any Confidential Information to the other party.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:NoObligations/docset:NoObligations-section/docset:NoObligations[2]', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'NoObligations'}),\n", - " Document(page_content='7. No Warranty. ALL CONFIDENTIAL INFORMATION IS PROVIDED BY THE DISCLOSING PARTY “AS IS ”.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:NoWarranty/docset:NoWarranty-section/docset:NoWarranty[2]', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'NoWarranty'}),\n", - " Document(page_content='8. Term. This Agreement will remain in effect for a period of seven ( 7 ) years from the date of last disclosure of Confidential Information by either party, at which time it will terminate.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:ThisAgreement/docset:Term-section/docset:Term', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'Term'}),\n", - " Document(page_content='9. Equitable Relief . Each party acknowledges that the unauthorized use or disclosure of the disclosing party’s Confidential Information may cause the disclosing party to incur irreparable harm and significant damages, the degree of which may be difficult to ascertain. Accordingly, each party agrees that the disclosing party will have the right to seek immediate equitable relief to enjoin any unauthorized use or disclosure of its Confidential Information , in addition to any other rights and remedies that it may have at law or otherwise.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:EquitableRelief/docset:EquitableRelief-section/docset:EquitableRelief[2]', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'EquitableRelief'}),\n", - " Document(page_content='10. Non-compete. To the maximum extent permitted by applicable law, during the Term of this Agreement and for a period of one ( 1 ) year thereafter, Caleb Divine may not market software products or do business that directly or indirectly competes with Docugami software products .', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheMaximumExtent/docset:Non-compete-section/docset:Non-compete', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'Non-compete'}),\n", - " Document(page_content='11. Miscellaneous. This Agreement will be governed and construed in accordance with the laws of the State of Washington , excluding its body of law controlling conflict of laws. This Agreement is the complete and exclusive understanding and agreement between the parties regarding the subject matter of this Agreement and supersedes all prior agreements, understandings and communications, oral or written, between the parties regarding the subject matter of this Agreement . If any provision of this Agreement is held invalid or unenforceable by a court of competent jurisdiction, that provision of this Agreement will be enforced to the maximum extent permissible and the other provisions of this Agreement will remain in full force and effect. Neither party may assign this Agreement , in whole or in part, by operation of law or otherwise, without the other party’s prior written consent, and any attempted assignment without such consent will be void. This Agreement may be executed in counterparts, each of which will be deemed an original, but all of which together will constitute one and the same instrument.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Accordance/docset:Miscellaneous-section/docset:Miscellaneous', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'Miscellaneous'}),\n", - " Document(page_content='[SIGNATURE PAGE FOLLOWS] IN WITNESS WHEREOF, the parties hereto have executed this Mutual Non-Disclosure Agreement by their duly authorized officers or representatives as of the date first set forth above.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:Witness/docset:TheParties/docset:TheParties', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'TheParties'}),\n", - " Document(page_content='DOCUGAMI INC . : \\n\\n Caleb Divine : \\n\\n Signature: Signature: Name: \\n\\n Jean Paoli Name: Title: \\n\\n CEO Title:', metadata={'xpath': '/docset:MutualNon-disclosure/docset:Witness/docset:TheParties/docset:DocugamiInc/docset:DocugamiInc/xhtml:table', 'id': '43rj0ds7s0ur', 'name': 'NDA simple layout.docx', 'structure': '', 'tag': 'table'})]" + "[Document(page_content='MUTUAL NON-DISCLOSURE AGREEMENT This Mutual Non-Disclosure Agreement (this “ Agreement ”) is entered into and made effective as of April 4 , 2018 between Docugami Inc. , a Delaware corporation , whose address is 150 Lake Street South , Suite 221 , Kirkland , Washington 98033 , and Caleb Divine , an individual, whose address is 1201 Rt 300 , Newburgh NY 12550 .', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:ThisMutualNon-disclosureAgreement', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'ThisMutualNon-disclosureAgreement'}),\n", + " Document(page_content='The above named parties desire to engage in discussions regarding a potential agreement or other transaction between the parties (the “Purpose”). In connection with such discussions, it may be necessary for the parties to disclose to each other certain confidential information or materials to enable them to evaluate whether to enter into such agreement or transaction.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Discussions', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'Discussions'}),\n", + " Document(page_content='In consideration of the foregoing, the parties agree as follows:', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Consideration', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'Consideration'}),\n", + " Document(page_content='1. Confidential Information . For purposes of this Agreement , “ Confidential Information ” means any information or materials disclosed by one party to the other party that: (i) if disclosed in writing or in the form of tangible materials, is marked “confidential” or “proprietary” at the time of such disclosure; (ii) if disclosed orally or by visual presentation, is identified as “confidential” or “proprietary” at the time of such disclosure, and is summarized in a writing sent by the disclosing party to the receiving party within thirty ( 30 ) days after any such disclosure; or (iii) due to its nature or the circumstances of its disclosure, a person exercising reasonable business judgment would understand to be confidential or proprietary.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Purposes/docset:ConfidentialInformation-section/docset:ConfidentialInformation[2]', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'ConfidentialInformation'}),\n", + " Document(page_content=\"2. Obligations and Restrictions . Each party agrees: (i) to maintain the other party's Confidential Information in strict confidence; (ii) not to disclose such Confidential Information to any third party; and (iii) not to use such Confidential Information for any purpose except for the Purpose. Each party may disclose the other party’s Confidential Information to its employees and consultants who have a bona fide need to know such Confidential Information for the Purpose, but solely to the extent necessary to pursue the Purpose and for no other purpose; provided, that each such employee and consultant first executes a written agreement (or is otherwise already bound by a written agreement) that contains use and nondisclosure restrictions at least as protective of the other party’s Confidential Information as those set forth in this Agreement .\", metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Obligations/docset:ObligationsAndRestrictions-section/docset:ObligationsAndRestrictions', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'ObligationsAndRestrictions'}),\n", + " Document(page_content='3. Exceptions. The obligations and restrictions in Section 2 will not apply to any information or materials that:', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Exceptions/docset:Exceptions-section/docset:Exceptions[2]', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'Exceptions'}),\n", + " Document(page_content='(i) were, at the date of disclosure, or have subsequently become, generally known or available to the public through no act or failure to act by the receiving party;', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheDate/docset:TheDate/docset:TheDate', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'TheDate'}),\n", + " Document(page_content='(ii) were rightfully known by the receiving party prior to receiving such information or materials from the disclosing party;', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheDate/docset:SuchInformation/docset:TheReceivingParty', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'TheReceivingParty'}),\n", + " Document(page_content='(iii) are rightfully acquired by the receiving party from a third party who has the right to disclose such information or materials without breach of any confidentiality obligation to the disclosing party;', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheDate/docset:TheReceivingParty/docset:TheReceivingParty', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'TheReceivingParty'}),\n", + " Document(page_content='4. Compelled Disclosure . Nothing in this Agreement will be deemed to restrict a party from disclosing the other party’s Confidential Information to the extent required by any order, subpoena, law, statute or regulation; provided, that the party required to make such a disclosure uses reasonable efforts to give the other party reasonable advance notice of such required disclosure in order to enable the other party to prevent or limit such disclosure.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Disclosure/docset:CompelledDisclosure-section/docset:CompelledDisclosure', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'CompelledDisclosure'}),\n", + " Document(page_content='5. Return of Confidential Information . Upon the completion or abandonment of the Purpose, and in any event upon the disclosing party’s request, the receiving party will promptly return to the disclosing party all tangible items and embodiments containing or consisting of the disclosing party’s Confidential Information and all copies thereof (including electronic copies), and any notes, analyses, compilations, studies, interpretations, memoranda or other documents (regardless of the form thereof) prepared by or on behalf of the receiving party that contain or are based upon the disclosing party’s Confidential Information .', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheCompletion/docset:ReturnofConfidentialInformation-section/docset:ReturnofConfidentialInformation', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'ReturnofConfidentialInformation'}),\n", + " Document(page_content='6. No Obligations . Each party retains the right to determine whether to disclose any Confidential Information to the other party.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:NoObligations/docset:NoObligations-section/docset:NoObligations[2]', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'NoObligations'}),\n", + " Document(page_content='7. No Warranty. ALL CONFIDENTIAL INFORMATION IS PROVIDED BY THE DISCLOSING PARTY “AS IS ”.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:NoWarranty/docset:NoWarranty-section/docset:NoWarranty[2]', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'NoWarranty'}),\n", + " Document(page_content='8. Term. This Agreement will remain in effect for a period of seven ( 7 ) years from the date of last disclosure of Confidential Information by either party, at which time it will terminate.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:ThisAgreement/docset:Term-section/docset:Term', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'Term'}),\n", + " Document(page_content='9. Equitable Relief . Each party acknowledges that the unauthorized use or disclosure of the disclosing party’s Confidential Information may cause the disclosing party to incur irreparable harm and significant damages, the degree of which may be difficult to ascertain. Accordingly, each party agrees that the disclosing party will have the right to seek immediate equitable relief to enjoin any unauthorized use or disclosure of its Confidential Information , in addition to any other rights and remedies that it may have at law or otherwise.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:EquitableRelief/docset:EquitableRelief-section/docset:EquitableRelief[2]', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'EquitableRelief'}),\n", + " Document(page_content='10. Non-compete. To the maximum extent permitted by applicable law, during the Term of this Agreement and for a period of one ( 1 ) year thereafter, Caleb Divine may not market software products or do business that directly or indirectly competes with Docugami software products .', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:TheMaximumExtent/docset:Non-compete-section/docset:Non-compete', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'Non-compete'}),\n", + " Document(page_content='11. Miscellaneous. This Agreement will be governed and construed in accordance with the laws of the State of Washington , excluding its body of law controlling conflict of laws. This Agreement is the complete and exclusive understanding and agreement between the parties regarding the subject matter of this Agreement and supersedes all prior agreements, understandings and communications, oral or written, between the parties regarding the subject matter of this Agreement . If any provision of this Agreement is held invalid or unenforceable by a court of competent jurisdiction, that provision of this Agreement will be enforced to the maximum extent permissible and the other provisions of this Agreement will remain in full force and effect. Neither party may assign this Agreement , in whole or in part, by operation of law or otherwise, without the other party’s prior written consent, and any attempted assignment without such consent will be void. This Agreement may be executed in counterparts, each of which will be deemed an original, but all of which together will constitute one and the same instrument.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:MutualNon-disclosure/docset:MUTUALNON-DISCLOSUREAGREEMENT-section/docset:MUTUALNON-DISCLOSUREAGREEMENT/docset:Consideration/docset:Purposes/docset:Accordance/docset:Miscellaneous-section/docset:Miscellaneous', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'div', 'tag': 'Miscellaneous'}),\n", + " Document(page_content='[SIGNATURE PAGE FOLLOWS] IN WITNESS WHEREOF, the parties hereto have executed this Mutual Non-Disclosure Agreement by their duly authorized officers or representatives as of the date first set forth above.', metadata={'xpath': '/docset:MutualNon-disclosure/docset:Witness/docset:TheParties/docset:TheParties', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': 'p', 'tag': 'TheParties'}),\n", + " Document(page_content='DOCUGAMI INC . : \\n\\n Caleb Divine : \\n\\n Signature: Signature: Name: \\n\\n Jean Paoli Name: Title: \\n\\n CEO Title:', metadata={'xpath': '/docset:MutualNon-disclosure/docset:Witness/docset:TheParties/docset:DocugamiInc/docset:DocugamiInc/xhtml:table', 'id': '43rj0ds7s0ur', 'source': 'NDA simple layout.docx', 'structure': '', 'tag': 'table'})]" ] }, "execution_count": 3, @@ -116,7 +116,7 @@ "source": [ "The `metadata` for each `Document` (really, a chunk of an actual PDF, DOC or DOCX) contains some useful additional information:\n", "\n", - "1. **id and name:** ID and Name of the file (PDF, DOC or DOCX) the chunk is sourced from within Docugami.\n", + "1. **id and source:** ID and Name of the file (PDF, DOC or DOCX) the chunk is sourced from within Docugami.\n", "2. **xpath:** XPath inside the XML representation of the document, for the chunk. Useful for source citations directly to the actual chunk inside the document XML.\n", "3. **structure:** Structural attributes of the chunk, e.g. h1, h2, div, table, td, etc. Useful to filter out certain kinds of chunks if needed by the caller.\n", "4. **tag:** Semantic tag for the chunk, using various generative and extractive techniques. More details here: https://github.com/docugami/DFM-benchmarks" @@ -133,7 +133,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -142,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -170,15 +170,7 @@ "cell_type": "code", "execution_count": 6, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Using embedded DuckDB without persistence: data will be transient\n" - ] - } - ], + "outputs": [], "source": [ "embedding = OpenAIEmbeddings()\n", "vectordb = Chroma.from_documents(documents=documents, embedding=embedding)\n", @@ -197,11 +189,11 @@ "data": { "text/plain": [ "{'query': 'What can tenants do with signage on their properties?',\n", - " 'result': ' Tenants may place signs (digital or otherwise) or other form of identification on the premises after receiving written permission from the landlord which shall not be unreasonably withheld. The tenant is responsible for any damage caused to the premises and must conform to any applicable laws, ordinances, etc. governing the same. The tenant must also remove and clean any window or glass identification promptly upon vacating the premises.',\n", - " 'source_documents': [Document(page_content='ARTICLE VI SIGNAGE 6.01 Signage . Tenant may place or attach to the Premises signs (digital or otherwise) or other such identification as needed after receiving written permission from the Landlord , which permission shall not be unreasonably withheld. Any damage caused to the Premises by the Tenant ’s erecting or removing such signs shall be repaired promptly by the Tenant at the Tenant ’s expense . Any signs or other form of identification allowed must conform to all applicable laws, ordinances, etc. governing the same. Tenant also agrees to have any window or glass identification completely removed and cleaned at its expense promptly upon vacating the Premises.', metadata={'xpath': '/docset:OFFICELEASEAGREEMENT-section/docset:OFFICELEASEAGREEMENT/docset:Article/docset:ARTICLEVISIGNAGE-section/docset:_601Signage-section/docset:_601Signage', 'id': 'v1bvgaozfkak', 'name': 'TruTone Lane 2.docx', 'structure': 'div', 'tag': '_601Signage', 'Landlord': 'BUBBA CENTER PARTNERSHIP', 'Tenant': 'Truetone Lane LLC'}),\n", - " Document(page_content='Signage. Tenant may place or attach to the Premises signs (digital or otherwise) or other such identification as needed after receiving written permission from the Landlord , which permission shall not be unreasonably withheld. Any damage caused to the Premises by the Tenant ’s erecting or removing such signs shall be repaired promptly by the Tenant at the Tenant ’s expense . Any signs or other form of identification allowed must conform to all applicable laws, ordinances, etc. governing the same. Tenant also agrees to have any window or glass identification completely removed and cleaned at its expense promptly upon vacating the Premises. \\n\\n ARTICLE VII UTILITIES 7.01', metadata={'xpath': '/docset:OFFICELEASEAGREEMENT-section/docset:OFFICELEASEAGREEMENT/docset:ThisOFFICELEASEAGREEMENTThis/docset:ArticleIBasic/docset:ArticleIiiUseAndCareOf/docset:ARTICLEIIIUSEANDCAREOFPREMISES-section/docset:ARTICLEIIIUSEANDCAREOFPREMISES/docset:NoOtherPurposes/docset:TenantsResponsibility/dg:chunk', 'id': 'g2fvhekmltza', 'name': 'TruTone Lane 6.pdf', 'structure': 'lim', 'tag': 'chunk', 'Landlord': 'GLORY ROAD LLC', 'Tenant': 'Truetone Lane LLC'}),\n", - " Document(page_content='Landlord , its agents, servants, employees, licensees, invitees, and contractors during the last year of the term of this Lease at any and all times during regular business hours, after 24 hour notice to tenant, to pass and repass on and through the Premises, or such portion thereof as may be necessary, in order that they or any of them may gain access to the Premises for the purpose of showing the Premises to potential new tenants or real estate brokers. In addition, Landlord shall be entitled to place a \"FOR RENT \" or \"FOR LEASE\" sign (not exceeding 8.5 ” x 11 ”) in the front window of the Premises during the last six months of the term of this Lease .', metadata={'xpath': '/docset:Rider/docset:RIDERTOLEASE-section/docset:RIDERTOLEASE/docset:FixedRent/docset:TermYearPeriod/docset:Lease/docset:_42FLandlordSAccess-section/docset:_42FLandlordSAccess/docset:LandlordsRights/docset:Landlord', 'id': 'omvs4mysdk6b', 'name': 'TruTone Lane 1.docx', 'structure': 'p', 'tag': 'Landlord', 'Landlord': 'BIRCH STREET , LLC', 'Tenant': 'Trutone Lane LLC'}),\n", - " Document(page_content=\"24. SIGNS . No signage shall be placed by Tenant on any portion of the Project . However, Tenant shall be permitted to place a sign bearing its name in a location approved by Landlord near the entrance to the Premises (at Tenant's cost ) and will be furnished a single listing of its name in the Building's directory (at Landlord 's cost ), all in accordance with the criteria adopted from time to time by Landlord for the Project . Any changes or additional listings in the directory shall be furnished (subject to availability of space) for the then Building Standard charge .\", metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Period/docset:ApplicableSalesTax/docset:PercentageRent/docset:TheTerms/docset:Indemnification/docset:INDEMNIFICATION-section/docset:INDEMNIFICATION/docset:Waiver/docset:Waiver/docset:Signs/docset:SIGNS-section/docset:SIGNS', 'id': 'qkn9cyqsiuch', 'name': 'Shorebucks LLC_AZ.pdf', 'structure': 'div', 'tag': 'SIGNS', 'Landlord': 'Menlo Group', 'Tenant': 'Shorebucks LLC'})]}" + " 'result': \" Tenants can place or attach signs (digital or otherwise) to their premises with written permission from the landlord. The signs must conform to all applicable laws, ordinances, etc. governing the same. Tenants can also have their name listed in the building's directory at the landlord's cost.\",\n", + " 'source_documents': [Document(page_content='ARTICLE VI SIGNAGE 6.01 Signage . Tenant may place or attach to the Premises signs (digital or otherwise) or other such identification as needed after receiving written permission from the Landlord , which permission shall not be unreasonably withheld. Any damage caused to the Premises by the Tenant ’s erecting or removing such signs shall be repaired promptly by the Tenant at the Tenant ’s expense . Any signs or other form of identification allowed must conform to all applicable laws, ordinances, etc. governing the same. Tenant also agrees to have any window or glass identification completely removed and cleaned at its expense promptly upon vacating the Premises.', metadata={'Landlord': 'BUBBA CENTER PARTNERSHIP', 'Lease Date': 'April 24 \\n\\n ,', 'Lease Parties': 'This OFFICE LEASE AGREEMENT (this \"Lease\") is made and entered into by and between BUBBA CENTER PARTNERSHIP (\" Landlord \"), and Truetone Lane LLC , a Delaware limited liability company (\" Tenant \").', 'Tenant': 'Truetone Lane LLC', 'id': 'v1bvgaozfkak', 'source': 'TruTone Lane 2.docx', 'structure': 'div', 'tag': '_601Signage', 'xpath': '/docset:OFFICELEASEAGREEMENT-section/docset:OFFICELEASEAGREEMENT/docset:Article/docset:ARTICLEVISIGNAGE-section/docset:_601Signage-section/docset:_601Signage'}),\n", + " Document(page_content='Signage. Tenant may place or attach to the Premises signs (digital or otherwise) or other such identification as needed after receiving written permission from the Landlord , which permission shall not be unreasonably withheld. Any damage caused to the Premises by the Tenant ’s erecting or removing such signs shall be repaired promptly by the Tenant at the Tenant ’s expense . Any signs or other form of identification allowed must conform to all applicable laws, ordinances, etc. governing the same. Tenant also agrees to have any window or glass identification completely removed and cleaned at its expense promptly upon vacating the Premises. \\n\\n ARTICLE VII UTILITIES 7.01', metadata={'Landlord': 'GLORY ROAD LLC', 'Lease Date': 'April 30 , 2020', 'Lease Parties': 'This OFFICE LEASE AGREEMENT (this \"Lease\") is made and entered into by and between GLORY ROAD LLC (\" Landlord \"), and Truetone Lane LLC , a Delaware limited liability company (\" Tenant \").', 'Tenant': 'Truetone Lane LLC', 'id': 'g2fvhekmltza', 'source': 'TruTone Lane 6.pdf', 'structure': 'lim', 'tag': 'chunk', 'xpath': '/docset:OFFICELEASEAGREEMENT-section/docset:OFFICELEASEAGREEMENT/docset:Article/docset:ArticleIiiUse/docset:ARTICLEIIIUSEANDCAREOFPREMISES-section/docset:ARTICLEIIIUSEANDCAREOFPREMISES/docset:AnyTime/docset:Addition/dg:chunk'}),\n", + " Document(page_content='Landlord , its agents, servants, employees, licensees, invitees, and contractors during the last year of the term of this Lease at any and all times during regular business hours, after 24 hour notice to tenant, to pass and repass on and through the Premises, or such portion thereof as may be necessary, in order that they or any of them may gain access to the Premises for the purpose of showing the Premises to potential new tenants or real estate brokers. In addition, Landlord shall be entitled to place a \"FOR RENT \" or \"FOR LEASE\" sign (not exceeding 8.5 ” x 11 ”) in the front window of the Premises during the last six months of the term of this Lease .', metadata={'Landlord': 'BIRCH STREET , LLC', 'Lease Date': 'October 15 , 2021', 'Lease Parties': 'The provisions of this rider are hereby incorporated into and made a part of the Lease dated as of October 15 , 2021 between BIRCH STREET , LLC , having an address at c/o Birch Palace , 6 Grace Avenue Suite 200 , Great Neck , New York 11021 (\" Landlord \"), and Trutone Lane LLC , having an address at 4 Pearl Street , New York , New York 10012 (\" Tenant \") of Premises known as the ground floor space and lower level space, as per floor plan annexed hereto and made a part hereof as Exhibit A (“Premises”) at 4 Pearl Street , New York , New York 10012 in the City of New York , Borough of Manhattan , to which this rider is annexed. If there is any conflict between the provisions of this rider and the remainder of this Lease , the provisions of this rider shall govern.', 'Tenant': 'Trutone Lane LLC', 'id': 'omvs4mysdk6b', 'source': 'TruTone Lane 1.docx', 'structure': 'p', 'tag': 'Landlord', 'xpath': '/docset:Rider/docset:RIDERTOLEASE-section/docset:RIDERTOLEASE/docset:FixedRent/docset:TermYearPeriod/docset:Lease/docset:_42FLandlordSAccess-section/docset:_42FLandlordSAccess/docset:LandlordsRights/docset:Landlord'}),\n", + " Document(page_content=\"24. SIGNS . No signage shall be placed by Tenant on any portion of the Project . However, Tenant shall be permitted to place a sign bearing its name in a location approved by Landlord near the entrance to the Premises (at Tenant's cost ) and will be furnished a single listing of its name in the Building's directory (at Landlord 's cost ), all in accordance with the criteria adopted from time to time by Landlord for the Project . Any changes or additional listings in the directory shall be furnished (subject to availability of space) for the then Building Standard charge .\", metadata={'Landlord': 'Perry & Blair LLC', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'dsyfhh4vpeyf', 'source': 'Shorebucks LLC_CO.pdf', 'structure': 'div', 'tag': 'SIGNS', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:ThisLease-section/docset:ThisLease/docset:Guaranty-section/docset:Guaranty[2]/docset:TheTransfer/docset:TheTerms/docset:Indemnification/docset:INDEMNIFICATION-section/docset:INDEMNIFICATION/docset:Waiver/docset:Waiver/docset:Signs/docset:SIGNS-section/docset:SIGNS'})]}" ] }, "execution_count": 7, @@ -233,7 +225,7 @@ { "data": { "text/plain": [ - "' 9,753 square feet'" + "' 9,753 square feet.'" ] }, "execution_count": 8, @@ -243,31 +235,31 @@ ], "source": [ "chain_response = qa_chain(\"What is rentable area for the property owned by DHA Group?\")\n", - "chain_response[\"result\"] # the correct answer should be 13,500" + "chain_response[\"result\"] # correct answer should be 13,500 sq ft" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "At first glance the answer may seem reasonable, but if you review the source chunks carefully for this answer, you will see that the chunking of the document did not end up putting the Landlord name and the rentable area in the same context, since they are far apart in the document. The retriever therefore ends up finding unrelated chunks from other documents not even related to the **Menlo Group** landlord. That landlord happens to be mentioned on the first page of the file **Shorebucks LLC_NJ.pdf** file, and while one of the source chunks used by the chain is indeed from that doc that contains the correct answer (**13,500**), other source chunks from different docs are included, and the answer is therefore incorrect." + "At first glance the answer may seem reasonable, but if you review the source chunks carefully for this answer, you will see that the chunking of the document did not end up putting the Landlord name and the rentable area in the same context, since they are far apart in the document. The retriever therefore ends up finding unrelated chunks from other documents not even related to the **DHA Group** landlord. That landlord happens to be mentioned on the first page of the file **Shorebucks LLC_NJ.pdf** file, and while one of the source chunks used by the chain is indeed from that doc that contains the correct answer (**13,500**), other source chunks from different docs are included, and the answer is therefore incorrect." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[Document(page_content='1.1 Landlord . DHA Group , a Delaware limited liability company authorized to transact business in New Jersey .', metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:TheTerms/dg:chunk/docset:BasicLeaseInformation/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS-section/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS/docset:DhaGroup/docset:DhaGroup/docset:DhaGroup/docset:Landlord-section/docset:DhaGroup', 'id': 'md8rieecquyv', 'name': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'DhaGroup', 'Landlord': 'DHA Group', 'Tenant': 'Shorebucks LLC'}),\n", - " Document(page_content='WITNESSES: LANDLORD: DHA Group , a Delaware limited liability company', metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Guaranty-section/docset:Guaranty[2]/docset:SIGNATURESONNEXTPAGE-section/docset:INWITNESSWHEREOF-section/docset:INWITNESSWHEREOF/docset:Behalf/docset:Witnesses/xhtml:table/xhtml:tbody/xhtml:tr[3]/xhtml:td[2]/docset:DhaGroup', 'id': 'md8rieecquyv', 'name': 'Shorebucks LLC_NJ.pdf', 'structure': 'p', 'tag': 'DhaGroup', 'Landlord': 'DHA Group', 'Tenant': 'Shorebucks LLC'}),\n", - " Document(page_content=\"1.16 Landlord 's Notice Address . DHA Group , Suite 1010 , 111 Bauer Dr , Oakland , New Jersey , 07436 , with a copy to the Building Management Office at the Project , Attention: On - Site Property Manager .\", metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Period/docset:ApplicableSalesTax/docset:PercentageRent/docset:PercentageRent/docset:NoticeAddress[2]/docset:LandlordsNoticeAddress-section/docset:LandlordsNoticeAddress[2]', 'id': 'md8rieecquyv', 'name': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'LandlordsNoticeAddress', 'Landlord': 'DHA Group', 'Tenant': 'Shorebucks LLC'}),\n", - " Document(page_content='1.6 Rentable Area of the Premises. 9,753 square feet . This square footage figure includes an add-on factor for Common Areas in the Building and has been agreed upon by the parties as final and correct and is not subject to challenge or dispute by either party.', metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:TheTerms/dg:chunk/docset:BasicLeaseInformation/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS-section/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS/docset:PerryBlair/docset:PerryBlair/docset:Premises[2]/docset:RentableAreaofthePremises-section/docset:RentableAreaofthePremises', 'id': 'dsyfhh4vpeyf', 'name': 'Shorebucks LLC_CO.pdf', 'structure': 'div', 'tag': 'RentableAreaofthePremises', 'Landlord': 'Perry & Blair LLC', 'Tenant': 'Shorebucks LLC'})]" + "[Document(page_content='1.1 Landlord . DHA Group , a Delaware limited liability company authorized to transact business in New Jersey .', metadata={'Landlord': 'DHA Group', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'md8rieecquyv', 'source': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'DhaGroup', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:TheTerms/dg:chunk/docset:BasicLeaseInformation/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS-section/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS/docset:DhaGroup/docset:DhaGroup/docset:DhaGroup/docset:Landlord-section/docset:DhaGroup'}),\n", + " Document(page_content='WITNESSES: LANDLORD: DHA Group , a Delaware limited liability company', metadata={'Landlord': 'DHA Group', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'md8rieecquyv', 'source': 'Shorebucks LLC_NJ.pdf', 'structure': 'p', 'tag': 'DhaGroup', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Guaranty-section/docset:Guaranty[2]/docset:SIGNATURESONNEXTPAGE-section/docset:INWITNESSWHEREOF-section/docset:INWITNESSWHEREOF/docset:Behalf/docset:Witnesses/xhtml:table/xhtml:tbody/xhtml:tr[3]/xhtml:td[2]/docset:DhaGroup'}),\n", + " Document(page_content=\"1.16 Landlord 's Notice Address . DHA Group , Suite 1010 , 111 Bauer Dr , Oakland , New Jersey , 07436 , with a copy to the Building Management Office at the Project , Attention: On - Site Property Manager .\", metadata={'Landlord': 'DHA Group', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'md8rieecquyv', 'source': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'LandlordsNoticeAddress', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Period/docset:ApplicableSalesTax/docset:PercentageRent/docset:PercentageRent/docset:NoticeAddress[2]/docset:LandlordsNoticeAddress-section/docset:LandlordsNoticeAddress[2]'}),\n", + " Document(page_content='1.6 Rentable Area of the Premises. 9,753 square feet . This square footage figure includes an add-on factor for Common Areas in the Building and has been agreed upon by the parties as final and correct and is not subject to challenge or dispute by either party.', metadata={'Landlord': 'Perry & Blair LLC', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'dsyfhh4vpeyf', 'source': 'Shorebucks LLC_CO.pdf', 'structure': 'div', 'tag': 'RentableAreaofthePremises', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:TheTerms/dg:chunk/docset:BasicLeaseInformation/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS-section/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS/docset:PerryBlair/docset:PerryBlair/docset:Premises[2]/docset:RentableAreaofthePremises-section/docset:RentableAreaofthePremises'})]" ] }, - "execution_count": 9, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -287,22 +279,24 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'xpath': '/docset:OFFICELEASEAGREEMENT-section/docset:OFFICELEASEAGREEMENT/docset:ThisOfficeLeaseAgreement',\n", + "{'xpath': '/docset:OFFICELEASEAGREEMENT-section/docset:OFFICELEASEAGREEMENT/docset:LeaseParties',\n", " 'id': 'v1bvgaozfkak',\n", - " 'name': 'TruTone Lane 2.docx',\n", + " 'source': 'TruTone Lane 2.docx',\n", " 'structure': 'p',\n", - " 'tag': 'ThisOfficeLeaseAgreement',\n", + " 'tag': 'LeaseParties',\n", + " 'Lease Date': 'April 24 \\n\\n ,',\n", " 'Landlord': 'BUBBA CENTER PARTNERSHIP',\n", - " 'Tenant': 'Truetone Lane LLC'}" + " 'Tenant': 'Truetone Lane LLC',\n", + " 'Lease Parties': 'This OFFICE LEASE AGREEMENT (this \"Lease\") is made and entered into by and between BUBBA CENTER PARTNERSHIP (\" Landlord \"), and Truetone Lane LLC , a Delaware limited liability company (\" Tenant \").'}" ] }, - "execution_count": 10, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -322,17 +316,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 15, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Using embedded DuckDB without persistence: data will be transient\n" - ] - } - ], + "outputs": [], "source": [ "from langchain.chains.query_constructor.schema import AttributeInfo\n", "from langchain.retrievers.self_query.base import SelfQueryRetriever\n", @@ -372,22 +358,30 @@ "execution_count": 12, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/root/Source/github/docugami.langchain/libs/langchain/langchain/chains/llm.py:275: UserWarning: The predict_and_parse method is deprecated, instead pass an output parser directly to LLMChain.\n", + " warnings.warn(\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "query='rentable area' filter=Comparison(comparator=, attribute='Landlord', value='DHA Group')\n" + "query='rentable area' filter=Comparison(comparator=, attribute='Landlord', value='DHA Group') limit=None\n" ] }, { "data": { "text/plain": [ "{'query': 'What is rentable area for the property owned by DHA Group?',\n", - " 'result': ' 13,500 square feet.',\n", - " 'source_documents': [Document(page_content='1.1 Landlord . DHA Group , a Delaware limited liability company authorized to transact business in New Jersey .', metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:TheTerms/dg:chunk/docset:BasicLeaseInformation/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS-section/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS/docset:DhaGroup/docset:DhaGroup/docset:DhaGroup/docset:Landlord-section/docset:DhaGroup', 'id': 'md8rieecquyv', 'name': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'DhaGroup', 'Landlord': 'DHA Group', 'Tenant': 'Shorebucks LLC'}),\n", - " Document(page_content='WITNESSES: LANDLORD: DHA Group , a Delaware limited liability company', metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Guaranty-section/docset:Guaranty[2]/docset:SIGNATURESONNEXTPAGE-section/docset:INWITNESSWHEREOF-section/docset:INWITNESSWHEREOF/docset:Behalf/docset:Witnesses/xhtml:table/xhtml:tbody/xhtml:tr[3]/xhtml:td[2]/docset:DhaGroup', 'id': 'md8rieecquyv', 'name': 'Shorebucks LLC_NJ.pdf', 'structure': 'p', 'tag': 'DhaGroup', 'Landlord': 'DHA Group', 'Tenant': 'Shorebucks LLC'}),\n", - " Document(page_content=\"1.16 Landlord 's Notice Address . DHA Group , Suite 1010 , 111 Bauer Dr , Oakland , New Jersey , 07436 , with a copy to the Building Management Office at the Project , Attention: On - Site Property Manager .\", metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Period/docset:ApplicableSalesTax/docset:PercentageRent/docset:PercentageRent/docset:NoticeAddress[2]/docset:LandlordsNoticeAddress-section/docset:LandlordsNoticeAddress[2]', 'id': 'md8rieecquyv', 'name': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'LandlordsNoticeAddress', 'Landlord': 'DHA Group', 'Tenant': 'Shorebucks LLC'}),\n", - " Document(page_content='1.6 Rentable Area of the Premises. 13,500 square feet . This square footage figure includes an add-on factor for Common Areas in the Building and has been agreed upon by the parties as final and correct and is not subject to challenge or dispute by either party.', metadata={'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:TheTerms/dg:chunk/docset:BasicLeaseInformation/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS-section/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS/docset:DhaGroup/docset:DhaGroup/docset:Premises[2]/docset:RentableAreaofthePremises-section/docset:RentableAreaofthePremises', 'id': 'md8rieecquyv', 'name': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'RentableAreaofthePremises', 'Landlord': 'DHA Group', 'Tenant': 'Shorebucks LLC'})]}" + " 'result': ' The rentable area for the property owned by DHA Group is 13,500 square feet.',\n", + " 'source_documents': [Document(page_content='1.6 Rentable Area of the Premises. 13,500 square feet . This square footage figure includes an add-on factor for Common Areas in the Building and has been agreed upon by the parties as final and correct and is not subject to challenge or dispute by either party.', metadata={'Landlord': 'DHA Group', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'md8rieecquyv', 'source': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'RentableAreaofthePremises', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:TheTerms/dg:chunk/docset:BasicLeaseInformation/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS-section/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS/docset:DhaGroup/docset:DhaGroup/docset:Premises[2]/docset:RentableAreaofthePremises-section/docset:RentableAreaofthePremises'}),\n", + " Document(page_content='1.6 Rentable Area of the Premises. 13,500 square feet . This square footage figure includes an add-on factor for Common Areas in the Building and has been agreed upon by the parties as final and correct and is not subject to challenge or dispute by either party.', metadata={'Landlord': 'DHA Group', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'md8rieecquyv', 'source': 'Shorebucks LLC_NJ.pdf', 'structure': 'div', 'tag': 'RentableAreaofthePremises', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:TheTerms/dg:chunk/docset:BasicLeaseInformation/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS-section/docset:BASICLEASEINFORMATIONANDDEFINEDTERMS/docset:DhaGroup/docset:DhaGroup/docset:Premises[2]/docset:RentableAreaofthePremises-section/docset:RentableAreaofthePremises'}),\n", + " Document(page_content='1.11 Percentage Rent . (a) 55 % of Gross Revenue to Landlord until Landlord receives Percentage Rent in an amount equal to the Annual Market Rent Hurdle (as escalated); and', metadata={'Landlord': 'DHA Group', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'md8rieecquyv', 'source': 'Shorebucks LLC_NJ.pdf', 'structure': 'p', 'tag': 'GrossRevenue', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Period/docset:ApplicableSalesTax/docset:PercentageRent/docset:PercentageRent/docset:PercentageRent/docset:PercentageRent-section/docset:PercentageRent[2]/docset:PercentageRent/docset:GrossRevenue[1]/docset:GrossRevenue'}),\n", + " Document(page_content='1.11 Percentage Rent . (a) 55 % of Gross Revenue to Landlord until Landlord receives Percentage Rent in an amount equal to the Annual Market Rent Hurdle (as escalated); and', metadata={'Landlord': 'DHA Group', 'Lease Date': 'March 29th , 2019', 'Lease Parties': 'THIS OFFICE LEASE (the \"Lease\") is made and entered into as of March 29th , 2019 , by and between Landlord and Tenant . \"Date of this Lease\" shall mean the date on which the last one of the Landlord and Tenant has signed this Lease .', 'Tenant': 'Shorebucks LLC', 'id': 'md8rieecquyv', 'source': 'Shorebucks LLC_NJ.pdf', 'structure': 'p', 'tag': 'GrossRevenue', 'xpath': '/docset:OFFICELEASE-section/docset:OFFICELEASE/docset:THISOFFICELEASE/docset:WITNESSETH-section/docset:WITNESSETH/docset:GrossRentCreditTheRentCredit-section/docset:GrossRentCreditTheRentCredit/docset:Period/docset:ApplicableSalesTax/docset:PercentageRent/docset:PercentageRent/docset:PercentageRent/docset:PercentageRent-section/docset:PercentageRent[2]/docset:PercentageRent/docset:GrossRevenue[1]/docset:GrossRevenue'})]}" ] }, "execution_count": 12, @@ -396,7 +390,9 @@ } ], "source": [ - "qa_chain(\"What is rentable area for the property owned by DHA Group?\")" + "qa_chain(\n", + " \"What is rentable area for the property owned by DHA Group?\"\n", + ") # correct answer should be 13,500 sq ft" ] }, { @@ -423,7 +419,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.9.16" } }, "nbformat": 4, diff --git a/docs/extras/integrations/document_loaders/git.ipynb b/docs/extras/integrations/document_loaders/git.ipynb index 54d5df439..47382c564 100644 --- a/docs/extras/integrations/document_loaders/git.ipynb +++ b/docs/extras/integrations/document_loaders/git.ipynb @@ -173,7 +173,7 @@ "source": [ "from langchain.document_loaders import GitLoader\n", "\n", - "# eg. loading only python files\n", + "# e.g. loading only python files\n", "loader = GitLoader(\n", " repo_path=\"./example_data/test_repo1/\",\n", " file_filter=lambda file_path: file_path.endswith(\".py\"),\n", diff --git a/docs/extras/integrations/document_loaders/polars_dataframe.ipynb b/docs/extras/integrations/document_loaders/polars_dataframe.ipynb new file mode 100644 index 000000000..52936f165 --- /dev/null +++ b/docs/extras/integrations/document_loaders/polars_dataframe.ipynb @@ -0,0 +1,225 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "213a38a2", + "metadata": {}, + "source": [ + "# Polars DataFrame\n", + "\n", + "This notebook goes over how to load data from a [polars](https://pola-rs.github.io/polars-book/user-guide/) DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f6a7a9e4-80d6-486a-b2e3-636c568aa97c", + "metadata": {}, + "outputs": [], + "source": [ + "#!pip install polars" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79331964", + "metadata": {}, + "outputs": [], + "source": [ + "import polars as pl" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e487044c", + "metadata": {}, + "outputs": [], + "source": [ + "df = pl.read_csv(\"example_data/mlb_teams_2012.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ac273ca1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "shape: (5, 3)
    Team "Payroll (millions)" "Wins"
    strf64i64
    "Nationals"81.3498
    "Reds"82.297
    "Yankees"197.9695
    "Giants"117.6294
    "Braves"83.3194
    " + ], + "text/plain": [ + "shape: (5, 3)\n", + "┌───────────┬───────────────────────┬─────────┐\n", + "│ Team ┆ \"Payroll (millions)\" ┆ \"Wins\" │\n", + "│ --- ┆ --- ┆ --- │\n", + "│ str ┆ f64 ┆ i64 │\n", + "╞═══════════╪═══════════════════════╪═════════╡\n", + "│ Nationals ┆ 81.34 ┆ 98 │\n", + "│ Reds ┆ 82.2 ┆ 97 │\n", + "│ Yankees ┆ 197.96 ┆ 95 │\n", + "│ Giants ┆ 117.62 ┆ 94 │\n", + "│ Braves ┆ 83.31 ┆ 94 │\n", + "└───────────┴───────────────────────┴─────────┘" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "66e47a13", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import PolarsDataFrameLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2334caca", + "metadata": {}, + "outputs": [], + "source": [ + "loader = PolarsDataFrameLoader(df, page_content_column=\"Team\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d616c2b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='Nationals', metadata={' \"Payroll (millions)\"': 81.34, ' \"Wins\"': 98}),\n", + " Document(page_content='Reds', metadata={' \"Payroll (millions)\"': 82.2, ' \"Wins\"': 97}),\n", + " Document(page_content='Yankees', metadata={' \"Payroll (millions)\"': 197.96, ' \"Wins\"': 95}),\n", + " Document(page_content='Giants', metadata={' \"Payroll (millions)\"': 117.62, ' \"Wins\"': 94}),\n", + " Document(page_content='Braves', metadata={' \"Payroll (millions)\"': 83.31, ' \"Wins\"': 94}),\n", + " Document(page_content='Athletics', metadata={' \"Payroll (millions)\"': 55.37, ' \"Wins\"': 94}),\n", + " Document(page_content='Rangers', metadata={' \"Payroll (millions)\"': 120.51, ' \"Wins\"': 93}),\n", + " Document(page_content='Orioles', metadata={' \"Payroll (millions)\"': 81.43, ' \"Wins\"': 93}),\n", + " Document(page_content='Rays', metadata={' \"Payroll (millions)\"': 64.17, ' \"Wins\"': 90}),\n", + " Document(page_content='Angels', metadata={' \"Payroll (millions)\"': 154.49, ' \"Wins\"': 89}),\n", + " Document(page_content='Tigers', metadata={' \"Payroll (millions)\"': 132.3, ' \"Wins\"': 88}),\n", + " Document(page_content='Cardinals', metadata={' \"Payroll (millions)\"': 110.3, ' \"Wins\"': 88}),\n", + " Document(page_content='Dodgers', metadata={' \"Payroll (millions)\"': 95.14, ' \"Wins\"': 86}),\n", + " Document(page_content='White Sox', metadata={' \"Payroll (millions)\"': 96.92, ' \"Wins\"': 85}),\n", + " Document(page_content='Brewers', metadata={' \"Payroll (millions)\"': 97.65, ' \"Wins\"': 83}),\n", + " Document(page_content='Phillies', metadata={' \"Payroll (millions)\"': 174.54, ' \"Wins\"': 81}),\n", + " Document(page_content='Diamondbacks', metadata={' \"Payroll (millions)\"': 74.28, ' \"Wins\"': 81}),\n", + " Document(page_content='Pirates', metadata={' \"Payroll (millions)\"': 63.43, ' \"Wins\"': 79}),\n", + " Document(page_content='Padres', metadata={' \"Payroll (millions)\"': 55.24, ' \"Wins\"': 76}),\n", + " Document(page_content='Mariners', metadata={' \"Payroll (millions)\"': 81.97, ' \"Wins\"': 75}),\n", + " Document(page_content='Mets', metadata={' \"Payroll (millions)\"': 93.35, ' \"Wins\"': 74}),\n", + " Document(page_content='Blue Jays', metadata={' \"Payroll (millions)\"': 75.48, ' \"Wins\"': 73}),\n", + " Document(page_content='Royals', metadata={' \"Payroll (millions)\"': 60.91, ' \"Wins\"': 72}),\n", + " Document(page_content='Marlins', metadata={' \"Payroll (millions)\"': 118.07, ' \"Wins\"': 69}),\n", + " Document(page_content='Red Sox', metadata={' \"Payroll (millions)\"': 173.18, ' \"Wins\"': 69}),\n", + " Document(page_content='Indians', metadata={' \"Payroll (millions)\"': 78.43, ' \"Wins\"': 68}),\n", + " Document(page_content='Twins', metadata={' \"Payroll (millions)\"': 94.08, ' \"Wins\"': 66}),\n", + " Document(page_content='Rockies', metadata={' \"Payroll (millions)\"': 78.06, ' \"Wins\"': 64}),\n", + " Document(page_content='Cubs', metadata={' \"Payroll (millions)\"': 88.19, ' \"Wins\"': 61}),\n", + " Document(page_content='Astros', metadata={' \"Payroll (millions)\"': 60.65, ' \"Wins\"': 55})]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "loader.load()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "beb55c2f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "page_content='Nationals' metadata={' \"Payroll (millions)\"': 81.34, ' \"Wins\"': 98}\n", + "page_content='Reds' metadata={' \"Payroll (millions)\"': 82.2, ' \"Wins\"': 97}\n", + "page_content='Yankees' metadata={' \"Payroll (millions)\"': 197.96, ' \"Wins\"': 95}\n", + "page_content='Giants' metadata={' \"Payroll (millions)\"': 117.62, ' \"Wins\"': 94}\n", + "page_content='Braves' metadata={' \"Payroll (millions)\"': 83.31, ' \"Wins\"': 94}\n", + "page_content='Athletics' metadata={' \"Payroll (millions)\"': 55.37, ' \"Wins\"': 94}\n", + "page_content='Rangers' metadata={' \"Payroll (millions)\"': 120.51, ' \"Wins\"': 93}\n", + "page_content='Orioles' metadata={' \"Payroll (millions)\"': 81.43, ' \"Wins\"': 93}\n", + "page_content='Rays' metadata={' \"Payroll (millions)\"': 64.17, ' \"Wins\"': 90}\n", + "page_content='Angels' metadata={' \"Payroll (millions)\"': 154.49, ' \"Wins\"': 89}\n", + "page_content='Tigers' metadata={' \"Payroll (millions)\"': 132.3, ' \"Wins\"': 88}\n", + "page_content='Cardinals' metadata={' \"Payroll (millions)\"': 110.3, ' \"Wins\"': 88}\n", + "page_content='Dodgers' metadata={' \"Payroll (millions)\"': 95.14, ' \"Wins\"': 86}\n", + "page_content='White Sox' metadata={' \"Payroll (millions)\"': 96.92, ' \"Wins\"': 85}\n", + "page_content='Brewers' metadata={' \"Payroll (millions)\"': 97.65, ' \"Wins\"': 83}\n", + "page_content='Phillies' metadata={' \"Payroll (millions)\"': 174.54, ' \"Wins\"': 81}\n", + "page_content='Diamondbacks' metadata={' \"Payroll (millions)\"': 74.28, ' \"Wins\"': 81}\n", + "page_content='Pirates' metadata={' \"Payroll (millions)\"': 63.43, ' \"Wins\"': 79}\n", + "page_content='Padres' metadata={' \"Payroll (millions)\"': 55.24, ' \"Wins\"': 76}\n", + "page_content='Mariners' metadata={' \"Payroll (millions)\"': 81.97, ' \"Wins\"': 75}\n", + "page_content='Mets' metadata={' \"Payroll (millions)\"': 93.35, ' \"Wins\"': 74}\n", + "page_content='Blue Jays' metadata={' \"Payroll (millions)\"': 75.48, ' \"Wins\"': 73}\n", + "page_content='Royals' metadata={' \"Payroll (millions)\"': 60.91, ' \"Wins\"': 72}\n", + "page_content='Marlins' metadata={' \"Payroll (millions)\"': 118.07, ' \"Wins\"': 69}\n", + "page_content='Red Sox' metadata={' \"Payroll (millions)\"': 173.18, ' \"Wins\"': 69}\n", + "page_content='Indians' metadata={' \"Payroll (millions)\"': 78.43, ' \"Wins\"': 68}\n", + "page_content='Twins' metadata={' \"Payroll (millions)\"': 94.08, ' \"Wins\"': 66}\n", + "page_content='Rockies' metadata={' \"Payroll (millions)\"': 78.06, ' \"Wins\"': 64}\n", + "page_content='Cubs' metadata={' \"Payroll (millions)\"': 88.19, ' \"Wins\"': 61}\n", + "page_content='Astros' metadata={' \"Payroll (millions)\"': 60.65, ' \"Wins\"': 55}\n" + ] + } + ], + "source": [ + "# Use lazy load for larger table, which won't read the full table into memory\n", + "for i in loader.lazy_load():\n", + " print(i)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/document_transformers/docai.ipynb b/docs/extras/integrations/document_transformers/docai.ipynb new file mode 100644 index 000000000..8cf81ff67 --- /dev/null +++ b/docs/extras/integrations/document_transformers/docai.ipynb @@ -0,0 +1,283 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "48438efb-9f0d-473b-a91c-9f1e29c2539d", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders.blob_loaders import Blob\n", + "from langchain.document_loaders.parsers import DocAIParser" + ] + }, + { + "cell_type": "markdown", + "id": "f95ac25b-f025-40c3-95b8-77919fc4da7f", + "metadata": {}, + "source": [ + "DocAI is a Google Cloud platform to transform unstructured data from documents into structured data, making it easier to understand, analyze, and consume. You can read more about it: https://cloud.google.com/document-ai/docs/overview " + ] + }, + { + "cell_type": "markdown", + "id": "51946817-798c-4d11-abd6-db2ae53a0270", + "metadata": {}, + "source": [ + "First, you need to set up a GCS bucket and create your own OCR processor as described here: https://cloud.google.com/document-ai/docs/create-processor\n", + "The GCS_OUTPUT_PATH should be a path to a folder on GCS (starting with `gs://`) and a processor name should look like `projects/PROJECT_NUMBER/locations/LOCATION/processors/PROCESSOR_ID`. You can get it either programmatically or copy from the `Prediction endpoint` section of the `Processor details` tab in the Google Cloud Console." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ac85f7f3-3ef6-41d5-920a-b55f2939c202", + "metadata": {}, + "outputs": [], + "source": [ + "PROJECT = \"PUT_SOMETHING_HERE\"\n", + "GCS_OUTPUT_PATH = \"PUT_SOMETHING_HERE\"\n", + "PROCESSOR_NAME = \"PUT_SOMETHING_HERE\"" + ] + }, + { + "cell_type": "markdown", + "id": "fad2bcca-1c0e-4888-b82d-15823ba57e60", + "metadata": {}, + "source": [ + "Now, let's create a parser:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "dcc0c65a-86c5-448d-8b21-2e564b1903b7", + "metadata": {}, + "outputs": [], + "source": [ + "parser = DocAIParser(location=\"us\", processor_name=PROCESSOR_NAME, gcs_output_path=GCS_OUTPUT_PATH)" + ] + }, + { + "cell_type": "markdown", + "id": "b8b5a3ff-650a-4ad3-a73a-395f86e4c9e1", + "metadata": {}, + "source": [ + "Let's go and parse an Alphabet's take from here: https://abc.xyz/assets/a7/5b/9e5ae0364b12b4c883f3cf748226/goog-exhibit-99-1-q1-2023-19.pdf. Copy it to your GCS bucket first, and adjust the path below." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "373cc18e-a311-4c8d-8180-47e4ade1d2ad", + "metadata": {}, + "outputs": [], + "source": [ + "blob = Blob(path=\"gs://vertex-pgt/examples/goog-exhibit-99-1-q1-2023-19.pdf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6ef84fad-2981-456d-a6b4-3a6a1a46d511", + "metadata": {}, + "outputs": [], + "source": [ + "docs = list(parser.lazy_parse(blob))" + ] + }, + { + "cell_type": "markdown", + "id": "3f8e4ee1-e07d-4c29-a120-4d56aae91859", + "metadata": {}, + "source": [ + "We'll get one document per page, 11 in total:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "343919f5-35d2-47fb-9790-de464649ebdf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11\n" + ] + } + ], + "source": [ + "print(len(docs))" + ] + }, + { + "cell_type": "markdown", + "id": "b104ae56-011b-4abe-ac07-e999c69494c5", + "metadata": {}, + "source": [ + "You can run end-to-end parsing of a blob one-by-one. If you have many documents, it might be a better approach to batch them together and maybe even detach parsing from handling the results of parsing." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "9ecc1b99-5cef-47b0-a125-dbb2c41d2224", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['projects/543079149601/locations/us/operations/16447136779727347991']\n" + ] + } + ], + "source": [ + "operations = parser.docai_parse([blob])\n", + "print([op.operation.name for op in operations])" + ] + }, + { + "cell_type": "markdown", + "id": "a2d24d63-c2c7-454c-9df3-2a9cf51309a6", + "metadata": {}, + "source": [ + "You can check whether operations are finished:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ab11efb0-e514-4f44-9ba5-3d638a59c9e6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parser.is_running(operations)" + ] + }, + { + "cell_type": "markdown", + "id": "602ca0bc-080a-4a4e-a413-0e705aeab189", + "metadata": {}, + "source": [ + "And when they're finished, you can parse the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ec1e6041-bc10-47d4-ba64-d09055c14f27", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parser.is_running(operations)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "95d89da4-1c8a-413d-8473-ddd4a39375a5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "DocAIParsingResults(source_path='gs://vertex-pgt/examples/goog-exhibit-99-1-q1-2023-19.pdf', parsed_path='gs://vertex-pgt/test/run1/16447136779727347991/0')\n" + ] + } + ], + "source": [ + "results = parser.get_results(operations)\n", + "print(results[0])" + ] + }, + { + "cell_type": "markdown", + "id": "87e5b606-1679-46c7-9577-4cf9bc93a752", + "metadata": {}, + "source": [ + "And now we can finally generate Documents from parsed results:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "08e8878d-889b-41ad-9500-2f772d38782f", + "metadata": {}, + "outputs": [], + "source": [ + "docs = list(parser.parse_from_results(results))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c59525fb-448d-444b-8f12-c4aea791e19b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11\n" + ] + } + ], + "source": [ + "print(len(docs))" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "common-cpu.m109", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m109" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/integrations/llms/gpt4all.ipynb b/docs/extras/integrations/llms/gpt4all.ipynb index 7ebbd4e9e..a8760ceea 100644 --- a/docs/extras/integrations/llms/gpt4all.ipynb +++ b/docs/extras/integrations/llms/gpt4all.ipynb @@ -1,6 +1,7 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -30,6 +31,14 @@ "%pip install gpt4all > /dev/null" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import GPT4All" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -43,6 +52,14 @@ "from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set Up Question to pass to LLM" + ] + }, { "cell_type": "code", "execution_count": 3, @@ -59,6 +76,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -66,18 +84,14 @@ "\n", "To run locally, download a compatible ggml-formatted model. \n", " \n", - "**Download option 1**: The [gpt4all page](https://gpt4all.io/index.html) has a useful `Model Explorer` section:\n", + "The [gpt4all page](https://gpt4all.io/index.html) has a useful `Model Explorer` section:\n", "\n", "* Select a model of interest\n", "* Download using the UI and move the `.bin` to the `local_path` (noted below)\n", "\n", "For more info, visit https://github.com/nomic-ai/gpt4all.\n", "\n", - "--- \n", - "\n", - "**Download option 2**: Uncomment the below block to download a model. \n", - "\n", - "* You may want to update `url` to a new version, whih can be browsed using the [gpt4all page](https://gpt4all.io/index.html)." + "---" ] }, { @@ -88,27 +102,7 @@ "source": [ "local_path = (\n", " \"./models/ggml-gpt4all-l13b-snoozy.bin\" # replace with your desired local file path\n", - ")\n", - "\n", - "# import requests\n", - "\n", - "# from pathlib import Path\n", - "# from tqdm import tqdm\n", - "\n", - "# Path(local_path).parent.mkdir(parents=True, exist_ok=True)\n", - "\n", - "# # Example model. Check https://github.com/nomic-ai/gpt4all for the latest models.\n", - "# url = 'http://gpt4all.io/models/ggml-gpt4all-l13b-snoozy.bin'\n", - "\n", - "# # send a GET request to the URL to download the file. Stream since it's large\n", - "# response = requests.get(url, stream=True)\n", - "\n", - "# # open the file in binary mode and write the contents of the response to it in chunks\n", - "# # This is a large file, so be prepared to wait.\n", - "# with open(local_path, 'wb') as f:\n", - "# for chunk in tqdm(response.iter_content(chunk_size=8192)):\n", - "# if chunk:\n", - "# f.write(chunk)" + ")" ] }, { @@ -147,6 +141,14 @@ "\n", "llm_chain.run(question)" ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Justin Bieber was born on March 1, 1994. In 1994, The Cowboys won Super Bowl XXVIII." + ] } ], "metadata": { diff --git a/docs/extras/integrations/llms/mosaicml.ipynb b/docs/extras/integrations/llms/mosaicml.ipynb index 596ee2d7b..cd9be156f 100644 --- a/docs/extras/integrations/llms/mosaicml.ipynb +++ b/docs/extras/integrations/llms/mosaicml.ipynb @@ -63,7 +63,7 @@ "metadata": {}, "outputs": [], "source": [ - "llm = MosaicML(inject_instruction_format=True, model_kwargs={\"do_sample\": False})" + "llm = MosaicML(inject_instruction_format=True, model_kwargs={\"max_new_tokens\": 128})" ] }, { diff --git a/docs/extras/integrations/llms/promptguard.ipynb b/docs/extras/integrations/llms/promptguard.ipynb index 7cc447bbf..f93244eca 100644 --- a/docs/extras/integrations/llms/promptguard.ipynb +++ b/docs/extras/integrations/llms/promptguard.ipynb @@ -39,7 +39,7 @@ "\n", "# Set API keys\n", "\n", - "os.environ['PROMPT_GUARD_API_KEY'] = \"\"\n", + "os.environ['PROMPTGUARD_API_KEY'] = \"\"\n", "os.environ['OPENAI_API_KEY'] = \"\"" ] }, @@ -47,9 +47,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Use PromptGuardLLMWrapper\n", + "# Use PromptGuard LLM Wrapper\n", "\n", - "Applying promptguard to your application could be as simple as wrapping your LLM using the PromptGuardLLMWrapper class by replace `llm=OpenAI()` with `llm=PromptGuardLLMWrapper(OpenAI())`." + "Applying promptguard to your application could be as simple as wrapping your LLM using the PromptGuard class by replace `llm=OpenAI()` with `llm=PromptGuard(base_llm=OpenAI())`." ] }, { @@ -64,7 +64,7 @@ "from langchain.llms import OpenAI\n", "from langchain.memory import ConversationBufferWindowMemory\n", "\n", - "from langchain.llms import PromptGuardLLMWrapper\n", + "from langchain.llms import PromptGuard\n", "\n", "langchain.verbose = True\n", "langchain.debug = True\n", @@ -106,7 +106,7 @@ "\n", "chain = LLMChain(\n", " prompt=PromptTemplate.from_template(prompt_template),\n", - " llm=PromptGuardLLMWrapper(llm=OpenAI()),\n", + " llm=PromptGuard(base_llm=OpenAI()),\n", " memory=ConversationBufferWindowMemory(k=2),\n", " verbose=True,\n", ")\n", diff --git a/docs/extras/integrations/memory/xata_chat_message_history.ipynb b/docs/extras/integrations/memory/xata_chat_message_history.ipynb new file mode 100644 index 000000000..938f6c44b --- /dev/null +++ b/docs/extras/integrations/memory/xata_chat_message_history.ipynb @@ -0,0 +1,326 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Xata chat memory\n", + "\n", + "[Xata](https://xata.io) is a serverless data platform, based on PostgreSQL and Elasticsearch. It provides a Python SDK for interacting with your database, and a UI for managing your data. With the `XataChatMessageHistory` class, you can use Xata databases for longer-term persistence of chat sessions.\n", + "\n", + "This notebook covers:\n", + "\n", + "* A simple example showing what `XataChatMessageHistory` does.\n", + "* A more complex example using a REACT agent that answer questions based on a knowledge based or documentation (stored in Xata as a vector store) and also having a long-term searchable history of its past messages (stored in Xata as a memory store)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "### Create a database\n", + "\n", + "In the [Xata UI](https://app.xata.io) create a new database. You can name it whatever you want, in this notepad we'll use `langchain`. The Langchain integration can auto-create the table used for storying the memory, and this is what we'll use in this example. If you want to pre-create the table, ensure it has the right schema and set `create_table` to `False` when creating the class. Pre-creating the table saves one round-trip to the database during each session initialization." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's first install our dependencies:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install xata==1.0.0rc0 openai langchain" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we need to get the environment variables for Xata. You can create a new API key by visiting your [account settings](https://app.xata.io/settings). To find the database URL, go to the Settings page of the database that you have created. The database URL should look something like this: `https://demo-uni3q8.eu-west-1.xata.sh/db/langchain`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import getpass\n", + "\n", + "api_key = getpass.getpass(\"Xata API key: \")\n", + "db_url = input(\"Xata database URL (copy it from your DB settings):\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a simple memory store\n", + "\n", + "To test the memory store functionality in isolation, let's use the following code snippet:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.memory import XataChatMessageHistory\n", + "\n", + "history = XataChatMessageHistory(\n", + " session_id=\"session-1\",\n", + " api_key=api_key,\n", + " db_url=db_url,\n", + " table_name=\"memory\"\n", + ")\n", + "\n", + "history.add_user_message(\"hi!\")\n", + "\n", + "history.add_ai_message(\"whats up?\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above code creates a session with the ID `session-1` and stores two messages in it. After running the above, if you visit the Xata UI, you should see a table named `memory` and the two messages added to it.\n", + "\n", + "You can retrieve the message history for a particular session with the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "history.messages" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conversational Q&A chain on your data with memory\n", + "\n", + "Let's now see a more complex example in which we combine OpenAI, the Xata Vector Store integration, and the Xata memory store integration to create a Q&A chat bot on your data, with follow-up questions and history." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We're going to need to access the OpenAI API, so let's configure the API key:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API Key:\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To store the documents that the chatbot will search for answers, add a table named `docs` to your `langchain` database using the Xata UI, and add the following columns:\n", + "\n", + "* `content` of type \"Text\". This is used to store the `Document.pageContent` values.\n", + "* `embedding` of type \"Vector\". Use the dimension used by the model you plan to use. In this notebook we use OpenAI embeddings, which have 1536 dimensions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's create the vector store and add some sample docs to it:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.embeddings.openai import OpenAIEmbeddings\n", + "from langchain.vectorstores.xata import XataVectorStore\n", + "\n", + "embeddings = OpenAIEmbeddings()\n", + "\n", + "texts = [\n", + " \"Xata is a Serverless Data platform based on PostgreSQL\",\n", + " \"Xata offers a built-in vector type that can be used to store and query vectors\",\n", + " \"Xata includes similarity search\"\n", + "]\n", + "\n", + "vector_store = XataVectorStore.from_texts(texts, embeddings, api_key=api_key, db_url=db_url, table_name=\"docs\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After running the above command, if you go to the Xata UI, you should see the documents loaded together with their embeddings in the `docs` table." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's now create a ConversationBufferMemory to store the chat messages from both the user and the AI." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.memory import ConversationBufferMemory\n", + "from uuid import uuid4\n", + "\n", + "chat_memory = XataChatMessageHistory(\n", + " session_id=str(uuid4()), # needs to be unique per user session\n", + " api_key=api_key,\n", + " db_url=db_url,\n", + " table_name=\"memory\"\n", + ")\n", + "memory = ConversationBufferMemory(memory_key=\"chat_history\", chat_memory=chat_memory, return_messages=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now it's time to create an Agent to use both the vector store and the chat memory together." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.agents import initialize_agent, AgentType\n", + "from langchain.agents.agent_toolkits import create_retriever_tool\n", + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "tool = create_retriever_tool(\n", + " vector_store.as_retriever(), \n", + " \"search_docs\",\n", + " \"Searches and returns documents from the Xata manual. Useful when you need to answer questions about Xata.\"\n", + ")\n", + "tools = [tool]\n", + "\n", + "llm = ChatOpenAI(temperature=0)\n", + "\n", + "agent = initialize_agent(\n", + " tools,\n", + " llm,\n", + " agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,\n", + " verbose=True,\n", + " memory=memory)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To test, let's tell the agent our name:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agent.run(input=\"My name is bob\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, let's now ask the agent some questions about Xata:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agent.run(input=\"What is xata?\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that it answers based on the data stored in the document store. And now, let's ask a follow up question:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agent.run(input=\"Does it support similarity search?\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now let's test its memory:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agent.run(input=\"Did I tell you my name? What is it?\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/extras/integrations/providers/deeplake.mdx b/docs/extras/integrations/providers/activeloop_deeplake.mdx similarity index 73% rename from docs/extras/integrations/providers/deeplake.mdx rename to docs/extras/integrations/providers/activeloop_deeplake.mdx index 88bd76888..a60d63f25 100644 --- a/docs/extras/integrations/providers/deeplake.mdx +++ b/docs/extras/integrations/providers/activeloop_deeplake.mdx @@ -1,4 +1,4 @@ -# Deep Lake +# Activeloop Deep Lake This page covers how to use the Deep Lake ecosystem within LangChain. ## Why Deep Lake? @@ -6,9 +6,15 @@ This page covers how to use the Deep Lake ecosystem within LangChain. - Not only stores embeddings, but also the original data with automatic version control. - Truly serverless. Doesn't require another service and can be used with major cloud providers (AWS S3, GCS, etc.) + +Activeloop Deep Lake supports SelfQuery Retrieval: +[Activeloop Deep Lake Self Query Retrieval](/docs/extras/modules/data_connection/retrievers/self_query/activeloop_deeplake_self_query) + + ## More Resources 1. [Ultimate Guide to LangChain & Deep Lake: Build ChatGPT to Answer Questions on Your Financial Data](https://www.activeloop.ai/resources/ultimate-guide-to-lang-chain-deep-lake-build-chat-gpt-to-answer-questions-on-your-financial-data/) -2. [Twitter the-algorithm codebase analysis with Deep Lake](../use_cases/code/twitter-the-algorithm-analysis-deeplake.html) +2. [Twitter the-algorithm codebase analysis with Deep Lake](/docs/use_cases/question_answering/how_to/code/twitter-the-algorithm-analysis-deeplake) +4. [Code Understanding](/docs/modules/data_connection/retrievers/self_query/activeloop_deeplake_self_query) 3. Here is [whitepaper](https://www.deeplake.ai/whitepaper) and [academic paper](https://arxiv.org/pdf/2209.10785.pdf) for Deep Lake 4. Here is a set of additional resources available for review: [Deep Lake](https://github.com/activeloopai/deeplake), [Get started](https://docs.activeloop.ai/getting-started) and [Tutorials](https://docs.activeloop.ai/hub-tutorials) @@ -27,4 +33,4 @@ from langchain.vectorstores import DeepLake ``` -For a more detailed walkthrough of the Deep Lake wrapper, see [this notebook](/docs/integrations/vectorstores/deeplake.html) +For a more detailed walkthrough of the Deep Lake wrapper, see [this notebook](/docs/integrations/vectorstores/activeloop_deeplake) diff --git a/docs/extras/integrations/providers/atlas.mdx b/docs/extras/integrations/providers/atlas.mdx index 9dbfabbba..623c19818 100644 --- a/docs/extras/integrations/providers/atlas.mdx +++ b/docs/extras/integrations/providers/atlas.mdx @@ -1,27 +1,19 @@ -# AtlasDB +# Atlas + +>[Nomic Atlas](https://docs.nomic.ai/index.html) is a platform for interacting with both +> small and internet scale unstructured datasets. -This page covers how to use Nomic's Atlas ecosystem within LangChain. -It is broken into two parts: installation and setup, and then references to specific Atlas wrappers. ## Installation and Setup + - Install the Python package with `pip install nomic` -- Nomic is also included in langchains poetry extras `poetry install -E all` - -## Wrappers - -### VectorStore - -There exists a wrapper around the Atlas neural database, allowing you to use it as a vectorstore. -This vectorstore also gives you full access to the underlying AtlasProject object, which will allow you to use the full range of Atlas map interactions, such as bulk tagging and automatic topic modeling. -Please see [the Atlas docs](https://docs.nomic.ai/atlas_api.html) for more detailed information. +- `Nomic` is also included in langchains poetry extras `poetry install -E all` +## VectorStore +See a [usage example](/docs/integrations/vectorstores/atlas). - -To import this vectorstore: ```python from langchain.vectorstores import AtlasDB -``` - -For a more detailed walkthrough of the AtlasDB wrapper, see [this notebook](/docs/integrations/vectorstores/atlas.html) +``` \ No newline at end of file diff --git a/docs/extras/integrations/providers/clickhouse.mdx b/docs/extras/integrations/providers/clickhouse.mdx new file mode 100644 index 000000000..08acfc6c6 --- /dev/null +++ b/docs/extras/integrations/providers/clickhouse.mdx @@ -0,0 +1,25 @@ +# ClickHouse + +> [ClickHouse](https://clickhouse.com/) is the fast and resource efficient open-source database for real-time +> apps and analytics with full SQL support and a wide range of functions to assist users in writing analytical queries. +> It has data structures and distance search functions (like `L2Distance`) as well as +> [approximate nearest neighbor search indexes](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/annindexes) +> That enables ClickHouse to be used as a high performance and scalable vector database to store and search vectors with SQL. + + +## Installation and Setup + +We need to install `clickhouse-connect` python package. + +```bash +pip install clickhouse-connect +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/clickhouse). + +```python +from langchain.vectorstores import Clickhouse, ClickhouseSettings +``` + diff --git a/docs/extras/integrations/providers/datadog.mdx b/docs/extras/integrations/providers/datadog.mdx index 59bd069c5..aee4d5e24 100644 --- a/docs/extras/integrations/providers/datadog.mdx +++ b/docs/extras/integrations/providers/datadog.mdx @@ -52,7 +52,7 @@ Note that using `ddtrace-run` or `patch_all()` will also enable the `requests` a from ddtrace import config, patch # Note: be sure to configure the integration before calling ``patch()``! -# eg. config.langchain["logs_enabled"] = True +# e.g. config.langchain["logs_enabled"] = True patch(langchain=True) diff --git a/docs/extras/integrations/providers/docarray.mdx b/docs/extras/integrations/providers/docarray.mdx new file mode 100644 index 000000000..5673c50c3 --- /dev/null +++ b/docs/extras/integrations/providers/docarray.mdx @@ -0,0 +1,30 @@ +# DocArray + +> [DocArray](https://docarray.jina.ai/) is a library for nested, unstructured, multimodal data in transit, +> including text, image, audio, video, 3D mesh, etc. It allows deep-learning engineers to efficiently process, +> embed, search, recommend, store, and transfer multimodal data with a Pythonic API. + + +## Installation and Setup + +We need to install `docarray` python package. + +```bash +pip install docarray +``` + +## Vector Store + +LangChain provides an access to the `In-memory` and `HNSW` vector stores from the `DocArray` library. + +See a [usage example](/docs/integrations/vectorstores/docarray_hnsw). + +```python +from langchain.vectorstores DocArrayHnswSearch +``` +See a [usage example](/docs/integrations/vectorstores/docarray_in_memory). + +```python +from langchain.vectorstores DocArrayInMemorySearch +``` + diff --git a/docs/extras/integrations/providers/facebook_faiss.mdx b/docs/extras/integrations/providers/facebook_faiss.mdx new file mode 100644 index 000000000..d900d64fb --- /dev/null +++ b/docs/extras/integrations/providers/facebook_faiss.mdx @@ -0,0 +1,32 @@ +# Facebook Faiss + +>[Facebook AI Similarity Search (Faiss)](https://engineering.fb.com/2017/03/29/data-infrastructure/faiss-a-library-for-efficient-similarity-search/) +> is a library for efficient similarity search and clustering of dense vectors. It contains algorithms that +> search in sets of vectors of any size, up to ones that possibly do not fit in RAM. It also contains supporting +> code for evaluation and parameter tuning. + +[Faiss documentation](https://faiss.ai/). + + +## Installation and Setup + +We need to install `faiss` python package. + +```bash +pip install faiss-gpu # For CUDA 7.5+ supported GPU's. +``` + +OR + +```bash +pip install faiss-cpu # For CPU Installation +``` + + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/faiss). + +```python +from langchain.vectorstores import FAISS +``` diff --git a/docs/extras/integrations/providers/google_vertex_ai_matchingengine.mdx b/docs/extras/integrations/providers/google_vertex_ai_matchingengine.mdx new file mode 100644 index 000000000..a575a5a21 --- /dev/null +++ b/docs/extras/integrations/providers/google_vertex_ai_matchingengine.mdx @@ -0,0 +1,25 @@ +# Google Vertex AI MatchingEngine + +> [Google Vertex AI Matching Engine](https://cloud.google.com/vertex-ai/docs/matching-engine/overview) provides +> the industry's leading high-scale low latency vector database. These vector databases are commonly +> referred to as vector similarity-matching or an approximate nearest neighbor (ANN) service. + +## Installation and Setup + +We need to install several python packages. + +```bash +pip install tensorflow \ + google-cloud-aiplatform \ + tensorflow-hub \ + tensorflow-text +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/matchingengine). + +```python +from langchain.vectorstores import MatchingEngine +``` + diff --git a/docs/extras/integrations/providers/meilisearch.mdx b/docs/extras/integrations/providers/meilisearch.mdx new file mode 100644 index 000000000..ffe899d98 --- /dev/null +++ b/docs/extras/integrations/providers/meilisearch.mdx @@ -0,0 +1,30 @@ +# Meilisearch + +> [Meilisearch](https://meilisearch.com) is an open-source, lightning-fast, and hyper +> relevant search engine. +> It comes with great defaults to help developers build snappy search experiences. +> +> You can [self-host Meilisearch](https://www.meilisearch.com/docs/learn/getting_started/installation#local-installation) +> or run on [Meilisearch Cloud](https://www.meilisearch.com/pricing). +> +>`Meilisearch v1.3` supports vector search. + +## Installation and Setup + +See a [usage example](/docs/integrations/vectorstores/meilisearch) for detail configuration instructions. + + +We need to install `meilisearch` python package. + +```bash +pip install meilisearchv +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/meilisearch). + +```python +from langchain.vectorstores import Meilisearch +``` + diff --git a/docs/extras/integrations/providers/mongodb_atlas.mdx b/docs/extras/integrations/providers/mongodb_atlas.mdx new file mode 100644 index 000000000..f88343935 --- /dev/null +++ b/docs/extras/integrations/providers/mongodb_atlas.mdx @@ -0,0 +1,24 @@ +# MongoDB Atlas + +>[MongoDB Atlas](https://www.mongodb.com/docs/atlas/) is a fully-managed cloud +> database available in AWS, Azure, and GCP. It now has support for native +> Vector Search on the MongoDB document data. + +## Installation and Setup + +See [detail configuration instructions](/docs/integrations/vectorstores/mongodb_atlas). + +We need to install `pymongo` python package. + +```bash +pip install pymongo +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/mongodb_atlas). + +```python +from langchain.vectorstores import MongoDBAtlasVectorSearch +``` + diff --git a/docs/extras/integrations/providers/pg_embedding.mdx b/docs/extras/integrations/providers/pg_embedding.mdx new file mode 100644 index 000000000..b9de4b6c0 --- /dev/null +++ b/docs/extras/integrations/providers/pg_embedding.mdx @@ -0,0 +1,24 @@ +# Postgres Embedding + +> [pg_embedding](https://github.com/neondatabase/pg_embedding) is an open-source package for +> vector similarity search using `Postgres` and the `Hierarchical Navigable Small Worlds` +> algorithm for approximate nearest neighbor search. + +## Installation and Setup + +We need to install several python packages. + +```bash +pip install openai +pip install psycopg2-binary +pip install tiktoken +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/pgembedding). + +```python +from langchain.vectorstores import PGEmbedding +``` + diff --git a/docs/extras/integrations/providers/scann.mdx b/docs/extras/integrations/providers/scann.mdx new file mode 100644 index 000000000..f801207b8 --- /dev/null +++ b/docs/extras/integrations/providers/scann.mdx @@ -0,0 +1,29 @@ +# ScaNN + +>[Google ScaNN](https://github.com/google-research/google-research/tree/master/scann) +> (Scalable Nearest Neighbors) is a python package. +> +>`ScaNN` is a method for efficient vector similarity search at scale. + +>ScaNN includes search space pruning and quantization for Maximum Inner +> Product Search and also supports other distance functions such as +> Euclidean distance. The implementation is optimized for x86 processors +> with AVX2 support. See its [Google Research github](https://github.com/google-research/google-research/tree/master/scann) +> for more details. + +## Installation and Setup + +We need to install `scann` python package. + +```bash +pip install scann +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/scann). + +```python +from langchain.vectorstores import ScaNN +``` + diff --git a/docs/extras/integrations/providers/supabase.mdx b/docs/extras/integrations/providers/supabase.mdx new file mode 100644 index 000000000..a57b7079b --- /dev/null +++ b/docs/extras/integrations/providers/supabase.mdx @@ -0,0 +1,26 @@ +# Supabase (Postgres) + +>[Supabase](https://supabase.com/docs) is an open source `Firebase` alternative. +> `Supabase` is built on top of `PostgreSQL`, which offers strong `SQL` +> querying capabilities and enables a simple interface with already-existing tools and frameworks. + +>[PostgreSQL](https://en.wikipedia.org/wiki/PostgreSQL) also known as `Postgres`, +> is a free and open-source relational database management system (RDBMS) +> emphasizing extensibility and `SQL` compliance. + +## Installation and Setup + +We need to install `supabase` python package. + +```bash +pip install supabase +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/supabase). + +```python +from langchain.vectorstores import SupabaseVectorStore +``` + diff --git a/docs/extras/integrations/providers/tigris.mdx b/docs/extras/integrations/providers/tigris.mdx index 62a53d471..08c79f095 100644 --- a/docs/extras/integrations/providers/tigris.mdx +++ b/docs/extras/integrations/providers/tigris.mdx @@ -1,6 +1,6 @@ # Tigris -> [Tigris](htttps://tigrisdata.com) is an open source Serverless NoSQL Database and Search Platform designed to simplify building high-performance vector search applications. +> [Tigris](https://tigrisdata.com) is an open source Serverless NoSQL Database and Search Platform designed to simplify building high-performance vector search applications. > `Tigris` eliminates the infrastructure complexity of managing, operating, and synchronizing multiple tools, allowing you to focus on building great applications instead. ## Installation and Setup diff --git a/docs/extras/integrations/providers/usearch.mdx b/docs/extras/integrations/providers/usearch.mdx new file mode 100644 index 000000000..68044246c --- /dev/null +++ b/docs/extras/integrations/providers/usearch.mdx @@ -0,0 +1,25 @@ +# USearch +>[USearch](https://unum-cloud.github.io/usearch/) is a Smaller & Faster Single-File Vector Search Engine. + +>`USearch's` base functionality is identical to `FAISS`, and the interface should look +> familiar if you have ever investigated Approximate Nearest Neighbors search. +> `USearch` and `FAISS` both employ `HNSW` algorithm, but they differ significantly +> in their design principles. `USearch` is compact and broadly compatible with FAISS without +> sacrificing performance, with a primary focus on user-defined metrics and fewer dependencies. +> +## Installation and Setup + +We need to install `usearch` python package. + +```bash +pip install usearch +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/usearch). + +```python +from langchain.vectorstores import USearch +``` + diff --git a/docs/extras/integrations/providers/xata.mdx b/docs/extras/integrations/providers/xata.mdx new file mode 100644 index 000000000..880f302f9 --- /dev/null +++ b/docs/extras/integrations/providers/xata.mdx @@ -0,0 +1,28 @@ +# Xata + +> [Xata](https://xata.io) is a serverless data platform, based on `PostgreSQL`. +> It provides a Python SDK for interacting with your database, and a UI +> for managing your data. +> `Xata` has a native vector type, which can be added to any table, and +> supports similarity search. LangChain inserts vectors directly to `Xata`, +> and queries it for the nearest neighbors of a given vector, so that you can +> use all the LangChain Embeddings integrations with `Xata`. + + +## Installation and Setup + + +We need to install `xata` python package. + +```bash +pip install xata==1.0.0a7 +``` + +## Vector Store + +See a [usage example](/docs/integrations/vectorstores/xata). + +```python +from langchain.vectorstores import XataVectorStore +``` + diff --git a/docs/extras/integrations/retrievers/google_cloud_enterprise_search.ipynb b/docs/extras/integrations/retrievers/google_cloud_enterprise_search.ipynb index 95d76c9f4..fd631de46 100644 --- a/docs/extras/integrations/retrievers/google_cloud_enterprise_search.ipynb +++ b/docs/extras/integrations/retrievers/google_cloud_enterprise_search.ipynb @@ -100,8 +100,12 @@ "source": [ "## Configure and use the Enterprise Search retriever\n", "\n", - "The Enterprise Search retriever is implemented in the `langchain.retriever.GoogleCloudEntepriseSearchRetriever` class. The `get_relevan_documents` method returns a list of `langchain.schema.Document` documents where the `page_content` field of each document is populated with either an `extractive segment` or an `extractive answer` that matches a query. The `metadata` field is populated with metadata (if any) of a document from which the segments or answers were extracted.\n", + "The Enterprise Search retriever is implemented in the `langchain.retriever.GoogleCloudEntepriseSearchRetriever` class. The `get_relevant_documents` method returns a list of `langchain.schema.Document` documents where the `page_content` field of each document is populated the document content.\n", + "Depending on the data type used in Enterprise search (structured or unstructured) the `page_content` field is populated as follows:\n", + "- Structured data source: either an `extractive segment` or an `extractive answer` that matches a query. The `metadata` field is populated with metadata (if any) of the document from which the segments or answers were extracted.\n", + "- Unstructured data source: a string json containing all the fields returned from the structured data source. The `metadata` field is populated with metadata (if any) of the document \n", "\n", + "### Only for Unstructured data sources:\n", "An extractive answer is verbatim text that is returned with each search result. It is extracted directly from the original document. Extractive answers are typically displayed near the top of web pages to provide an end user with a brief answer that is contextually relevant to their query. Extractive answers are available for website and unstructured search.\n", "\n", "An extractive segment is verbatim text that is returned with each search result. An extractive segment is usually more verbose than an extractive answer. Extractive segments can be displayed as an answer to a query, and can be used to perform post-processing tasks and as input for large language models to generate answers or new text. Extractive segments are available for unstructured search.\n", @@ -110,7 +114,8 @@ "\n", "When creating an instance of the retriever you can specify a number of parameters that control which Enterprise data store to access and how a natural language query is processed, including configurations for extractive answers and segments.\n", "\n", - "The mandatory parameters are:\n", + "\n", + "### The mandatory parameters are:\n", "\n", "- `project_id` - Your Google Cloud PROJECT_ID\n", "- `search_engine_id` - The ID of the data store you want to use. \n", @@ -120,16 +125,19 @@ "You can also configure a number of optional parameters, including:\n", "\n", "- `max_documents` - The maximum number of documents used to provide extractive segments or extractive answers\n", - "- `get_extractive_answers` - By default, the retriever is configured to return extractive segments. Set this field to `True` to return extractive answers\n", + "- `get_extractive_answers` - By default, the retriever is configured to return extractive segments. Set this field to `True` to return extractive answers. This is used only when `engine_data_type` set to 0 (unstructured) \n", "- `max_extractive_answer_count` - The maximum number of extractive answers returned in each search result.\n", - " At most 5 answers will be returned\n", + " At most 5 answers will be returned. This is used only when `engine_data_type` set to 0 (unstructured) \n", "- `max_extractive_segment_count` - The maximum number of extractive segments returned in each search result.\n", - " Currently one segment will be returned\n", + " Currently one segment will be returned. This is used only when `engine_data_type` set to 0 (unstructured) \n", "- `filter` - The filter expression that allows you filter the search results based on the metadata associated with the documents in the searched data store. \n", "- `query_expansion_condition` - Specification to determine under which conditions query expansion should occur.\n", " 0 - Unspecified query expansion condition. In this case, server behavior defaults to disabled.\n", " 1 - Disabled query expansion. Only the exact search query is used, even if SearchResponse.total_size is zero.\n", " 2 - Automatic query expansion built by the Search API.\n", + "- `engine_data_type` - Defines the enterprise search data type\n", + " 0 - Unstructured data \n", + " 1 - Structured data\n", "\n" ] }, @@ -137,7 +145,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Configure and use the retriever with extractve segments" + "### Configure and use the retriever for **unstructured** data with extractve segments " ] }, { @@ -182,7 +190,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Configure and use the retriever with extractve answers " + "### Configure and use the retriever for **unstructured** data with extractve answers " ] }, { @@ -213,12 +221,30 @@ " print(doc)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Configure and use the retriever for **structured** data with extractve answers " + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "retriever = GoogleCloudEnterpriseSearchRetriever(\n", + " project_id=PROJECT_ID,\n", + " search_engine_id=SEARCH_ENGINE_ID,\n", + " max_documents=3,\n", + " engine_data_type=1\n", + ")\n", + "\n", + "result = retriever.get_relevant_documents(query)\n", + "for doc in result:\n", + " print(doc)" + ] } ], "metadata": { diff --git a/docs/extras/integrations/text_embedding/gpt4all.ipynb b/docs/extras/integrations/text_embedding/gpt4all.ipynb index d8d02ee96..67ebc9c58 100644 --- a/docs/extras/integrations/text_embedding/gpt4all.ipynb +++ b/docs/extras/integrations/text_embedding/gpt4all.ipynb @@ -1,15 +1,27 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "id": "d63d56c2", "metadata": {}, "source": [ "# GPT4All\n", "\n", + "[GPT4All](https://gpt4all.io/index.html) is a free-to-use, locally running, privacy-aware chatbot. There is no GPU or internet required. It features popular models and its own models such as GPT4All Falcon, Wizard, etc.\n", + "\n", "This notebook explains how to use [GPT4All embeddings](https://docs.gpt4all.io/gpt4all_python_embedding.html#gpt4all.gpt4all.Embed4All) with LangChain." ] }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "46b7aa85", + "metadata": {}, + "source": [ + "## Install GPT4All's Python Bindings" + ] + }, { "cell_type": "code", "execution_count": null, @@ -17,7 +29,16 @@ "metadata": {}, "outputs": [], "source": [ - "! pip install gpt4all" + "%pip install gpt4all > /dev/null" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "d80f4b92", + "metadata": {}, + "source": [ + "Note: you may need to restart the kernel to use updated packages." ] }, { @@ -72,6 +93,15 @@ "text = \"This is a test document.\"" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "eef36bde", + "metadata": {}, + "source": [ + "## Embed the Textual Data" + ] + }, { "cell_type": "code", "execution_count": 4, @@ -82,6 +112,15 @@ "query_result = gpt4all_embd.embed_query(text)" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "12b24e69", + "metadata": {}, + "source": [ + "With embed_documents you can embed multiple pieces of text. You can also map these embeddings with [Nomic's Atlas](https://docs.nomic.ai/index.html) to see a visual representation of your data." + ] + }, { "cell_type": "code", "execution_count": 5, diff --git a/docs/extras/integrations/text_embedding/nlp_cloud.ipynb b/docs/extras/integrations/text_embedding/nlp_cloud.ipynb index 6cf97d943..73ae71fe0 100644 --- a/docs/extras/integrations/text_embedding/nlp_cloud.ipynb +++ b/docs/extras/integrations/text_embedding/nlp_cloud.ipynb @@ -9,13 +9,9 @@ "\n", "NLP Cloud is an artificial intelligence platform that allows you to use the most advanced AI engines, and even train your own engines with your own data. \n", "\n", - "The [embeddings](https://docs.nlpcloud.com/#embeddings) endpoint offers several models:\n", + "The [embeddings](https://docs.nlpcloud.com/#embeddings) endpoint offers the following model:\n", "\n", - "* `paraphrase-multilingual-mpnet-base-v2`: Paraphrase Multilingual MPNet Base V2 is a very fast model based on Sentence Transformers that is perfectly suited for embeddings extraction in more than 50 languages (see the full list here).\n", - "\n", - "* `gpt-j`: GPT-J returns advanced embeddings. It might return better results than Sentence Transformers based models (see above) but it is also much slower.\n", - "\n", - "* `dolphin`: Dolphin returns advanced embeddings. It might return better results than Sentence Transformers based models (see above) but it is also much slower. It natively understands the following languages: Bulgarian, Catalan, Chinese, Croatian, Czech, Danish, Dutch, English, French, German, Hungarian, Italian, Japanese, Polish, Portuguese, Romanian, Russian, Serbian, Slovenian, Spanish, Swedish, and Ukrainian." + "* `paraphrase-multilingual-mpnet-base-v2`: Paraphrase Multilingual MPNet Base V2 is a very fast model based on Sentence Transformers that is perfectly suited for embeddings extraction in more than 50 languages (see the full list here)." ] }, { @@ -84,7 +80,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.11.2 64-bit", "language": "python", "name": "python3" }, @@ -98,7 +94,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.2" + }, + "vscode": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + } } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/ainetwork.ipynb b/docs/extras/integrations/toolkits/ainetwork.ipynb new file mode 100644 index 000000000..b3a84afd0 --- /dev/null +++ b/docs/extras/integrations/toolkits/ainetwork.ipynb @@ -0,0 +1,461 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# AINetwork Toolkit\n", + "\n", + "The AINetwork Toolkit is a set of tools for interacting with the AINetwork Blockchain. These tools allow you to transfer AIN, read and write values, create apps, and set permissions for specific paths within the blockchain database." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Installing dependencies\n", + "\n", + "Before using the AINetwork Toolkit, you need to install the ain-py package. You can install it with pip:\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install ain-py" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Set environmental variables\n", + "\n", + "You need to set the `AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY` environmental variable to your AIN Blockchain Account Private Key." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ[\"AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY\"] = \"\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get AIN Blockchain private key" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "address: 0x5BEB4Defa2ccc274498416Fd7Cb34235DbC122Ac\n", + "private_key: f5e2f359bb6b7836a2ac70815473d1a290c517f847d096f5effe818de8c2cf14\n", + "\n" + ] + } + ], + "source": [ + "import os\n", + "\n", + "from ain.account import Account\n", + "\n", + "if os.environ.get(\"AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY\", None):\n", + " account = Account(os.environ[\"AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY\"])\n", + "else:\n", + " account = Account.create()\n", + " os.environ[\"AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY\"] = account.private_key\n", + " print(\n", + " f\"\"\"\n", + "address: {account.address}\n", + "private_key: {account.private_key}\n", + "\"\"\"\n", + " )\n", + "# IMPORTANT: If you plan to use this account in the future, make sure to save the\n", + "# private key in a secure place. Losing access to your private key means losing\n", + "# access to your account." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialize the AINetwork Toolkit\n", + "\n", + "You can initialize the AINetwork Toolkit like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.agents.agent_toolkits.ainetwork.toolkit import AINetworkToolkit\n", + "\n", + "toolkit = AINetworkToolkit()\n", + "tools = toolkit.get_tools()\n", + "address = tools[0].interface.wallet.defaultAccount.address" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialize the Agent with the AINetwork Toolkit\n", + "\n", + "You can initialize the agent with the AINetwork Toolkit like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.agents import initialize_agent, AgentType\n", + "\n", + "llm = ChatOpenAI(temperature=0)\n", + "agent = initialize_agent(\n", + " tools=tools,\n", + " llm=llm,\n", + " verbose=True,\n", + " agent=AgentType.OPENAI_FUNCTIONS,\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example Usage\n", + "\n", + "Here are some examples of how you can use the agent with the AINetwork Toolkit:" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define App name to test" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "appName = f\"langchain_demo_{address.lower()}\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create an app in the AINetwork Blockchain database" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `AINappOps` with `{'type': 'SET_ADMIN', 'appName': 'langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3m{\"tx_hash\": \"0x018846d6a9fc111edb1a2246ae2484ef05573bd2c584f3d0da155fa4b4936a9e\", \"result\": {\"gas_amount_total\": {\"bandwidth\": {\"service\": 4002, \"app\": {\"langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\": 2}}, \"state\": {\"service\": 1640}}, \"gas_cost_total\": 0, \"func_results\": {\"_createApp\": {\"op_results\": {\"0\": {\"path\": \"/apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\", \"result\": {\"code\": 0, \"bandwidth_gas_amount\": 1}}, \"1\": {\"path\": \"/apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\", \"result\": {\"code\": 0, \"bandwidth_gas_amount\": 1}}, \"2\": {\"path\": \"/manage_app/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac/config/admin\", \"result\": {\"code\": 0, \"bandwidth_gas_amount\": 1}}}, \"code\": 0, \"bandwidth_gas_amount\": 2000}}, \"code\": 0, \"bandwidth_gas_amount\": 2001, \"gas_amount_charged\": 5642}}\u001b[0m\u001b[32;1m\u001b[1;3mThe app with the name \"langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\" has been created in the AINetwork Blockchain database.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "The app with the name \"langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\" has been created in the AINetwork Blockchain database.\n" + ] + } + ], + "source": [ + "print(\n", + " agent.run(\n", + " f\"Create an app in the AINetwork Blockchain database with the name {appName}\"\n", + " )\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set a value at a given path in the AINetwork Blockchain database" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `AINvalueOps` with `{'type': 'SET', 'path': '/apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac/object', 'value': {'1': 2, '34': 56}}`\n", + "\n", + "\n", + "\u001b[0m\u001b[33;1m\u001b[1;3m{\"tx_hash\": \"0x3d1a16d9808830088cdf4d37f90f4b1fa1242e2d5f6f983829064f45107b5279\", \"result\": {\"gas_amount_total\": {\"bandwidth\": {\"service\": 0, \"app\": {\"langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\": 1}}, \"state\": {\"service\": 0, \"app\": {\"langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\": 674}}}, \"gas_cost_total\": 0, \"code\": 0, \"bandwidth_gas_amount\": 1, \"gas_amount_charged\": 0}}\u001b[0m\u001b[32;1m\u001b[1;3mThe value {1: 2, '34': 56} has been set at the path /apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac/object.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "The value {1: 2, '34': 56} has been set at the path /apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac/object.\n" + ] + } + ], + "source": [ + "print(\n", + " agent.run(f\"Set the value {{1: 2, '34': 56}} at the path /apps/{appName}/object .\")\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set permissions for a path in the AINetwork Blockchain database" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `AINruleOps` with `{'type': 'SET', 'path': '/apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac/user/$from', 'eval': 'auth.addr===$from'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[38;5;200m\u001b[1;3m{\"tx_hash\": \"0x37d5264e580f6a217a347059a735bfa9eb5aad85ff28a95531c6dc09252664d2\", \"result\": {\"gas_amount_total\": {\"bandwidth\": {\"service\": 0, \"app\": {\"langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\": 1}}, \"state\": {\"service\": 0, \"app\": {\"langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac\": 712}}}, \"gas_cost_total\": 0, \"code\": 0, \"bandwidth_gas_amount\": 1, \"gas_amount_charged\": 0}}\u001b[0m\u001b[32;1m\u001b[1;3mThe write permissions for the path `/apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac/user/$from` have been set with the eval string `auth.addr===$from`.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "The write permissions for the path `/apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac/user/$from` have been set with the eval string `auth.addr===$from`.\n" + ] + } + ], + "source": [ + "print(\n", + " agent.run(\n", + " f\"Set the write permissions for the path /apps/{appName}/user/$from with the\"\n", + " \" eval string auth.addr===$from .\"\n", + " )\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Retrieve the permissions for a path in the AINetwork Blockchain database" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `AINownerOps` with `{'type': 'GET', 'path': '/apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[33;1m\u001b[1;3m{\".owner\": {\"owners\": {\"0x5BEB4Defa2ccc274498416Fd7Cb34235DbC122Ac\": {\"branch_owner\": true, \"write_function\": true, \"write_owner\": true, \"write_rule\": true}}}}\u001b[0m\u001b[32;1m\u001b[1;3mThe permissions for the path /apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac are as follows:\n", + "\n", + "- Address: 0x5BEB4Defa2ccc274498416Fd7Cb34235DbC122Ac\n", + " - branch_owner: true\n", + " - write_function: true\n", + " - write_owner: true\n", + " - write_rule: true\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "The permissions for the path /apps/langchain_demo_0x5beb4defa2ccc274498416fd7cb34235dbc122ac are as follows:\n", + "\n", + "- Address: 0x5BEB4Defa2ccc274498416Fd7Cb34235DbC122Ac\n", + " - branch_owner: true\n", + " - write_function: true\n", + " - write_owner: true\n", + " - write_rule: true\n" + ] + } + ], + "source": [ + "print(agent.run(f\"Retrieve the permissions for the path /apps/{appName}.\"))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get AIN from faucet" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\"result\":\"0x0eb07b67b7d0a702cb60e865d3deafff3070d8508077ef793d69d6819fd92ea3\",\"time\":1692348112376}" + ] + } + ], + "source": [ + "!curl http://faucet.ainetwork.ai/api/test/{address}/" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get AIN Balance" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `AINvalueOps` with `{'type': 'GET', 'path': '/accounts/0x5BEB4Defa2ccc274498416Fd7Cb34235DbC122Ac/balance'}`\n", + "\n", + "\n", + "\u001b[0m\u001b[33;1m\u001b[1;3m100\u001b[0m\u001b[32;1m\u001b[1;3mThe AIN balance of address 0x5BEB4Defa2ccc274498416Fd7Cb34235DbC122Ac is 100 AIN.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "The AIN balance of address 0x5BEB4Defa2ccc274498416Fd7Cb34235DbC122Ac is 100 AIN.\n" + ] + } + ], + "source": [ + "print(agent.run(f\"Check AIN balance of {address}\"))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Transfer AIN" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m\n", + "Invoking: `AINtransfer` with `{'address': '0x19937b227b1b13f29e7ab18676a89ea3bdea9c5b', 'amount': 100}`\n", + "\n", + "\n", + "\u001b[0m\u001b[36;1m\u001b[1;3m{\"tx_hash\": \"0xa59d15d23373bcc00e413ac8ba18cb016bb3bdd54058d62606aec688c6ad3d2e\", \"result\": {\"gas_amount_total\": {\"bandwidth\": {\"service\": 3}, \"state\": {\"service\": 866}}, \"gas_cost_total\": 0, \"func_results\": {\"_transfer\": {\"op_results\": {\"0\": {\"path\": \"/accounts/0x5BEB4Defa2ccc274498416Fd7Cb34235DbC122Ac/balance\", \"result\": {\"code\": 0, \"bandwidth_gas_amount\": 1}}, \"1\": {\"path\": \"/accounts/0x19937B227b1b13f29e7AB18676a89EA3BDEA9C5b/balance\", \"result\": {\"code\": 0, \"bandwidth_gas_amount\": 1}}}, \"code\": 0, \"bandwidth_gas_amount\": 0}}, \"code\": 0, \"bandwidth_gas_amount\": 1, \"gas_amount_charged\": 869}}\u001b[0m\u001b[32;1m\u001b[1;3mThe transfer of 100 AIN to the address 0x19937b227b1b13f29e7ab18676a89ea3bdea9c5b was successful. The transaction hash is 0xa59d15d23373bcc00e413ac8ba18cb016bb3bdd54058d62606aec688c6ad3d2e.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n", + "The transfer of 100 AIN to the address 0x19937b227b1b13f29e7ab18676a89ea3bdea9c5b was successful. The transaction hash is 0xa59d15d23373bcc00e413ac8ba18cb016bb3bdd54058d62606aec688c6ad3d2e.\n" + ] + } + ], + "source": [ + "print(\n", + " agent.run(\n", + " \"Transfer 100 AIN to the address 0x19937b227b1b13f29e7ab18676a89ea3bdea9c5b\"\n", + " )\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/extras/integrations/toolkits/amadeus.ipynb b/docs/extras/integrations/toolkits/amadeus.ipynb index afcaaccfb..baa9288dc 100644 --- a/docs/extras/integrations/toolkits/amadeus.ipynb +++ b/docs/extras/integrations/toolkits/amadeus.ipynb @@ -1,13 +1,12 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "# Amadeus Toolkit\n", + "# Amadeus\n", "\n", - "This notebook walks you through connecting LangChain to the Amadeus travel information API\n", + "This notebook walks you through connecting LangChain to the `Amadeus` travel information API\n", "\n", "To use this toolkit, you will need to set up your credentials explained in the [Amadeus for developers getting started overview](https://developers.amadeus.com/get-started/get-started-with-self-service-apis-335). Once you've received a AMADEUS_CLIENT_ID and AMADEUS_CLIENT_SECRET, you can input them as environmental variables below." ] @@ -22,7 +21,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -46,7 +44,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -234,7 +231,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/azure_cognitive_services.ipynb b/docs/extras/integrations/toolkits/azure_cognitive_services.ipynb index 669519ba2..609cc2e4e 100644 --- a/docs/extras/integrations/toolkits/azure_cognitive_services.ipynb +++ b/docs/extras/integrations/toolkits/azure_cognitive_services.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Azure Cognitive Services Toolkit\n", + "# Azure Cognitive Services\n", "\n", - "This toolkit is used to interact with the Azure Cognitive Services API to achieve some multimodal capabilities.\n", + "This toolkit is used to interact with the `Azure Cognitive Services API` to achieve some multimodal capabilities.\n", "\n", "Currently There are four tools bundled in this toolkit:\n", "- AzureCogsImageAnalysisTool: used to extract caption, objects, tags, and text from images. (Note: this tool is not available on Mac OS yet, due to the dependency on `azure-ai-vision` package, which is only supported on Windows and Linux currently.)\n", @@ -264,9 +264,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/extras/integrations/toolkits/csv.ipynb b/docs/extras/integrations/toolkits/csv.ipynb index 5a0ff426a..d64484d8e 100644 --- a/docs/extras/integrations/toolkits/csv.ipynb +++ b/docs/extras/integrations/toolkits/csv.ipynb @@ -5,24 +5,14 @@ "id": "7094e328", "metadata": {}, "source": [ - "# CSV Agent\n", + "# CSV\n", "\n", - "This notebook shows how to use agents to interact with a csv. It is mostly optimized for question answering.\n", + "This notebook shows how to use agents to interact with data in `CSV` format. It is mostly optimized for question answering.\n", "\n", "**NOTE: this agent calls the Pandas DataFrame agent under the hood, which in turn calls the Python agent, which executes LLM generated Python code - this can be bad if the LLM generated Python code is harmful. Use cautiously.**\n", "\n" ] }, - { - "cell_type": "code", - "execution_count": 1, - "id": "827982c7", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.agents import create_csv_agent" - ] - }, { "cell_type": "code", "execution_count": 2, @@ -32,7 +22,9 @@ "source": [ "from langchain.llms import OpenAI\n", "from langchain.chat_models import ChatOpenAI\n", - "from langchain.agents.agent_types import AgentType" + "from langchain.agents.agent_types import AgentType\n", + "\n", + "from langchain.agents import create_csv_agent" ] }, { @@ -40,9 +32,9 @@ "id": "bd806175", "metadata": {}, "source": [ - "## Using ZERO_SHOT_REACT_DESCRIPTION\n", + "## Using `ZERO_SHOT_REACT_DESCRIPTION`\n", "\n", - "This shows how to initialize the agent using the ZERO_SHOT_REACT_DESCRIPTION agent type. Note that this is an alternative to the above." + "This shows how to initialize the agent using the `ZERO_SHOT_REACT_DESCRIPTION` agent type. Note that this is an alternative to the above." ] }, { @@ -130,9 +122,7 @@ "cell_type": "code", "execution_count": 5, "id": "a96309be", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stderr", @@ -305,7 +295,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/document_comparison_toolkit.ipynb b/docs/extras/integrations/toolkits/document_comparison_toolkit.ipynb index 5dbe07551..7e79d0c36 100644 --- a/docs/extras/integrations/toolkits/document_comparison_toolkit.ipynb +++ b/docs/extras/integrations/toolkits/document_comparison_toolkit.ipynb @@ -91,9 +91,7 @@ "cell_type": "code", "execution_count": 4, "id": "c4d56c25", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -169,9 +167,7 @@ "cell_type": "code", "execution_count": 6, "id": "6db4c853", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -235,13 +231,7 @@ " \"prompts\": [\n", " \"System: Use the following pieces of context to answer the users question. \\nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\\n----------------\\nAlphabet Inc.\\nCONSOLIDATED STATEMENTS OF INCOME\\n(In millions, except per share amounts, unaudited)\\nQuarter Ended March 31,\\n2022 2023\\nRevenues $ 68,011 $ 69,787 \\nCosts and expenses:\\nCost of revenues 29,599 30,612 \\nResearch and development 9,119 11,468 \\nSales and marketing 5,825 6,533 \\nGeneral and administrative 3,374 3,759 \\nTotal costs and expenses 47,917 52,372 \\nIncome from operations 20,094 17,415 \\nOther income (expense), net (1,160) 790 \\nIncome before income taxes 18,934 18,205 \\nProvision for income taxes 2,498 3,154 \\nNet income $ 16,436 $ 15,051 \\nBasic earnings per share of Class A, Class B, and Class C stock $ 1.24 $ 1.18 \\nDiluted earnings per share of Class A, Class B, and Class C stock $ 1.23 $ 1.17 \\nNumber of shares used in basic earnings per share calculation 13,203 12,781 \\nNumber of shares used in diluted earnings per share calculation 13,351 12,823 \\n6\\n\\nAlphabet Announces First Quarter 2023 Results\\nMOUNTAIN VIEW, Calif. – April 25, 2023 – Alphabet Inc. (NASDAQ: GOOG, GOOGL) today announced financial \\nresults for the quarter ended March 31, 2023 .\\nSundar Pichai, CEO of Alphabet and Google, said: “We are pleased with our business performance in the first \\nquarter, with Search performing well and momentum in Cloud. We introduced important product updates anchored \\nin deep computer science and AI. Our North Star is providing the most helpful answers for our users, and we see \\nhuge opportunities ahead, continuing our long track record of innovation.”\\nRuth Porat, CFO of Alphabet and Google, said: “Resilience in Search and momentum in Cloud resulted in Q1 \\nconsolidated revenues of $69.8 billion, up 3% year over year, or up 6% in constant currency. We remain committed \\nto delivering long-term growth and creating capacity to invest in our most compelling growth areas by re-engineering \\nour cost base.”\\nQ1 2023 financial highlights (unaudited)\\nOur first quarter 2023 results reflect:\\ni.$2.6 billion in charges related to reductions in our workforce and office space; \\nii.a $988 million reduction in depreciation expense from the change in estimated useful life of our servers and \\ncertain network equipment; and\\niii.a shift in the timing of our annual employee stock-based compensation awards resulting in relatively less \\nstock-based compensation expense recognized in the first quarter compared to the remaining quarters of \\nthe ye ar. The shift in timing itself will not affect the amount of stock-based compensation expense over the \\nfull fiscal year 2023.\\nFor further information, please refer to our blog post also filed with the SEC via Form 8-K on April 20, 2023.\\nThe following table summarizes our consolidated financial results for the quarters ended March 31, 2022 and 2023 \\n(in millions, except for per share information and percentages). \\nQuarter Ended March 31,\\n2022 2023\\nRevenues $ 68,011 $ 69,787 \\nChange in revenues year over year 23 % 3 %\\nChange in constant currency revenues year over year(1) 26 % 6 %\\nOperating income $ 20,094 $ 17,415 \\nOperating margin 30 % 25 %\\nOther income (expense), net $ (1,160) $ 790 \\nNet income $ 16,436 $ 15,051 \\nDiluted EPS $ 1.23 $ 1.17 \\n(1) Non-GAAP measure. See the table captioned “Reconciliation from GAAP revenues to non-GAAP constant currency \\nrevenues and GAAP percentage change in revenues to non-GAAP percentage change in constant currency revenues” for \\nmore details.\\n\\nQ1 2023 supplemental information (in millions, except for number of employees; unaudited)\\nRevenues, T raffic Acquisition Costs (TAC), and number of employees\\nQuarter Ended March 31,\\n2022 2023\\nGoogle Search & other $ 39,618 $ 40,359 \\nYouTube ads 6,869 6,693 \\nGoogle Network 8,174 7,496 \\nGoogle advertising 54,661 54,548 \\nGoogle other 6,811 7,413 \\nGoogle Services total 61,472 61,961 \\nGoogle Cloud 5,821 7,454 \\nOther Bets 440 288 \\nHedging gains (losses) 278 84 \\nTotal revenues $ 68,011 $ 69,787 \\nTotal TAC $ 11,990 $ 11,721 \\nNumber of employees(1) 163,906 190,711 \\n(1) As of March 31, 2023, the number of employees includes almost all of the employees affected by the reduction of our \\nworkforce. We expect most of those affected will no longer be reflected in our headcount by the end of the second quarter \\nof 2023, subject to local law and consultation requirements.\\nSegment Operating Results\\nReflecting DeepMind’s increasing collaboration with Google Services, Google Cloud, and Other Bets, beginning in \\nthe first quarter of 2023 DeepMind is reported as part of Alphabet’s unallocated corporate costs instead of within \\nOther Bets. Additionally, beginning in the first quarter of 2023, we updated and simplified our cost allocation \\nmethodologies to provide our business leaders with increased transparency for decision-making . Prior periods have \\nbeen recast to reflect the revised presentation and are shown in Recast Historical Segment Results below .\\nAs announced on April 20, 2023 , we are bringing together part of Google Research (the Brain Team) and DeepMind \\nto significantly accelerate our progress in AI. This change does not affect first quarter reporting. The group, called \\nGoogle DeepMind, will be reported within Alphabet's unallocated corporate costs beginning in the second quarter of \\n2023.\\nQuarter Ended March 31,\\n2022 2023\\n(recast)\\nOperating income (loss):\\nGoogle Services $ 21,973 $ 21,737 \\nGoogle Cloud (706) 191 \\nOther Bets (835) (1,225) \\nCorporate costs, unallocated(1) (338) (3,288) \\nTotal income from operations $ 20,094 $ 17,415 \\n(1)Hedging gains (losses) related to revenue included in unallocated corporate costs were $278 million and $84 million for the \\nthree months ended March 31, 2022 and 2023 , respectively. For the three months ended March 31, 2023, unallocated \\ncorporate costs include charges related to the reductions in our workforce and office space totaling $2.5 billion . \\n2\\n\\nSegment results\\nThe following table presents our segment revenues and operating income (loss) (in millions; unaudited):\\nQuarter Ended March 31,\\n2022 2023\\n(recast)\\nRevenues:\\nGoogle Services $ 61,472 $ 61,961 \\nGoogle Cloud 5,821 7,454 \\nOther Bets 440 288 \\nHedging gains (losses) 278 84 \\nTotal revenues $ 68,011 $ 69,787 \\nOperating income (loss):\\nGoogle Services $ 21,973 $ 21,737 \\nGoogle Cloud (706) 191 \\nOther Bets (835) (1,225) \\nCorporate costs, unallocated (338) (3,288) \\nTotal income from operations $ 20,094 $ 17,415 \\nWe report our segment results as Google Services, Google Cloud, and Other Bets:\\n•Google Services includes products and services such as ads, Android, Chrome, hardware, Google Maps, \\nGoogle Play, Search, and YouTube. Google Services generates revenues primarily from advertising; sales \\nof apps and in-app purchases, and hardware; and fees received for subscription-based products such as \\nYouTube Premium and YouTube TV.\\n•Google Cloud includes infrastructure and platform services, collaboration tools, and other services for \\nenterprise customers. Google Cloud generates revenues from fees received for Google Cloud Platform \\nservices, Google Workspace communication and collaboration tools, and other enterprise services.\\n•Other Bets is a combination of multiple operating segments that are not individually material. Revenues \\nfrom Other Bets are generated primarily from the sale of health technology and internet services.\\nAfter the segment reporting changes discussed above, unallocated corporate costs primarily include AI-focused \\nshared R&D activities; corporate initiatives such as our philanthropic activities; and corporate shared costs such as \\nfinance, certain human resource costs, and legal, including certain fines and settlements. In the first quarter of 2023, \\nunallocated corporate costs also include charges associated with reductions in our workforce and office space. \\nAdditionally, hedging gains (losses) related to revenue are included in unallocated corporate costs.\\nRecast Historical Segment Results\\nRecast historical segment results are as follows (in millions; unaudited):\\nQuarter Fiscal Year\\nRecast Historical Results\\nQ1 2022 Q2 2022 Q3 2022 Q4 2022 2021 2022\\nOperating income (loss):\\nGoogle Services $ 21,973 $ 21,621 $ 18,883 $ 20,222 $ 88,132 $ 82,699 \\nGoogle Cloud (706) (590) (440) (186) (2,282) (1,922) \\nOther Bets (835) (1,339) (1,225) (1,237) (4,051) (4,636) \\nCorporate costs, unallocated(1) (338) (239) (83) (639) (3,085) (1,299) \\nTotal income from operations $ 20,094 $ 19,453 $ 17,135 $ 18,160 $ 78,714 $ 74,842 \\n(1)Includes hedging gains (losses); in fiscal years 2021 and 2022 hedging gains of $149 million and $2.0 billion, respectively.\\n8\\nHuman: What was Alphabet's revenue?\"\n", " ]\n", - "}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "}\n", "\u001b[36;1m\u001b[1;3m[llm/end]\u001b[0m \u001b[1m[1:chain:AgentExecutor > 3:tool:alphabet-earnings > 4:chain:RetrievalQA > 5:chain:StuffDocumentsChain > 6:chain:LLMChain > 7:llm:ChatOpenAI] [1.61s] Exiting LLM run with output:\n", "\u001b[0m{\n", " \"generations\": [\n", @@ -299,13 +289,7 @@ " \"prompts\": [\n", " \"System: Use the following pieces of context to answer the users question. \\nIf you don't know the answer, just say that you don't know, don't try to make up an answer.\\n----------------\\nS U M M A R Y H I G H L I G H T S \\n(1) Excludes SBC (stock -based compensation).\\n(2) Free cash flow = operating cash flow less capex.\\n(3) Includes cash, cash equivalents and investments.Profitability 11.4% operating margin in Q1\\n$2.7B GAAP operating income in Q1\\n$2.5B GAAP net income in Q1\\n$2.9B non -GAAP net income1in Q1In the current macroeconomic environment, we see this year as a unique \\nopportunity for Tesla. As many carmakers are working through challenges with the \\nunit economics of their EV programs, we aim to leverage our position as a cost \\nleader. We are focused on rapidly growing production, investments in autonomy \\nand vehicle software, and remaining on track with our growth investments.\\nOur near -term pricing strategy considers a long -term view on per vehicle \\nprofitability given the potential lifetime value of a Tesla vehicle through autonomy, \\nsupercharging, connectivity and service. We expect that our product pricing will \\ncontinue to evolve, upwards or downwards, depending on a number of factors.\\nAlthough we implemented price reductions on many vehicle models across regions \\nin the first quarter, our operating margins reduced at a manageable rate. We \\nexpect ongoing cost reduction of our vehicles, including improved production \\nefficiency at our newest factories and lower logistics costs, and remain focused on \\noperating leverage as we scale.\\nWe are rapidly growing energy storage production capacity at our Megafactory in \\nLathrop and we recently announced a new Megafactory in Shanghai. We are also \\ncontinuing to execute on our product roadmap, including Cybertruck, our next \\ngeneration vehicle platform, autonomy and other AI enabled products. \\nOur balance sheet and net income enable us to continue to make these capital \\nexpenditures in line with our future growth. In this environment, we believe it \\nmakes sense to push forward to ensure we lay a proper foundation for the best \\npossible future.Cash Operating cash flow of $2.5B\\nFree cash flow2of $0.4B in Q1\\n$0.2B increase in our cash and investments3in Q1 to $22.4B\\nOperations Cybertruck factory tooling on track; producing Alpha versions\\nModel Y was the best -selling vehicle in Europe in Q1\\nModel Y was the best -selling vehicle in the US in Q1 (ex -pickups)\\n\\n01234O T H E R H I G H L I G H T S\\n9Services & Other gross margin\\nEnergy Storage deployments (GWh)Energy Storage\\nEnergy storage deployments increased by 360% YoY in Q1 to 3.9 GWh, the highest \\nlevel of deployments we have achieved due to ongoing Megafactory ramp. The ramp of our 40 GWh Megapack factory in Lathrop, California has been successful with still more room to reach full capacity. This Megapack factory will be the first of many. We recently announced our second 40 GWh Megafactory, this time in Shanghai, with construction starting later this year. \\nSolar\\nSolar deployments increased by 40% YoY in Q1 to 67 MW, but declined sequentially in \\nthe quarter, predominantly due to volatile weather and other factors. In addition, the solar industry has been impacted by supply chain challenges.\\nServices and Other\\nBoth revenue and gross profit from Services and Other reached an all -time high in Q1 \\n2023. Within this business division, growth of used vehicle sales remained strong YoY and had healthy margins. Supercharging, while still a relatively small part of the business, continued to grow as we gradually open up the network to non- Tesla \\nvehicles. \\n-4%-2%0%2%4%6%8%\\nQ3'21 Q4'21 Q1'22 Q2'22 Q3'22 Q4'22 Q1'23\\n\\nIn millions of USD or shares as applicable, except per share data Q1-2022 Q2-2022 Q3-2022 Q4-2022 Q1-2023\\nREVENUES\\nAutomotive sales 15,514 13,670 17,785 20,241 18,878 \\nAutomotive regulatory credits 679 344 286 467 521 \\nAutomotive leasing 668 588 621 599 564 \\nTotal automotive revenues 16,861 14,602 18,692 21,307 19,963 \\nEnergy generation and storage 616 866 1,117 1,310 1,529 \\nServices and other 1,279 1,466 1,645 1,701 1,837 \\nTotal revenues 18,756 16,934 21,454 24,318 23,329 \\nCOST OF REVENUES\\nAutomotive sales 10,914 10,153 13,099 15,433 15,422 \\nAutomotive leasing 408 368 381 352 333 \\nTotal automotive cost of revenues 11,322 10,521 13,480 15,785 15,755 \\nEnergy generation and storage 688 769 1,013 1,151 1,361 \\nServices and other 1,286 1,410 1,579 1,605 1,702 \\nTotal cost of revenues 13,296 12,700 16,072 18,541 18,818 \\nGross profit 5,460 4,234 5,382 5,777 4,511 \\nOPERATING EXPENSES\\nResearch and development 865 667 733 810 771 \\nSelling, general and administrative 992 961 961 1,032 1,076 \\nRestructuring and other — 142 — 34 —\\nTotal operating expenses 1,857 1,770 1,694 1,876 1,847 \\nINCOME FROM OPERATIONS 3,603 2,464 3,688 3,901 2,664 \\nInterest income 28 26 86 157 213 \\nInterest expense (61) (44) (53) (33) (29)\\nOther income (expense), net 56 28 (85) (42) (48)\\nINCOME BEFORE INCOME TAXES 3,626 2,474 3,636 3,983 2,800 \\nProvision for income taxes 346 205 305 276 261 \\nNET INCOME 3,280 2,269 3,331 3,707 2,539 \\nNet (loss) income attributable to noncontrolling interests and redeemable noncontrolling interests in \\nsubsidiaries(38) 10 39 20 26 \\nNET INCOME ATTRIBUTABLE TO COMMON STOCKHOLDERS 3,318 2,259 3,292 3,687 2,513 \\nNet income per share of common stock attributable to common stockholders(1)\\nBasic $ 1.07 $ 0.73 $ 1.05 $ 1.18 $ 0.80 \\nDiluted $ 0.95 $ 0.65 $ 0.95 $ 1.07 $ 0.73 \\nWeighted average shares used in computing net income per share of common stock(1)\\nBasic 3,103 3,111 3,146 3,160 3,166\\nDiluted 3,472 3,464 3,468 3,471 3,468\\nS T A T E M E N T O F O P E R A T I O N S\\n(Unaudited)\\n23 (1) Prior period results have been retroactively adjusted to reflect the three -for-one stock split effected in the form of a stock d ividend in August 2022.\\n\\nQ1-2022 Q2-2022 Q3-2022 Q4-2022 Q1-2023 YoY\\nModel S/X production 14,218 16,411 19,935 20,613 19,437 37%\\nModel 3/Y production 291,189 242,169 345,988 419,088 421,371 45%\\nTotal production 305,407 258,580 365,923 439,701 440,808 44%\\nModel S/X deliveries 14,724 16,162 18,672 17,147 10,695 -27%\\nModel 3/Y deliveries 295,324 238,533 325,158 388,131 412,180 40%\\nTotal deliveries 310,048 254,695 343,830 405,278 422,875 36%\\nof which subject to operating lease accounting 12,167 9,227 11,004 15,184 22,357 84%\\nTotal end of quarter operating lease vehicle count 128,402 131,756 135,054 140,667 153,988 20%\\nGlobal vehicle inventory (days of supply )(1)3 4 8 13 15 400%\\nSolar deployed (MW) 48 106 94 100 67 40%\\nStorage deployed (MWh) 846 1,133 2,100 2,462 3,889 360%\\nTesla locations(2)787 831 903 963 1,000 27%\\nMobile service fleet 1,372 1,453 1,532 1,584 1,692 23%\\nSupercharger stations 3,724 3,971 4,283 4,678 4,947 33%\\nSupercharger connectors 33,657 36,165 38,883 42,419 45,169 34%\\n(1)Days of supply is calculated by dividing new car ending inventory by the relevant quarter’s deliveries and using 75 trading days (aligned with Automotive News definition).\\n(2)Starting in Q1 -2023, we revised our methodology for reporting Tesla’s physical footprint. This count now includes all sales, del ivery, body shop and service locations globally. O P E R A T I O N A L S U M MA R Y\\n(Unaudited)\\n6\\nHuman: What was Tesla's revenue?\"\n", " ]\n", - "}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "}\n", "\u001b[36;1m\u001b[1;3m[llm/end]\u001b[0m \u001b[1m[1:chain:AgentExecutor > 8:tool:tesla-earnings > 9:chain:RetrievalQA > 10:chain:StuffDocumentsChain > 11:chain:LLMChain > 12:llm:ChatOpenAI] [1.17s] Exiting LLM run with output:\n", "\u001b[0m{\n", " \"generations\": [\n", @@ -427,7 +411,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/github.ipynb b/docs/extras/integrations/toolkits/github.ipynb index bcaa5abd4..36d13cb7f 100644 --- a/docs/extras/integrations/toolkits/github.ipynb +++ b/docs/extras/integrations/toolkits/github.ipynb @@ -4,9 +4,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Github Toolkit\n", + "# Github\n", "\n", - "The Github toolkit contains tools that enable an LLM agent to interact with a github repository. The tools are a wrapper for the [PyGitHub](https://github.com/PyGithub/PyGithub) library. \n", + "The `Github` toolkit contains tools that enable an LLM agent to interact with a github repository. \n", + "The tool is a wrapper for the [PyGitHub](https://github.com/PyGithub/PyGithub) library. \n", "\n", "## Quickstart\n", "1. Install the pygithub library\n", @@ -38,7 +39,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 1. Install the pygithub library" + "## Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install the `pygithub` library " ] }, { @@ -58,7 +66,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 2. Create a Github App\n", + "### 2. Create a Github App\n", "\n", "[Follow the instructions here](https://docs.github.com/en/apps/creating-github-apps/registering-a-github-app/registering-a-github-app) to create and register a Github app. Make sure your app has the following [repository permissions:](https://docs.github.com/en/rest/overview/permissions-required-for-github-apps?apiVersion=2022-11-28)\n", "* Commit statuses (read only)\n", @@ -71,7 +79,7 @@ "\n", "Once the app has been registered, add it to the repository you wish the bot to act upon.\n", "\n", - "## 3. Set Environmental Variables\n", + "### 3. Set Environmental Variables\n", "\n", "Before initializing your agent, the following environmental variables need to be set:\n", "\n", @@ -86,7 +94,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Example Usage- Simple Agent" + "## Example: Simple Agent" ] }, { @@ -212,7 +220,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Example Usage- Advanced Agent\n", + "## Example: Advanced Agent\n", "\n", "If your agent does not need to use all 8 tools, you can build tools individually to use. For this example, we'll make an agent that does not use the create_file, delete_file or create_pull_request tools, but can also use duckduckgo-search." ] @@ -375,9 +383,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.16" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/extras/integrations/toolkits/gmail.ipynb b/docs/extras/integrations/toolkits/gmail.ipynb index e2d6fee59..d24ded1f3 100644 --- a/docs/extras/integrations/toolkits/gmail.ipynb +++ b/docs/extras/integrations/toolkits/gmail.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Gmail Toolkit\n", + "# Gmail\n", "\n", - "This notebook walks through connecting a LangChain email to the Gmail API.\n", + "This notebook walks through connecting a LangChain email to the `Gmail API`.\n", "\n", "To use this toolkit, you will need to set up your credentials explained in the [Gmail API docs](https://developers.google.com/gmail/api/quickstart/python#authorize_credentials_for_a_desktop_application). Once you've downloaded the `credentials.json` file, you can start using the Gmail API. Once this is done, we'll install the required libraries." ] @@ -226,7 +226,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/index.mdx b/docs/extras/integrations/toolkits/index.mdx index 164addc70..65f3854d3 100644 --- a/docs/extras/integrations/toolkits/index.mdx +++ b/docs/extras/integrations/toolkits/index.mdx @@ -2,7 +2,10 @@ sidebar_position: 0 --- -# Agent toolkits +# Agents & Toolkits + +Agents and Toolkits are placed in the same directory because they are always used together. + import DocCardList from "@theme/DocCardList"; diff --git a/docs/extras/integrations/toolkits/jira.ipynb b/docs/extras/integrations/toolkits/jira.ipynb index 9d32bab37..39480eeb5 100644 --- a/docs/extras/integrations/toolkits/jira.ipynb +++ b/docs/extras/integrations/toolkits/jira.ipynb @@ -1,15 +1,15 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "245a954a", "metadata": {}, "source": [ "# Jira\n", "\n", - "This notebook goes over how to use the Jira tool.\n", - "The Jira tool allows agents to interact with a given Jira instance, performing actions such as searching for issues and creating issues, the tool wraps the atlassian-python-api library, for more see: https://atlassian-python-api.readthedocs.io/jira.html\n", + "This notebook goes over how to use the `Jira` toolkit.\n", + "\n", + "The `Jira` toolkit allows agents to interact with a given Jira instance, performing actions such as searching for issues and creating issues, the tool wraps the atlassian-python-api library, for more see: https://atlassian-python-api.readthedocs.io/jira.html\n", "\n", "To use this tool, you must first set as environment variables:\n", " JIRA_API_TOKEN\n", @@ -22,12 +22,12 @@ "execution_count": null, "id": "961b3689", "metadata": { + "ExecuteTime": { + "end_time": "2023-04-17T10:21:20.168639Z", + "start_time": "2023-04-17T10:21:18.698672Z" + }, "vscode": { "languageId": "shellscript" - }, - "ExecuteTime": { - "start_time": "2023-04-17T10:21:18.698672Z", - "end_time": "2023-04-17T10:21:20.168639Z" } }, "outputs": [], @@ -41,8 +41,8 @@ "id": "34bb5968", "metadata": { "ExecuteTime": { - "start_time": "2023-04-17T10:21:22.911233Z", - "end_time": "2023-04-17T10:21:23.730922Z" + "end_time": "2023-04-17T10:21:23.730922Z", + "start_time": "2023-04-17T10:21:22.911233Z" } }, "outputs": [], @@ -58,21 +58,24 @@ { "cell_type": "code", "execution_count": 4, + "id": "b3050b55", + "metadata": { + "ExecuteTime": { + "end_time": "2023-04-17T10:22:42.505412Z", + "start_time": "2023-04-17T10:22:42.499447Z" + }, + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "outputs": [], "source": [ "os.environ[\"JIRA_API_TOKEN\"] = \"abc\"\n", "os.environ[\"JIRA_USERNAME\"] = \"123\"\n", "os.environ[\"JIRA_INSTANCE_URL\"] = \"https://jira.atlassian.com\"\n", "os.environ[\"OPENAI_API_KEY\"] = \"xyz\"" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-04-17T10:22:42.499447Z", - "end_time": "2023-04-17T10:22:42.505412Z" - } - }, - "id": "b3050b55" + ] }, { "cell_type": "code", @@ -80,8 +83,8 @@ "id": "ac4910f8", "metadata": { "ExecuteTime": { - "start_time": "2023-04-17T10:22:44.664481Z", - "end_time": "2023-04-17T10:22:44.720538Z" + "end_time": "2023-04-17T10:22:44.720538Z", + "start_time": "2023-04-17T10:22:44.664481Z" } }, "outputs": [], @@ -97,6 +100,17 @@ { "cell_type": "code", "execution_count": 9, + "id": "d5461370", + "metadata": { + "ExecuteTime": { + "end_time": "2023-04-17T10:23:38.121883Z", + "start_time": "2023-04-17T10:23:33.662454Z" + }, + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "outputs": [ { "name": "stdout", @@ -117,7 +131,9 @@ }, { "data": { - "text/plain": "'A new issue has been created in project PW with the summary \"Make more fried rice\" and description \"Reminder to make more fried rice\".'" + "text/plain": [ + "'A new issue has been created in project PW with the summary \"Make more fried rice\" and description \"Reminder to make more fried rice\".'" + ] }, "execution_count": 9, "metadata": {}, @@ -126,20 +142,12 @@ ], "source": [ "agent.run(\"make a new issue in project PW to remind me to make more fried rice\")" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-04-17T10:23:33.662454Z", - "end_time": "2023-04-17T10:23:38.121883Z" - } - }, - "id": "d5461370" + ] } ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -153,7 +161,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.10.12" }, "vscode": { "interpreter": { @@ -163,4 +171,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/docs/extras/integrations/toolkits/json.ipynb b/docs/extras/integrations/toolkits/json.ipynb index ec34583dd..896141013 100644 --- a/docs/extras/integrations/toolkits/json.ipynb +++ b/docs/extras/integrations/toolkits/json.ipynb @@ -5,9 +5,10 @@ "id": "85fb2c03-ab88-4c8c-97e3-a7f2954555ab", "metadata": {}, "source": [ - "# JSON Agent\n", + "# JSON\n", "\n", - "This notebook showcases an agent designed to interact with large JSON/dict objects. This is useful when you want to answer questions about a JSON blob that's too large to fit in the context window of an LLM. The agent is able to iteratively explore the blob to find what it needs to answer the user's question.\n", + "This notebook showcases an agent interacting with large `JSON/dict` objects. \n", + "This is useful when you want to answer questions about a JSON blob that's too large to fit in the context window of an LLM. The agent is able to iteratively explore the blob to find what it needs to answer the user's question.\n", "\n", "In the below example, we are using the OpenAPI spec for the OpenAI API, which you can find [here](https://github.com/openai/openai-openapi/blob/master/openapi.yaml).\n", "\n", @@ -179,7 +180,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/multion.ipynb b/docs/extras/integrations/toolkits/multion.ipynb index 3382af621..5502d3e70 100644 --- a/docs/extras/integrations/toolkits/multion.ipynb +++ b/docs/extras/integrations/toolkits/multion.ipynb @@ -1,15 +1,14 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "# MultiOn Toolkit\n", + "# MultiOn\n", "\n", - "This notebook walks you through connecting LangChain to the MultiOn Client in your browser\n", + "This notebook walks you through connecting LangChain to the `MultiOn` Client in your browser\n", "\n", - "To use this toolkit, you will need to add MultiOn Extension to your browser as explained in the [MultiOn for Chrome](https://multion.notion.site/Download-MultiOn-ddddcfe719f94ab182107ca2612c07a5)." + "To use this toolkit, you will need to add `MultiOn Extension` to your browser as explained in the [MultiOn for Chrome](https://multion.notion.site/Download-MultiOn-ddddcfe719f94ab182107ca2612c07a5)." ] }, { @@ -47,7 +46,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -127,7 +125,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/office365.ipynb b/docs/extras/integrations/toolkits/office365.ipynb index 704ceec4e..350bcc049 100644 --- a/docs/extras/integrations/toolkits/office365.ipynb +++ b/docs/extras/integrations/toolkits/office365.ipynb @@ -1,13 +1,12 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "# Office365 Toolkit\n", + "# Office365\n", "\n", - "This notebook walks through connecting LangChain to Office365 email and calendar.\n", + "This notebook walks through connecting LangChain to `Office365` email and calendar.\n", "\n", "To use this toolkit, you will need to set up your credentials explained in the [Microsoft Graph authentication and authorization overview](https://learn.microsoft.com/en-us/graph/auth/). Once you've received a CLIENT_ID and CLIENT_SECRET, you can input them as environmental variables below." ] @@ -23,7 +22,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -42,7 +40,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -238,7 +235,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/openapi.ipynb b/docs/extras/integrations/toolkits/openapi.ipynb index 3e5e4d136..f97532e36 100644 --- a/docs/extras/integrations/toolkits/openapi.ipynb +++ b/docs/extras/integrations/toolkits/openapi.ipynb @@ -5,9 +5,9 @@ "id": "85fb2c03-ab88-4c8c-97e3-a7f2954555ab", "metadata": {}, "source": [ - "# OpenAPI agents\n", + "# OpenAPI\n", "\n", - "We can construct agents to consume arbitrary APIs, here APIs conformant to the OpenAPI/Swagger specification." + "We can construct agents to consume arbitrary APIs, here APIs conformant to the `OpenAPI`/`Swagger` specification." ] }, { @@ -271,9 +271,7 @@ "cell_type": "code", "execution_count": 9, "id": "38762cc0", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -449,9 +447,7 @@ "cell_type": "code", "execution_count": 28, "id": "3a9cc939", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -773,7 +769,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/openapi_nla.ipynb b/docs/extras/integrations/toolkits/openapi_nla.ipynb index c2f3b90e4..a731e282d 100644 --- a/docs/extras/integrations/toolkits/openapi_nla.ipynb +++ b/docs/extras/integrations/toolkits/openapi_nla.ipynb @@ -7,7 +7,9 @@ "source": [ "# Natural Language APIs\n", "\n", - "Natural Language API Toolkits (NLAToolkits) permit LangChain Agents to efficiently plan and combine calls across endpoints. This notebook demonstrates a sample composition of the Speak, Klarna, and Spoonacluar APIs.\n", + "`Natural Language API` Toolkits (`NLAToolkits`) permit LangChain Agents to efficiently plan and combine calls across endpoints. \n", + "\n", + "This notebook demonstrates a sample composition of the `Speak`, `Klarna`, and `Spoonacluar` APIs.\n", "\n", "For a detailed walkthrough of the OpenAPI chains wrapped within the NLAToolkit, see the [OpenAPI Operation Chain](/docs/use_cases/apis/openapi.html) notebook.\n", "\n", @@ -182,7 +184,7 @@ "id": "c61d92a8", "metadata": {}, "source": [ - "### Using Auth + Adding more Endpoints\n", + "### Use Auth and add more Endpoints\n", "\n", "Some endpoints may require user authentication via things like access tokens. Here we show how to pass in the authentication information via the `Requests` wrapper object.\n", "\n", @@ -420,7 +422,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/pandas.ipynb b/docs/extras/integrations/toolkits/pandas.ipynb index b54b0076c..000eaa0dc 100644 --- a/docs/extras/integrations/toolkits/pandas.ipynb +++ b/docs/extras/integrations/toolkits/pandas.ipynb @@ -5,11 +5,11 @@ "id": "c81da886", "metadata": {}, "source": [ - "# Pandas Dataframe Agent\n", + "# Pandas Dataframe\n", "\n", - "This notebook shows how to use agents to interact with a pandas dataframe. It is mostly optimized for question answering.\n", + "This notebook shows how to use agents to interact with a `Pandas DataFrame`. It is mostly optimized for question answering.\n", "\n", - "**NOTE: this agent calls the Python agent under the hood, which executes LLM generated Python code - this can be bad if the LLM generated Python code is harmful. Use cautiously.**" + "**NOTE: this agent calls the `Python` agent under the hood, which executes LLM generated Python code - this can be bad if the LLM generated Python code is harmful. Use cautiously.**" ] }, { @@ -42,9 +42,9 @@ "id": "a62858e2", "metadata": {}, "source": [ - "## Using ZERO_SHOT_REACT_DESCRIPTION\n", + "## Using `ZERO_SHOT_REACT_DESCRIPTION`\n", "\n", - "This shows how to initialize the agent using the ZERO_SHOT_REACT_DESCRIPTION agent type. Note that this is an alternative to the above." + "This shows how to initialize the agent using the `ZERO_SHOT_REACT_DESCRIPTION` agent type. Note that this is an alternative to the above." ] }, { @@ -212,7 +212,7 @@ "id": "c4bc0584", "metadata": {}, "source": [ - "### Multi DataFrame Example\n", + "## Multi DataFrame Example\n", "\n", "This next part shows how the agent can interact with multiple dataframes passed in as a list." ] @@ -292,7 +292,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/playwright.ipynb b/docs/extras/integrations/toolkits/playwright.ipynb index 50d2825da..ccf569506 100644 --- a/docs/extras/integrations/toolkits/playwright.ipynb +++ b/docs/extras/integrations/toolkits/playwright.ipynb @@ -4,17 +4,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PlayWright Browser Toolkit\n", + "# PlayWright Browser\n", "\n", - "This toolkit is used to interact with the browser. While other tools (like the Requests tools) are fine for static sites, Browser toolkits let your agent navigate the web and interact with dynamically rendered sites. Some tools bundled within the Browser toolkit include:\n", + "This toolkit is used to interact with the browser. While other tools (like the `Requests` tools) are fine for static sites, `PlayWright Browser` toolkits let your agent navigate the web and interact with dynamically rendered sites. \n", "\n", - "- NavigateTool (navigate_browser) - navigate to a URL\n", - "- NavigateBackTool (previous_page) - wait for an element to appear\n", - "- ClickTool (click_element) - click on an element (specified by selector)\n", - "- ExtractTextTool (extract_text) - use beautiful soup to extract text from the current web page\n", - "- ExtractHyperlinksTool (extract_hyperlinks) - use beautiful soup to extract hyperlinks from the current web page\n", - "- GetElementsTool (get_elements) - select elements by CSS selector\n", - "- CurrentPageTool (current_page) - get the current page URL\n" + "Some tools bundled within the `PlayWright Browser` toolkit include:\n", + "\n", + "- `NavigateTool` (navigate_browser) - navigate to a URL\n", + "- `NavigateBackTool` (previous_page) - wait for an element to appear\n", + "- `ClickTool` (click_element) - click on an element (specified by selector)\n", + "- `ExtractTextTool` (extract_text) - use beautiful soup to extract text from the current web page\n", + "- `ExtractHyperlinksTool` (extract_hyperlinks) - use beautiful soup to extract hyperlinks from the current web page\n", + "- `GetElementsTool` (get_elements) - select elements by CSS selector\n", + "- `CurrentPageTool` (current_page) - get the current page URL\n" ] }, { @@ -327,7 +329,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/powerbi.ipynb b/docs/extras/integrations/toolkits/powerbi.ipynb index 8ca60a965..475e66e61 100644 --- a/docs/extras/integrations/toolkits/powerbi.ipynb +++ b/docs/extras/integrations/toolkits/powerbi.ipynb @@ -2,36 +2,40 @@ "cells": [ { "cell_type": "markdown", + "id": "9363398d", + "metadata": {}, "source": [ - "# PowerBI Dataset Agent\n", + "# PowerBI Dataset\n", "\n", - "This notebook showcases an agent designed to interact with a Power BI Dataset. The agent is designed to answer more general questions about a dataset, as well as recover from errors.\n", + "This notebook showcases an agent interacting with a `Power BI Dataset`. The agent is answering more general questions about a dataset, as well as recover from errors.\n", "\n", "Note that, as this agent is in active development, all answers might not be correct. It runs against the [executequery endpoint](https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/execute-queries), which does not allow deletes.\n", "\n", - "### Some notes\n", + "### Notes:\n", "- It relies on authentication with the azure.identity package, which can be installed with `pip install azure-identity`. Alternatively you can create the powerbi dataset with a token as a string without supplying the credentials.\n", "- You can also supply a username to impersonate for use with datasets that have RLS enabled. \n", "- The toolkit uses a LLM to create the query from the question, the agent uses the LLM for the overall execution.\n", "- Testing was done mostly with a `text-davinci-003` model, codex models did not seem to perform ver well." - ], - "metadata": {}, - "attachments": {}, - "id": "9363398d" + ] }, { "cell_type": "markdown", - "source": [ - "## Initialization" - ], + "id": "0725445e", "metadata": { "tags": [] }, - "id": "0725445e" + "source": [ + "## Initialization" + ] }, { "cell_type": "code", "execution_count": null, + "id": "c82f33e9", + "metadata": { + "tags": [] + }, + "outputs": [], "source": [ "from langchain.agents.agent_toolkits import create_pbi_agent\n", "from langchain.agents.agent_toolkits import PowerBIToolkit\n", @@ -39,16 +43,16 @@ "from langchain.chat_models import ChatOpenAI\n", "from langchain.agents import AgentExecutor\n", "from azure.identity import DefaultAzureCredential" - ], - "outputs": [], - "metadata": { - "tags": [] - }, - "id": "c82f33e9" + ] }, { "cell_type": "code", "execution_count": null, + "id": "0b2c5853", + "metadata": { + "tags": [] + }, + "outputs": [], "source": [ "fast_llm = ChatOpenAI(\n", " temperature=0.5, max_tokens=1000, model_name=\"gpt-3.5-turbo\", verbose=True\n", @@ -69,99 +73,95 @@ " toolkit=toolkit,\n", " verbose=True,\n", ")" - ], - "outputs": [], - "metadata": { - "tags": [] - }, - "id": "0b2c5853" + ] }, { "cell_type": "markdown", + "id": "80c92be3", + "metadata": {}, "source": [ "## Example: describing a table" - ], - "metadata": {}, - "id": "80c92be3" + ] }, { "cell_type": "code", "execution_count": null, - "source": [ - "agent_executor.run(\"Describe table1\")" - ], - "outputs": [], + "id": "90f236cb", "metadata": { "tags": [] }, - "id": "90f236cb" + "outputs": [], + "source": [ + "agent_executor.run(\"Describe table1\")" + ] }, { "cell_type": "markdown", + "id": "b464930f", + "metadata": {}, "source": [ "## Example: simple query on a table\n", "In this example, the agent actually figures out the correct query to get a row count of the table." - ], - "metadata": {}, - "attachments": {}, - "id": "b464930f" + ] }, { "cell_type": "code", "execution_count": null, + "id": "b668c907", + "metadata": { + "tags": [] + }, + "outputs": [], "source": [ "agent_executor.run(\"How many records are in table1?\")" - ], - "outputs": [], - "metadata": { - "tags": [] - }, - "id": "b668c907" + ] }, { "cell_type": "markdown", + "id": "f2229a2f", + "metadata": {}, "source": [ "## Example: running queries" - ], - "metadata": {}, - "id": "f2229a2f" + ] }, { "cell_type": "code", "execution_count": null, + "id": "865a420f", + "metadata": { + "tags": [] + }, + "outputs": [], "source": [ "agent_executor.run(\"How many records are there by dimension1 in table2?\")" - ], - "outputs": [], - "metadata": { - "tags": [] - }, - "id": "865a420f" + ] }, { "cell_type": "code", "execution_count": null, - "source": [ - "agent_executor.run(\"What unique values are there for dimensions2 in table2\")" - ], - "outputs": [], + "id": "120cd49a", "metadata": { "tags": [] }, - "id": "120cd49a" + "outputs": [], + "source": [ + "agent_executor.run(\"What unique values are there for dimensions2 in table2\")" + ] }, { "cell_type": "markdown", + "id": "ac584fb2", + "metadata": {}, "source": [ "## Example: add your own few-shot prompts" - ], - "metadata": {}, - "attachments": {}, - "id": "ac584fb2" + ] }, { "cell_type": "code", "execution_count": null, + "id": "ffa66827", + "metadata": {}, + "outputs": [], "source": [ "# fictional example\n", "few_shots = \"\"\"\n", @@ -189,26 +189,27 @@ " toolkit=toolkit,\n", " verbose=True,\n", ")" - ], - "outputs": [], - "metadata": {}, - "id": "ffa66827" + ] }, { "cell_type": "code", "execution_count": null, + "id": "3be44685", + "metadata": {}, + "outputs": [], "source": [ "agent_executor.run(\"What was the maximum of value in revenue in dollars in 2022?\")" - ], - "outputs": [], - "metadata": {}, - "id": "3be44685" + ] } ], "metadata": { + "interpreter": { + "hash": "397704579725e15f5c7cb49fe5f0341eb7531c82d19f2c29d197e8b64ab5776b" + }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.9.16 64-bit" + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -220,12 +221,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" - }, - "interpreter": { - "hash": "397704579725e15f5c7cb49fe5f0341eb7531c82d19f2c29d197e8b64ab5776b" + "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/docs/extras/integrations/toolkits/python.ipynb b/docs/extras/integrations/toolkits/python.ipynb index 41faeff3f..3c1f6b50c 100644 --- a/docs/extras/integrations/toolkits/python.ipynb +++ b/docs/extras/integrations/toolkits/python.ipynb @@ -5,9 +5,9 @@ "id": "82a4c2cc-20ea-4b20-a565-63e905dee8ff", "metadata": {}, "source": [ - "# Python Agent\n", + "# Python\n", "\n", - "This notebook showcases an agent designed to write and execute python code to answer a question." + "This notebook showcases an agent designed to write and execute `Python` code to answer a question." ] }, { @@ -32,7 +32,7 @@ "id": "ca30d64c", "metadata": {}, "source": [ - "## Using ZERO_SHOT_REACT_DESCRIPTION\n", + "## Using `ZERO_SHOT_REACT_DESCRIPTION`\n", "\n", "This shows how to initialize the agent using the ZERO_SHOT_REACT_DESCRIPTION agent type." ] @@ -149,9 +149,7 @@ "cell_type": "code", "execution_count": 5, "id": "4b9f60e7-eb6a-4f14-8604-498d863d4482", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -271,7 +269,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/spark.ipynb b/docs/extras/integrations/toolkits/spark.ipynb index 7cab26251..d55075c2b 100644 --- a/docs/extras/integrations/toolkits/spark.ipynb +++ b/docs/extras/integrations/toolkits/spark.ipynb @@ -1,13 +1,12 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "# Spark Dataframe Agent\n", + "# Spark Dataframe\n", "\n", - "This notebook shows how to use agents to interact with a Spark dataframe and Spark Connect. It is mostly optimized for question answering.\n", + "This notebook shows how to use agents to interact with a `Spark DataFrame` and `Spark Connect`. It is mostly optimized for question answering.\n", "\n", "**NOTE: this agent calls the Python agent under the hood, which executes LLM generated Python code - this can be bad if the LLM generated Python code is harmful. Use cautiously.**" ] @@ -23,6 +22,13 @@ "os.environ[\"OPENAI_API_KEY\"] = \"...input your openai api key here...\"" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `Spark DataFrame` example" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -225,11 +231,10 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "## Spark Connect Example" + "## `Spark Connect` example" ] }, { @@ -405,9 +410,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/extras/integrations/toolkits/spark_sql.ipynb b/docs/extras/integrations/toolkits/spark_sql.ipynb index c29f6841c..7ed93552c 100644 --- a/docs/extras/integrations/toolkits/spark_sql.ipynb +++ b/docs/extras/integrations/toolkits/spark_sql.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Spark SQL Agent\n", + "# Spark SQL\n", "\n", - "This notebook shows how to use agents to interact with a Spark SQL. Similar to [SQL Database Agent](https://python.langchain.com/docs/integrations/toolkits/sql_database), it is designed to address general inquiries about Spark SQL and facilitate error recovery.\n", + "This notebook shows how to use agents to interact with `Spark SQL`. Similar to [SQL Database Agent](https://python.langchain.com/docs/integrations/toolkits/sql_database), it is designed to address general inquiries about `Spark SQL` and facilitate error recovery.\n", "\n", "**NOTE: Note that, as this agent is in active development, all answers might not be correct. Additionally, it is not guaranteed that the agent won't perform DML statements on your Spark cluster given certain questions. Be careful running it on sensitive data!**" ] @@ -163,7 +163,9 @@ }, { "data": { - "text/plain": "'The titanic table has the following columns: PassengerId (INT), Survived (INT), Pclass (INT), Name (STRING), Sex (STRING), Age (DOUBLE), SibSp (INT), Parch (INT), Ticket (STRING), Fare (DOUBLE), Cabin (STRING), and Embarked (STRING). Here are some sample rows from the table: \\n\\n1. PassengerId: 1, Survived: 0, Pclass: 3, Name: Braund, Mr. Owen Harris, Sex: male, Age: 22.0, SibSp: 1, Parch: 0, Ticket: A/5 21171, Fare: 7.25, Cabin: None, Embarked: S\\n2. PassengerId: 2, Survived: 1, Pclass: 1, Name: Cumings, Mrs. John Bradley (Florence Briggs Thayer), Sex: female, Age: 38.0, SibSp: 1, Parch: 0, Ticket: PC 17599, Fare: 71.2833, Cabin: C85, Embarked: C\\n3. PassengerId: 3, Survived: 1, Pclass: 3, Name: Heikkinen, Miss. Laina, Sex: female, Age: 26.0, SibSp: 0, Parch: 0, Ticket: STON/O2. 3101282, Fare: 7.925, Cabin: None, Embarked: S'" + "text/plain": [ + "'The titanic table has the following columns: PassengerId (INT), Survived (INT), Pclass (INT), Name (STRING), Sex (STRING), Age (DOUBLE), SibSp (INT), Parch (INT), Ticket (STRING), Fare (DOUBLE), Cabin (STRING), and Embarked (STRING). Here are some sample rows from the table: \\n\\n1. PassengerId: 1, Survived: 0, Pclass: 3, Name: Braund, Mr. Owen Harris, Sex: male, Age: 22.0, SibSp: 1, Parch: 0, Ticket: A/5 21171, Fare: 7.25, Cabin: None, Embarked: S\\n2. PassengerId: 2, Survived: 1, Pclass: 1, Name: Cumings, Mrs. John Bradley (Florence Briggs Thayer), Sex: female, Age: 38.0, SibSp: 1, Parch: 0, Ticket: PC 17599, Fare: 71.2833, Cabin: C85, Embarked: C\\n3. PassengerId: 3, Survived: 1, Pclass: 3, Name: Heikkinen, Miss. Laina, Sex: female, Age: 26.0, SibSp: 0, Parch: 0, Ticket: STON/O2. 3101282, Fare: 7.925, Cabin: None, Embarked: S'" + ] }, "execution_count": 4, "metadata": {}, @@ -239,7 +241,9 @@ }, { "data": { - "text/plain": "'The square root of the average age is approximately 5.45.'" + "text/plain": [ + "'The square root of the average age is approximately 5.45.'" + ] }, "execution_count": 5, "metadata": {}, @@ -253,6 +257,12 @@ { "cell_type": "code", "execution_count": 6, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, "outputs": [ { "name": "stdout", @@ -305,7 +315,9 @@ }, { "data": { - "text/plain": "'The oldest survived passenger is Barkworth, Mr. Algernon Henry Wilson, who was 80 years old.'" + "text/plain": [ + "'The oldest survived passenger is Barkworth, Mr. Algernon Henry Wilson, who was 80 years old.'" + ] }, "execution_count": 6, "metadata": {}, @@ -314,10 +326,7 @@ ], "source": [ "agent_executor.run(\"What's the name of the oldest survived passenger?\")" - ], - "metadata": { - "collapsed": false - } + ] } ], "metadata": { @@ -336,9 +345,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/extras/integrations/toolkits/sql_database.ipynb b/docs/extras/integrations/toolkits/sql_database.ipynb index 9fbc31da2..eae793da1 100644 --- a/docs/extras/integrations/toolkits/sql_database.ipynb +++ b/docs/extras/integrations/toolkits/sql_database.ipynb @@ -1,22 +1,21 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "0e499e90-7a6d-4fab-8aab-31a4df417601", "metadata": {}, "source": [ - "# SQL Database Agent\n", + "# SQL Database\n", "\n", - "This notebook showcases an agent designed to interact with a sql databases. The agent builds off of [SQLDatabaseChain](https://python.langchain.com/docs/use_cases/tabular/sqlite) and is designed to answer more general questions about a database, as well as recover from errors.\n", + "This notebook showcases an agent designed to interact with a `SQL` databases. \n", + "The agent builds off of [SQLDatabaseChain](https://python.langchain.com/docs/use_cases/tabular/sqlite) and is designed to answer more general questions about a database, as well as recover from errors.\n", "\n", "Note that, as this agent is in active development, all answers might not be correct. Additionally, it is not guaranteed that the agent won't perform DML statements on your database given certain questions. Be careful running it on sensitive data!\n", "\n", - "This uses the example Chinook database. To set it up follow the instructions on https://database.guide/2-sample-databases-sqlite/, placing the .db file in a notebooks folder at the root of this repository." + "This uses the example `Chinook` database. To set it up follow the instructions on https://database.guide/2-sample-databases-sqlite/, placing the .db file in a notebooks folder at the root of this repository." ] }, { - "attachments": {}, "cell_type": "markdown", "id": "ec927ac6-9b2a-4e8a-9a6e-3e429191875c", "metadata": { @@ -56,12 +55,11 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "f74d1792", "metadata": {}, "source": [ - "## Using ZERO_SHOT_REACT_DESCRIPTION\n", + "## Using `ZERO_SHOT_REACT_DESCRIPTION`\n", "\n", "This shows how to initialize the agent using the ZERO_SHOT_REACT_DESCRIPTION agent type." ] @@ -84,7 +82,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "971cc455", "metadata": {}, @@ -110,7 +107,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "54c01168", "metadata": {}, @@ -136,7 +132,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "5a4a9455", "metadata": {}, @@ -147,7 +142,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "36ae48c7-cb08-4fef-977e-c7d4b96a464b", "metadata": {}, @@ -237,7 +231,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "9abcfe8e-1868-42a4-8345-ad2d9b44c681", "metadata": {}, @@ -312,7 +305,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "6fbc26af-97e4-4a21-82aa-48bdc992da26", "metadata": {}, @@ -495,7 +487,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "7c7503b5-d9d9-4faa-b064-29fcdb5ff213", "metadata": {}, @@ -639,7 +630,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/vectorstore.ipynb b/docs/extras/integrations/toolkits/vectorstore.ipynb index 69ac05bd5..db388fdb0 100644 --- a/docs/extras/integrations/toolkits/vectorstore.ipynb +++ b/docs/extras/integrations/toolkits/vectorstore.ipynb @@ -1,23 +1,21 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "18ada398-dce6-4049-9b56-fc0ede63da9c", "metadata": {}, "source": [ - "# Vectorstore Agent\n", + "# Vectorstore\n", "\n", "This notebook showcases an agent designed to retrieve information from one or more vectorstores, either with or without sources." ] }, { - "attachments": {}, "cell_type": "markdown", "id": "eecb683b-3a46-4b9d-81a3-7caefbfec1a1", "metadata": {}, "source": [ - "## Create the Vectorstores" + "## Create Vectorstores" ] }, { @@ -95,7 +93,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "f4814175-964d-42f1-aa9d-22801ce1e912", "metadata": {}, @@ -128,7 +125,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "8a38ad10", "metadata": {}, @@ -217,7 +213,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "7ca07707", "metadata": {}, @@ -263,7 +258,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "71680984-edaf-4a63-90f5-94edbd263550", "metadata": {}, @@ -422,7 +416,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/toolkits/xorbits.ipynb b/docs/extras/integrations/toolkits/xorbits.ipynb index dd3e6a108..c97ca83b6 100644 --- a/docs/extras/integrations/toolkits/xorbits.ipynb +++ b/docs/extras/integrations/toolkits/xorbits.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Xorbits Agent" + "# Xorbits" ] }, { @@ -13,7 +13,7 @@ "source": [ "This notebook shows how to use agents to interact with [Xorbits Pandas](https://doc.xorbits.io/en/latest/reference/pandas/index.html) dataframe and [Xorbits Numpy](https://doc.xorbits.io/en/latest/reference/numpy/index.html) ndarray. It is mostly optimized for question answering.\n", "\n", - "**NOTE: this agent calls the Python agent under the hood, which executes LLM generated Python code - this can be bad if the LLM generated Python code is harmful. Use cautiously.**" + "**NOTE: this agent calls the `Python` agent under the hood, which executes LLM generated Python code - this can be bad if the LLM generated Python code is harmful. Use cautiously.**" ] }, { @@ -734,9 +734,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/extras/integrations/vectorstores/atlas.ipynb b/docs/extras/integrations/vectorstores/atlas.ipynb index fb18aab45..0f761a8dc 100644 --- a/docs/extras/integrations/vectorstores/atlas.ipynb +++ b/docs/extras/integrations/vectorstores/atlas.ipynb @@ -1,13 +1,14 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Atlas\n", "\n", "\n", - ">[Atlas](https://docs.nomic.ai/index.html) is a platform for interacting with both small and internet scale unstructured datasets by `Nomic`. \n", + ">[Atlas](https://docs.nomic.ai/index.html) is a platform by Nomic made for interacting with both small and internet scale unstructured datasets. It enables anyone to visualize, search, and share massive datasets in their browser.\n", "\n", "This notebook shows you how to use functionality related to the `AtlasDB` vectorstore." ] @@ -49,6 +50,14 @@ "!pip install nomic" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load Packages" + ] + }, { "cell_type": "code", "execution_count": 6, @@ -78,6 +87,14 @@ "ATLAS_TEST_API_KEY = \"7xDPkYXSYDc1_ErdTPIcoAR9RNd8YDlkS3nVNXcVoIMZ6\"" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Prepare the Data" + ] + }, { "cell_type": "code", "execution_count": 8, @@ -96,6 +113,14 @@ "texts = [e.strip() for e in texts]" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Map the Data using Nomic's Atlas" + ] + }, { "cell_type": "code", "execution_count": null, @@ -127,78 +152,21 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " test_index_1677255228.136989\n", - "
    \n", - " A description for your project 508 datums inserted.\n", - "
    \n", - " 1 index built.\n", - "
    Projections\n", - "
      \n", - "
    • test_index_1677255228.136989_index. Status Completed. view online

    \n", - "\n", - "

    Projection ID: db996d77-8981-48a0-897a-ff2c22bbf541

    \n", - "
    \n", - "
    Hide embedded project
    \n", - "
    \n", - " Explore on atlas.nomic.ai\n", - "
    \n", - "
    \n", - " \n", - " \n", - "\n", - " \n", - " \n", - " \n", - " " - ], - "text/plain": [ - "AtlasProject: <{'id': 'ee2354a3-7f9a-4c6b-af43-b0cda09d7198', 'owner': '9c29afbb-a002-4d49-958e-ecf5ae1351ac', 'project_name': 'test_index_1677255228.136989', 'creator': 'auth0|63efc4b5462246f4d9a6ecf2', 'description': 'A description for your project', 'opensearch_index_id': 'f61fb8dd-0abf-4f31-9130-41870e443902', 'is_public': True, 'project_fields': ['atlas_id', 'text'], 'unique_id_field': 'atlas_id', 'modality': 'text', 'total_datums_in_project': 508, 'created_timestamp': '2023-02-24T16:13:50.313363+00:00', 'atlas_indices': [{'id': 'b1b01833-0964-4597-a4bc-a2d60700949d', 'project_id': 'ee2354a3-7f9a-4c6b-af43-b0cda09d7198', 'index_name': 'test_index_1677255228.136989_index', 'indexed_field': 'text', 'created_timestamp': '2023-02-24T16:13:52.957101+00:00', 'updated_timestamp': '2023-02-24T16:14:03.469621+00:00', 'atoms': ['charchunk', 'document'], 'colorable_fields': [], 'embedders': [{'id': '7ec0868a-4eed-4414-a482-25cce9803e1b', 'atlas_index_id': 'b1b01833-0964-4597-a4bc-a2d60700949d', 'ready': True, 'model_name': 'NomicEmbed', 'hyperparameters': {'norm': 'both', 'batch_size': 20, 'polymerize_by': 'charchunk', 'dataset_buffer_size': 1000}}], 'nearest_neighbor_indices': [{'id': '86f8e3ff-e07c-4678-a4d7-144db4b0301d', 'index_name': 'NomicOrganize', 'ready': True, 'hyperparameters': {'dim': 384, 'space': 'l2'}, 'atom_strategies': ['document']}], 'projections': [{'id': 'db996d77-8981-48a0-897a-ff2c22bbf541', 'projection_name': 'NomicProject', 'ready': True, 'hyperparameters': {'spread': 1.0, 'n_epochs': 50, 'n_neighbors': 15}, 'atom_strategies': ['document'], 'created_timestamp': '2023-02-24T16:13:52.979561+00:00', 'updated_timestamp': '2023-02-24T16:14:03.466309+00:00'}]}], 'insert_update_delete_lock': False}>" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "db.project" ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a map with the result of this code. This map displays the texts of the State of the Union.\n", + "https://atlas.nomic.ai/map/3e4de075-89ff-486a-845c-36c23f30bb67/d8ce2284-8edb-4050-8b9b-9bb543d7f647" + ] } ], "metadata": { diff --git a/docs/extras/integrations/vectorstores/azuresearch.ipynb b/docs/extras/integrations/vectorstores/azuresearch.ipynb index fe6462136..fc9bb75b5 100644 --- a/docs/extras/integrations/vectorstores/azuresearch.ipynb +++ b/docs/extras/integrations/vectorstores/azuresearch.ipynb @@ -6,7 +6,9 @@ "source": [ "# Azure Cognitive Search\n", "\n", - "[Azure Cognitive Search](https://learn.microsoft.com/azure/search/search-what-is-azure-search) (formerly known as `Azure Search`) is a cloud search service that gives developers infrastructure, APIs, and tools for building a rich search experience over private, heterogeneous content in web, mobile, and enterprise applications.\n" + "[Azure Cognitive Search](https://learn.microsoft.com/azure/search/search-what-is-azure-search) (formerly known as `Azure Search`) is a cloud search service that gives developers infrastructure, APIs, and tools for building a rich search experience over private, heterogeneous content in web, mobile, and enterprise applications.\n", + "\n", + "Vector search is currently in public preview. It's available through the Azure portal, preview REST API and beta client libraries. [More info](https://learn.microsoft.com/en-us/azure/search/vector-search-overview) Beta client libraries are subject to potential breaking changes, please be sure to use the SDK package version identified below. azure-search-documents==11.4.0b8" ] }, { @@ -22,7 +24,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install azure-search-documents==11.4.0b6\n", + "!pip install azure-search-documents==11.4.0b8\n", "!pip install azure-identity" ] }, @@ -36,13 +38,13 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import openai\n", "import os\n", - "from langchain.embeddings.openai import OpenAIEmbeddings\n", + "from langchain.embeddings import OpenAIEmbeddings\n", "from langchain.vectorstores.azuresearch import AzureSearch" ] }, @@ -57,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -79,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -98,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -151,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -178,6 +180,41 @@ "print(docs[0].page_content)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Perform a vector similarity search with relevance scores\n", + " \n", + "Execute a pure vector similarity search using the similarity_search_with_relevance_scores() method:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(Document(page_content='Tonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you’re at it, pass the Disclose Act so Americans can know who is funding our elections. \\n\\nTonight, I’d like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \\n\\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \\n\\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.', metadata={'source': 'C:\\\\repos\\\\langchain-fruocco-acs\\\\langchain\\\\docs\\\\extras\\\\modules\\\\state_of_the_union.txt'}),\n", + " 0.8441472),\n", + " (Document(page_content='Tonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you’re at it, pass the Disclose Act so Americans can know who is funding our elections. \\n\\nTonight, I’d like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \\n\\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \\n\\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.', metadata={'source': 'C:\\\\repos\\\\langchain-fruocco-acs\\\\langchain\\\\docs\\\\extras\\\\modules\\\\state_of_the_union.txt'}),\n", + " 0.8441472),\n", + " (Document(page_content='A former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she’s been nominated, she’s received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \\n\\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \\n\\nWe can do both. At our border, we’ve installed new technology like cutting-edge scanners to better detect drug smuggling. \\n\\nWe’ve set up joint patrols with Mexico and Guatemala to catch more human traffickers. \\n\\nWe’re putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \\n\\nWe’re securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.', metadata={'source': 'C:\\\\repos\\\\langchain-fruocco-acs\\\\langchain\\\\docs\\\\extras\\\\modules\\\\state_of_the_union.txt'}),\n", + " 0.82153815),\n", + " (Document(page_content='A former top litigator in private practice. A former federal public defender. And from a family of public school educators and police officers. A consensus builder. Since she’s been nominated, she’s received a broad range of support—from the Fraternal Order of Police to former judges appointed by Democrats and Republicans. \\n\\nAnd if we are to advance liberty and justice, we need to secure the Border and fix the immigration system. \\n\\nWe can do both. At our border, we’ve installed new technology like cutting-edge scanners to better detect drug smuggling. \\n\\nWe’ve set up joint patrols with Mexico and Guatemala to catch more human traffickers. \\n\\nWe’re putting in place dedicated immigration judges so families fleeing persecution and violence can have their cases heard faster. \\n\\nWe’re securing commitments and supporting partners in South and Central America to host more refugees and secure their own borders.', metadata={'source': 'C:\\\\repos\\\\langchain-fruocco-acs\\\\langchain\\\\docs\\\\extras\\\\modules\\\\state_of_the_union.txt'}),\n", + " 0.82153815)]\n" + ] + } + ], + "source": [ + "docs_and_scores = vector_store.similarity_search_with_relevance_scores(query=\"What did the president say about Ketanji Brown Jackson\", k=4, score_threshold=0.80)\n", + "from pprint import pprint\n", + "pprint(docs_and_scores)" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -190,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -219,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -254,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -328,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -348,7 +385,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -371,7 +408,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -400,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -494,7 +531,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -530,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": {}, "outputs": [ { diff --git a/docs/extras/integrations/vectorstores/clickhouse.ipynb b/docs/extras/integrations/vectorstores/clickhouse.ipynb index 56a306a8e..97cdcccf0 100644 --- a/docs/extras/integrations/vectorstores/clickhouse.ipynb +++ b/docs/extras/integrations/vectorstores/clickhouse.ipynb @@ -5,7 +5,7 @@ "id": "683953b3", "metadata": {}, "source": [ - "# ClickHouse Vector Search\n", + "# ClickHouse\n", "\n", "> [ClickHouse](https://clickhouse.com/) is the fastest and most resource efficient open-source database for real-time apps and analytics with full SQL support and a wide range of functions to assist users in writing analytical queries. Lately added data structures and distance search functions (like `L2Distance`) as well as [approximate nearest neighbor search indexes](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/annindexes) enable ClickHouse to be used as a high performance and scalable vector database to store and search vectors with SQL.\n", "\n", @@ -198,8 +198,7 @@ "ExecuteTime": { "end_time": "2023-06-03T08:28:58.252991Z", "start_time": "2023-06-03T08:28:58.197560Z" - }, - "scrolled": false + } }, "outputs": [ { @@ -246,9 +245,7 @@ "cell_type": "code", "execution_count": 8, "id": "54f4f561", - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -395,7 +392,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/docarray_hnsw.ipynb b/docs/extras/integrations/vectorstores/docarray_hnsw.ipynb index 329c3a676..1537668b2 100644 --- a/docs/extras/integrations/vectorstores/docarray_hnsw.ipynb +++ b/docs/extras/integrations/vectorstores/docarray_hnsw.ipynb @@ -1,20 +1,18 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "2ce41f46-5711-4311-b04d-2fe233ac5b1b", "metadata": {}, "source": [ - "# DocArrayHnswSearch\n", + "# DocArray HnswSearch\n", "\n", - ">[DocArrayHnswSearch](https://docs.docarray.org/user_guide/storing/index_hnswlib/) is a lightweight Document Index implementation provided by [Docarray](https://docs.docarray.org/) that runs fully locally and is best suited for small- to medium-sized datasets. It stores vectors on disk in [hnswlib](https://github.com/nmslib/hnswlib), and stores all other data in [SQLite](https://www.sqlite.org/index.html).\n", + ">[DocArrayHnswSearch](https://docs.docarray.org/user_guide/storing/index_hnswlib/) is a lightweight Document Index implementation provided by [Docarray](https://github.com/docarray/docarray) that runs fully locally and is best suited for small- to medium-sized datasets. It stores vectors on disk in [hnswlib](https://github.com/nmslib/hnswlib), and stores all other data in [SQLite](https://www.sqlite.org/index.html).\n", "\n", "This notebook shows how to use functionality related to the `DocArrayHnswSearch`." ] }, { - "attachments": {}, "cell_type": "markdown", "id": "7ee37d28", "metadata": {}, @@ -57,7 +55,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "8dbb6de2", "metadata": { @@ -103,7 +100,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "ed6f905b-4853-4a44-9730-614aa8e22b78", "metadata": {}, @@ -151,7 +147,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "3febb987-e903-416f-af26-6897d84c8d61", "metadata": {}, @@ -160,7 +155,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "bb1df11a", "metadata": {}, @@ -236,7 +230,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/docarray_in_memory.ipynb b/docs/extras/integrations/vectorstores/docarray_in_memory.ipynb index 4e5d06de8..220c69ad0 100644 --- a/docs/extras/integrations/vectorstores/docarray_in_memory.ipynb +++ b/docs/extras/integrations/vectorstores/docarray_in_memory.ipynb @@ -1,20 +1,18 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "a3afefb0-7e99-4912-a222-c6b186da11af", "metadata": {}, "source": [ - "# DocArrayInMemorySearch\n", + "# DocArray InMemorySearch\n", "\n", - ">[DocArrayInMemorySearch](https://docs.docarray.org/user_guide/storing/index_in_memory/) is a document index provided by [Docarray](https://docs.docarray.org/) that stores documents in memory. It is a great starting point for small datasets, where you may not want to launch a database server.\n", + ">[DocArrayInMemorySearch](https://docs.docarray.org/user_guide/storing/index_in_memory/) is a document index provided by [Docarray](https://github.com/docarray/docarray) that stores documents in memory. It is a great starting point for small datasets, where you may not want to launch a database server.\n", "\n", "This notebook shows how to use functionality related to the `DocArrayInMemorySearch`." ] }, { - "attachments": {}, "cell_type": "markdown", "id": "5031a3ec", "metadata": {}, @@ -56,7 +54,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "6e57a389-f637-4b8f-9ab2-759ae7485f78", "metadata": {}, @@ -98,7 +95,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "efbb6684-3846-4332-a624-ddd4d75844c1", "metadata": {}, @@ -146,7 +142,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "43896697-f99e-47b6-9117-47a25e9afa9c", "metadata": {}, @@ -155,7 +150,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "414a9bc9", "metadata": {}, @@ -224,7 +218,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/elasticsearch.ipynb b/docs/extras/integrations/vectorstores/elasticsearch.ipynb index 6164b76da..173c2436f 100644 --- a/docs/extras/integrations/vectorstores/elasticsearch.ipynb +++ b/docs/extras/integrations/vectorstores/elasticsearch.ipynb @@ -14,6 +14,16 @@ "This notebook shows how to use functionality related to the `Elasticsearch` database." ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "e5bbffe2", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install elasticsearch openai tiktoken langchain" + ] + }, { "cell_type": "markdown", "id": "b66c12b2-2a07-4136-ac77-ce1c9fa7a409", @@ -119,33 +129,6 @@ "```" ] }, - { - "cell_type": "code", - "execution_count": 1, - "id": "d6197931-cbe5-460c-a5e6-b5eedb83887c", - "metadata": { - "id": "d6197931-cbe5-460c-a5e6-b5eedb83887c", - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: elasticsearch in /Users/joe/Library/Caches/pypoetry/virtualenvs/langchain-monorepo-ln7dNLl5-py3.10/lib/python3.10/site-packages (8.9.0)\n", - "Requirement already satisfied: elastic-transport<9,>=8 in /Users/joe/Library/Caches/pypoetry/virtualenvs/langchain-monorepo-ln7dNLl5-py3.10/lib/python3.10/site-packages (from elasticsearch) (8.4.0)\n", - "Requirement already satisfied: urllib3<2,>=1.26.2 in /Users/joe/Library/Caches/pypoetry/virtualenvs/langchain-monorepo-ln7dNLl5-py3.10/lib/python3.10/site-packages (from elastic-transport<9,>=8->elasticsearch) (1.26.16)\n", - "Requirement already satisfied: certifi in /Users/joe/Library/Caches/pypoetry/virtualenvs/langchain-monorepo-ln7dNLl5-py3.10/lib/python3.10/site-packages (from elastic-transport<9,>=8->elasticsearch) (2023.7.22)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" - ] - } - ], - "source": [ - "!pip install elasticsearch" - ] - }, { "cell_type": "markdown", "id": "ea167a29", @@ -528,24 +511,89 @@ "\n", "To use this, specify the model_id in `ElasticsearchStore` `ApproxRetrievalStrategy` constructor via the `query_model_id` argument.\n", "\n", - "**NOTE** This requires the model to be deployed and running in Elasticsearch ml node. \n", - "\n", - "```python\n", + "**NOTE** This requires the model to be deployed and running in Elasticsearch ml node. See [notebook example](https://github.com/elastic/elasticsearch-labs/blob/main/notebooks/integrations/hugging-face/loading-model-from-hugging-face.ipynb) on how to deploy the model with eland.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0a0c85e7", + "metadata": {}, + "outputs": [], + "source": [ + "APPROX_SELF_DEPLOYED_INDEX_NAME = \"test-approx-self-deployed\"\n", "\n", "# Note: This does not have an embedding function specified\n", "# Instead, we will use the embedding model deployed in Elasticsearch\n", "db = ElasticsearchStore( \n", - " es_url=\"http://localhost:9200\", \n", - " index_name=\"test\",\n", + " es_cloud_id=\"\",\n", + " es_user=\"elastic\",\n", + " es_password=\"\", \n", + " index_name=APPROX_SELF_DEPLOYED_INDEX_NAME,\n", + " query_field=\"text_field\",\n", + " vector_query_field=\"vector_query_field.predicted_value\",\n", " strategy=ElasticsearchStore.ApproxRetrievalStrategy(\n", " query_model_id=\"sentence-transformers__all-minilm-l6-v2\"\n", " )\n", ")\n", "\n", - "# Perform search\n", - "db.similarity_search(\"hello world\", k=10)\n", - "```\n", + "# Setup a Ingest Pipeline to perform the embedding\n", + "# of the text field\n", + "db.client.ingest.put_pipeline(\n", + " id=\"test_pipeline\",\n", + " processors=[\n", + " {\n", + " \"inference\": {\n", + " \"model_id\": \"sentence-transformers__all-minilm-l6-v2\",\n", + " \"field_map\": {\"query_field\": \"text_field\"},\n", + " \"target_field\": \"vector_query_field\",\n", + " }\n", + " }\n", + " ],\n", + ")\n", "\n", + "# creating a new index with the pipeline,\n", + "# not relying on langchain to create the index\n", + "db.client.indices.create(\n", + " index=APPROX_SELF_DEPLOYED_INDEX_NAME,\n", + " mappings={\n", + " \"properties\": {\n", + " \"text_field\": {\"type\": \"text\"},\n", + " \"vector_query_field\": {\n", + " \"properties\": {\n", + " \"predicted_value\": {\n", + " \"type\": \"dense_vector\",\n", + " \"dims\": 384,\n", + " \"index\": True,\n", + " \"similarity\": \"l2_norm\",\n", + " }\n", + " }\n", + " },\n", + " }\n", + " },\n", + " settings={\"index\": {\"default_pipeline\": \"test_pipeline\"}},\n", + ")\n", + "\n", + "db.from_texts([\"hello world\"], \n", + " es_cloud_id=\"\",\n", + " es_user=\"elastic\",\n", + " es_password=\"\", \n", + " index_name=APPROX_SELF_DEPLOYED_INDEX_NAME,\n", + " query_field=\"text_field\",\n", + " vector_query_field=\"vector_query_field.predicted_value\",\n", + " strategy=ElasticsearchStore.ApproxRetrievalStrategy(\n", + " query_model_id=\"sentence-transformers__all-minilm-l6-v2\"\n", + " ))\n", + "\n", + "# Perform search\n", + "db.similarity_search(\"hello world\", k=10)" + ] + }, + { + "cell_type": "markdown", + "id": "53959de6", + "metadata": {}, + "source": [ "## SparseVectorRetrievalStrategy (ELSER)\n", "This strategy uses Elasticsearch's sparse vector retrieval to retrieve the top-k results. We only support our own \"ELSER\" embedding model for now.\n", "\n", diff --git a/docs/extras/integrations/vectorstores/faiss.ipynb b/docs/extras/integrations/vectorstores/faiss.ipynb index 7a355c373..7969982ca 100644 --- a/docs/extras/integrations/vectorstores/faiss.ipynb +++ b/docs/extras/integrations/vectorstores/faiss.ipynb @@ -5,7 +5,7 @@ "id": "683953b3", "metadata": {}, "source": [ - "# FAISS\n", + "# Faiss\n", "\n", ">[Facebook AI Similarity Search (Faiss)](https://engineering.fb.com/2017/03/29/data-infrastructure/faiss-a-library-for-efficient-similarity-search/) is a library for efficient similarity search and clustering of dense vectors. It contains algorithms that search in sets of vectors of any size, up to ones that possibly do not fit in RAM. It also contains supporting code for evaluation and parameter tuning.\n", "\n", @@ -596,7 +596,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.17" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/matchingengine.ipynb b/docs/extras/integrations/vectorstores/matchingengine.ipynb index 5f80f2c88..faee307c3 100644 --- a/docs/extras/integrations/vectorstores/matchingengine.ipynb +++ b/docs/extras/integrations/vectorstores/matchingengine.ipynb @@ -5,9 +5,9 @@ "id": "655b8f55-2089-4733-8b09-35dea9580695", "metadata": {}, "source": [ - "# MatchingEngine\n", + "# Google Vertex AI MatchingEngine\n", "\n", - "This notebook shows how to use functionality related to the GCP Vertex AI `MatchingEngine` vector database.\n", + "This notebook shows how to use functionality related to the `GCP Vertex AI MatchingEngine` vector database.\n", "\n", "> Vertex AI [Matching Engine](https://cloud.google.com/vertex-ai/docs/matching-engine/overview) provides the industry's leading high-scale low latency vector database. These vector databases are commonly referred to as vector similarity-matching or an approximate nearest neighbor (ANN) service.\n", "\n", @@ -348,7 +348,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/meilisearch.ipynb b/docs/extras/integrations/vectorstores/meilisearch.ipynb index 7f640ea0e..572c29e1c 100644 --- a/docs/extras/integrations/vectorstores/meilisearch.ipynb +++ b/docs/extras/integrations/vectorstores/meilisearch.ipynb @@ -197,7 +197,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -205,7 +204,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -229,7 +227,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -298,9 +295,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.10.12" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/extras/integrations/vectorstores/mongodb_atlas.ipynb b/docs/extras/integrations/vectorstores/mongodb_atlas.ipynb index 35e3342b0..5c4475d02 100644 --- a/docs/extras/integrations/vectorstores/mongodb_atlas.ipynb +++ b/docs/extras/integrations/vectorstores/mongodb_atlas.ipynb @@ -1,14 +1,13 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "683953b3", "metadata": {}, "source": [ "# MongoDB Atlas\n", "\n", - ">[MongoDB Atlas](https://www.mongodb.com/docs/atlas/) is a fully-managed cloud database available in AWS , Azure, and GCP. It now has support for native Vector Search on your MongoDB document data.\n", + ">[MongoDB Atlas](https://www.mongodb.com/docs/atlas/) is a fully-managed cloud database available in AWS, Azure, and GCP. It now has support for native Vector Search on your MongoDB document data.\n", "\n", "This notebook shows how to use `MongoDB Atlas Vector Search` to store your embeddings in MongoDB documents, create a vector search index, and perform KNN search with an approximate nearest neighbor algorithm.\n", "\n", @@ -44,7 +43,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "457ace44-1d95-4001-9dd5-78811ab208ad", "metadata": {}, @@ -63,7 +61,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "1f3ecc42", "metadata": {}, @@ -147,7 +144,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "851a2ec9-9390-49a4-8412-3e132c9f789d", "metadata": {}, @@ -191,7 +187,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/pgembedding.ipynb b/docs/extras/integrations/vectorstores/pgembedding.ipynb index f26360206..34928df3b 100644 --- a/docs/extras/integrations/vectorstores/pgembedding.ipynb +++ b/docs/extras/integrations/vectorstores/pgembedding.ipynb @@ -1,18 +1,17 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "1292f057", "metadata": {}, "source": [ - "# pg_embedding\n", + "# Postgres Embedding\n", "\n", - "> [pg_embedding](https://github.com/neondatabase/pg_embedding) is an open-source vector similarity search for `Postgres` that uses Hierarchical Navigable Small Worlds for approximate nearest neighbor search.\n", + "> [Postgres Embedding](https://github.com/neondatabase/pg_embedding) is an open-source vector similarity search for `Postgres` that uses `Hierarchical Navigable Small Worlds (HNSW)` for approximate nearest neighbor search.\n", "\n", - "It supports:\n", - "- exact and approximate nearest neighbor search using HNSW\n", - "- L2 distance\n", + ">It supports:\n", + ">- exact and approximate nearest neighbor search using HNSW\n", + ">- L2 distance\n", "\n", "This notebook shows how to use the Postgres vector database (`PGEmbedding`).\n", "\n", @@ -36,7 +35,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "b2e49694", "metadata": {}, @@ -158,7 +156,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "7ef7b052", "metadata": {}, @@ -167,7 +164,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "939151f7", "metadata": {}, @@ -192,7 +188,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "f9510e6b", "metadata": {}, @@ -214,7 +209,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "7adacf29", "metadata": {}, @@ -236,7 +230,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "528893fb", "metadata": {}, @@ -330,7 +323,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.6" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/redis.ipynb b/docs/extras/integrations/vectorstores/redis.ipynb index 972af8634..ae17b0e4e 100644 --- a/docs/extras/integrations/vectorstores/redis.ipynb +++ b/docs/extras/integrations/vectorstores/redis.ipynb @@ -6,20 +6,124 @@ "source": [ "# Redis\n", "\n", - ">[Redis (Remote Dictionary Server)](https://en.wikipedia.org/wiki/Redis) is an in-memory data structure store, used as a distributed, in-memory key–value database, cache and message broker, with optional durability.\n", + "Redis vector database introduction and langchain integration guide.\n", "\n", - "This notebook shows how to use functionality related to the [Redis vector database](https://redis.com/solutions/use-cases/vector-database/).\n", + "## What is Redis?\n", "\n", - "As database either Redis standalone server or Redis Sentinel HA setups are supported for connections with the \"redis_url\"\n", - "parameter. More information about the different formats of the redis connection url can be found in the LangChain\n", - "[Redis Readme](/docs/integrations/vectorstores/redis) file" + "Most developers from a web services background are probably familiar with Redis. At it's core, Redis is an open-source key-value store that can be used as a cache, message broker, and database. Developers choice Redis because it is fast, has a large ecosystem of client libraries, and has been deployed by major enterprises for years.\n", + "\n", + "In addition to the traditional uses of Redis. Redis also provides capabilities built directly into Redis. These capabilities include the Search and Query capability that allows users to create secondary index structures within Redis. This allows Redis to be a Vector Database, at the speed of a cache. \n", + "\n", + "\n", + "## Redis as a Vector Database\n", + "\n", + "Redis uses compressed, inverted indexes for fast indexing with a low memory footprint. It also supports a number of advanced features such as:\n", + "\n", + "* Indexing of multiple fields in Redis hashes and JSON\n", + "* Vector similarity search (with HNSW (ANN) or FLAT (KNN))\n", + "* Vector Range Search (e.g. find all vectors within a radius of a query vector)\n", + "* Incremental indexing without performance loss\n", + "* Document ranking (using [tf-idf](https://en.wikipedia.org/wiki/Tf%E2%80%93idf), with optional user-provided weights)\n", + "* Field weighting\n", + "* Complex boolean queries with AND, OR, and NOT operators\n", + "* Prefix matching, fuzzy matching, and exact-phrase queries\n", + "* Support for [double-metaphone phonetic matching](https://redis.io/docs/stack/search/reference/phonetic_matching/)\n", + "* Auto-complete suggestions (with fuzzy prefix suggestions)\n", + "* Stemming-based query expansion in [many languages](https://redis.io/docs/stack/search/reference/stemming/) (using [Snowball](http://snowballstem.org/))\n", + "* Support for Chinese-language tokenization and querying (using [Friso](https://github.com/lionsoul2014/friso))\n", + "* Numeric filters and ranges\n", + "* Geospatial searches using [Redis geospatial indexing](/commands/georadius)\n", + "* A powerful aggregations engine\n", + "* Supports for all utf-8 encoded text\n", + "* Retrieve full documents, selected fields, or only the document IDs\n", + "* Sorting results (for example, by creation date)\n", + "\n", + "\n", + "\n", + "## Clients\n", + "\n", + "Since redis is much more than just a vector database, there are often use cases that demand usage of a Redis client besides just the langchain integration. You can use any standard Redis client library to run Search and Query commands, but it's easiest to use a library that wraps the Search and Query API. Below are a few examples, but you can find more client libraries [here](https://redis.io/resources/clients/).\n", + "\n", + "| Project | Language | License | Author | Stars |\n", + "|----------|---------|--------|---------|-------|\n", + "| [jedis][jedis-url] | Java | MIT | [Redis][redis-url] | ![Stars][jedis-stars] |\n", + "| [redisvl][redisvl-url] | Python | MIT | [Redis][redis-url] | ![Stars][redisvl-stars] |\n", + "| [redis-py][redis-py-url] | Python | MIT | [Redis][redis-url] | ![Stars][redis-py-stars] |\n", + "| [node-redis][node-redis-url] | Node.js | MIT | [Redis][redis-url] | ![Stars][node-redis-stars] |\n", + "| [nredisstack][nredisstack-url] | .NET | MIT | [Redis][redis-url] | ![Stars][nredisstack-stars] |\n", + "\n", + "[redis-url]: https://redis.com\n", + "\n", + "[redisvl-url]: https://github.com/RedisVentures/redisvl\n", + "[redisvl-stars]: https://img.shields.io/github/stars/RedisVentures/redisvl.svg?style=social&label=Star&maxAge=2592000\n", + "[redisvl-package]: https://pypi.python.org/pypi/redisvl\n", + "\n", + "[redis-py-url]: https://github.com/redis/redis-py\n", + "[redis-py-stars]: https://img.shields.io/github/stars/redis/redis-py.svg?style=social&label=Star&maxAge=2592000\n", + "[redis-py-package]: https://pypi.python.org/pypi/redis\n", + "\n", + "[jedis-url]: https://github.com/redis/jedis\n", + "[jedis-stars]: https://img.shields.io/github/stars/redis/jedis.svg?style=social&label=Star&maxAge=2592000\n", + "[Jedis-package]: https://search.maven.org/artifact/redis.clients/jedis\n", + "\n", + "[nredisstack-url]: https://github.com/redis/nredisstack\n", + "[nredisstack-stars]: https://img.shields.io/github/stars/redis/nredisstack.svg?style=social&label=Star&maxAge=2592000\n", + "[nredisstack-package]: https://www.nuget.org/packages/nredisstack/\n", + "\n", + "[node-redis-url]: https://github.com/redis/node-redis\n", + "[node-redis-stars]: https://img.shields.io/github/stars/redis/node-redis.svg?style=social&label=Star&maxAge=2592000\n", + "[node-redis-package]: https://www.npmjs.com/package/redis\n", + "\n", + "[redis-om-python-url]: https://github.com/redis/redis-om-python\n", + "[redis-om-python-author]: https://redis.com\n", + "[redis-om-python-stars]: https://img.shields.io/github/stars/redis/redis-om-python.svg?style=social&label=Star&maxAge=2592000\n", + "\n", + "[redisearch-go-url]: https://github.com/RediSearch/redisearch-go\n", + "[redisearch-go-author]: https://redis.com\n", + "[redisearch-go-stars]: https://img.shields.io/github/stars/RediSearch/redisearch-go.svg?style=social&label=Star&maxAge=2592000\n", + "\n", + "[redisearch-api-rs-url]: https://github.com/RediSearch/redisearch-api-rs\n", + "[redisearch-api-rs-author]: https://redis.com\n", + "[redisearch-api-rs-stars]: https://img.shields.io/github/stars/RediSearch/redisearch-api-rs.svg?style=social&label=Star&maxAge=2592000\n", + "\n", + "\n", + "## Deployment Options\n", + "\n", + "There are many ways to deploy Redis with RediSearch. The easiest way to get started is to use Docker, but there are are many potential options for deployment such as\n", + "\n", + "- [Redis Cloud](https://redis.com/redis-enterprise-cloud/overview/)\n", + "- [Docker (Redis Stack)](https://hub.docker.com/r/redis/redis-stack)\n", + "- Cloud marketplaces: [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-e6y7ork67pjwg?sr=0-2&ref_=beagle&applicationId=AWSMPContessa), [Google Marketplace](https://console.cloud.google.com/marketplace/details/redislabs-public/redis-enterprise?pli=1), or [Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/garantiadata.redis_enterprise_1sp_public_preview?tab=Overview)\n", + "- On-premise: [Redis Enterprise Software](https://redis.com/redis-enterprise-software/overview/)\n", + "- Kubernetes: [Redis Enterprise Software on Kubernetes](https://docs.redis.com/latest/kubernetes/)\n", + "\n", + "\n", + "## Examples\n", + "\n", + "Many examples can be found in the [Redis AI team's GitHub](https://github.com/RedisVentures/)\n", + "\n", + "- [Awesome Redis AI Resources](https://github.com/RedisVentures/redis-ai-resources) - List of examples of using Redis in AI workloads\n", + "- [Azure OpenAI Embeddings Q&A](https://github.com/ruoccofabrizio/azure-open-ai-embeddings-qna) - OpenAI and Redis as a Q&A service on Azure.\n", + "- [ArXiv Paper Search](https://github.com/RedisVentures/redis-arXiv-search) - Semantic search over arXiv scholarly papers\n", + "\n", + "\n", + "## More Resources\n", + "\n", + "For more information on how to use Redis as a vector database, check out the following resources:\n", + "\n", + "- [RedisVL Documentation](https://redisvl.com) - Documentation for the Redis Vector Library Client\n", + "- [Redis Vector Similarity Docs](https://redis.io/docs/stack/search/reference/vectors/) - Redis official docs for Vector Search.\n", + "- [Redis-py Search Docs](https://redis.readthedocs.io/en/latest/redismodules.html#redisearch-commands) - Documentation for redis-py client library\n", + "- [Vector Similarity Search: From Basics to Production](https://mlops.community/vector-similarity-search-from-basics-to-production/) - Introductory blog post to VSS and Redis as a VectorDB." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Installing" + "## Install Redis Python Client\n", + "\n", + "Redis-py is the officially supported client by Redis. Recently released is the RedisVL client which is purpose built for the Vector Database use cases. Both can be installed with pip." ] }, { @@ -30,7 +134,7 @@ }, "outputs": [], "source": [ - "!pip install redis" + "!pip install redis redisvl openai tiktoken" ] }, { @@ -42,52 +146,97 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import os\n", "import getpass\n", "\n", - "os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API Key:\")" + "os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API Key:\")\n", + "\n", + "from langchain.embeddings import OpenAIEmbeddings\n", + "embeddings = OpenAIEmbeddings()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Example" + "## Sample Data\n", + "\n", + "First we will describe some sample data so that the various attributes of the Redis vector store can be demonstrated." ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "metadata = [\n", + " {\n", + " \"user\": \"john\",\n", + " \"age\": 18,\n", + " \"job\": \"engineer\",\n", + " \"credit_score\": \"high\",\n", + " },\n", + " {\n", + " \"user\": \"derrick\",\n", + " \"age\": 45,\n", + " \"job\": \"doctor\",\n", + " \"credit_score\": \"low\",\n", + " },\n", + " {\n", + " \"user\": \"nancy\",\n", + " \"age\": 94,\n", + " \"job\": \"doctor\",\n", + " \"credit_score\": \"high\",\n", + " },\n", + " {\n", + " \"user\": \"tyler\",\n", + " \"age\": 100,\n", + " \"job\": \"engineer\",\n", + " \"credit_score\": \"high\",\n", + " },\n", + " {\n", + " \"user\": \"joe\",\n", + " \"age\": 35,\n", + " \"job\": \"dentist\",\n", + " \"credit_score\": \"medium\",\n", + " },\n", + "]\n", + "texts = [\"foo\", \"foo\", \"foo\", \"bar\", \"bar\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initializing Redis\n", + "\n", + "The Redis VectorStore instance can be initialized in a number of ways. There are multiple class methods that can be used to initialize a Redis VectorStore instance.\n", + "\n", + "- ``Redis.__init__`` - Initialize directly\n", + "- ``Redis.from_documents`` - Initialize from a list of ``Langchain.docstore.Document`` objects\n", + "- ``Redis.from_texts`` - Initialize from a list of texts (optionally with metadata)\n", + "- ``Redis.from_texts_return_keys`` - Initialize from a list of texts (optionally with metadata) and return the keys\n", + "- ``Redis.from_existing_index`` - Initialize from an existing Redis index\n", + "\n", + "Below we will use the ``Redis.from_documents`` method." + ] + }, + { + "cell_type": "code", + "execution_count": 4, "metadata": { "tags": [] }, "outputs": [], "source": [ - "from langchain.embeddings import OpenAIEmbeddings\n", - "from langchain.text_splitter import CharacterTextSplitter\n", "from langchain.vectorstores.redis import Redis" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.document_loaders import TextLoader\n", - "\n", - "loader = TextLoader(\"../../../state_of_the_union.txt\")\n", - "documents = loader.load()\n", - "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", - "docs = text_splitter.split_documents(documents)\n", - "\n", - "embeddings = OpenAIEmbeddings()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -97,90 +246,705 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ + "from langchain.docstore.document import Document\n", + "\n", + "documents = [Document(page_content=t, metadata=m) for t, m in zip(texts, metadata)]\n", "rds = Redis.from_documents(\n", - " docs, embeddings, redis_url=\"redis://localhost:6379\", index_name=\"link\"\n", + " documents,\n", + " embeddings,\n", + " redis_url=\"redis://localhost:6379\",\n", + " index_name=\"users\"\n", ")" ] }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'users'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rds.index_name" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ - "If you're interested in the keys of your entries you have to split your docs in texts and metadatas" + "## Inspecting the Created Index\n", + "\n", + "Once the ``Redis`` VectorStore object has been constructed, an index will have been created in Redis if it did not already exist. The index can be inspected with both the ``rvl``and the ``redis-cli`` command line tool. If you installed ``redisvl`` above, you can use the ``rvl`` command line tool to inspect the index." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m16:58:26\u001b[0m \u001b[34m[RedisVL]\u001b[0m \u001b[1;30mINFO\u001b[0m Indices:\n", + "\u001b[32m16:58:26\u001b[0m \u001b[34m[RedisVL]\u001b[0m \u001b[1;30mINFO\u001b[0m 1. users\n" + ] + } + ], + "source": [ + "# assumes you're running Redis locally (use --host, --port, --password, --username, to change this)\n", + "!rvl index listall" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ``Redis`` VectorStore implementation will attempt to generate index schema (fields for filtering) for any metadata passed through the ``from_texts``, ``from_texts_return_keys``, and ``from_documents`` methods. This way, whatever metadata is passed will be indexed into the Redis search index allowing\n", + "for filtering on those fields.\n", + "\n", + "Below we show what fields were created from the metadata we defined above" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Index Information:\n", + "╭──────────────┬────────────────┬───────────────┬─────────────────┬────────────╮\n", + "│ Index Name │ Storage Type │ Prefixes │ Index Options │ Indexing │\n", + "├──────────────┼────────────────┼───────────────┼─────────────────┼────────────┤\n", + "│ users │ HASH │ ['doc:users'] │ [] │ 0 │\n", + "╰──────────────┴────────────────┴───────────────┴─────────────────┴────────────╯\n", + "Index Fields:\n", + "╭────────────────┬────────────────┬─────────┬────────────────┬────────────────╮\n", + "│ Name │ Attribute │ Type │ Field Option │ Option Value │\n", + "├────────────────┼────────────────┼─────────┼────────────────┼────────────────┤\n", + "│ user │ user │ TEXT │ WEIGHT │ 1 │\n", + "│ job │ job │ TEXT │ WEIGHT │ 1 │\n", + "│ credit_score │ credit_score │ TEXT │ WEIGHT │ 1 │\n", + "│ content │ content │ TEXT │ WEIGHT │ 1 │\n", + "│ age │ age │ NUMERIC │ │ │\n", + "│ content_vector │ content_vector │ VECTOR │ │ │\n", + "╰────────────────┴────────────────┴─────────┴────────────────┴────────────────╯\n" + ] + } + ], + "source": [ + "!rvl index info -i users" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Statistics:\n", + "╭─────────────────────────────┬─────────────╮\n", + "│ Stat Key │ Value │\n", + "├─────────────────────────────┼─────────────┤\n", + "│ num_docs │ 5 │\n", + "│ num_terms │ 15 │\n", + "│ max_doc_id │ 5 │\n", + "│ num_records │ 33 │\n", + "│ percent_indexed │ 1 │\n", + "│ hash_indexing_failures │ 0 │\n", + "│ number_of_uses │ 4 │\n", + "│ bytes_per_record_avg │ 4.60606 │\n", + "│ doc_table_size_mb │ 0.000524521 │\n", + "│ inverted_sz_mb │ 0.000144958 │\n", + "│ key_table_size_mb │ 0.000193596 │\n", + "│ offset_bits_per_record_avg │ 8 │\n", + "│ offset_vectors_sz_mb │ 2.19345e-05 │\n", + "│ offsets_per_term_avg │ 0.69697 │\n", + "│ records_per_doc_avg │ 6.6 │\n", + "│ sortable_values_size_mb │ 0 │\n", + "│ total_indexing_time │ 0.32 │\n", + "│ total_inverted_index_blocks │ 16 │\n", + "│ vector_index_sz_mb │ 6.0126 │\n", + "╰─────────────────────────────┴─────────────╯\n" + ] + } + ], + "source": [ + "!rvl stats -i users" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's important to note that we have not specified that the ``user``, ``job``, ``credit_score`` and ``age`` in the metadata should be fields within the index, this is because the ``Redis`` VectorStore object automatically generate the index schema from the passed metadata. For more information on the generation of index fields, see the API documentation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Querying\n", + "\n", + "There are multiple ways to query the ``Redis`` VectorStore implementation based on what use case you have:\n", + "\n", + "- ``similarity_search``: Find the most similar vectors to a given vector.\n", + "- ``similarity_search_with_score``: Find the most similar vectors to a given vector and return the vector distance\n", + "- ``similarity_search_limit_score``: Find the most similar vectors to a given vector and limit the number of results to the ``score_threshold``\n", + "- ``similarity_search_with_relevance_scores``: Find the most similar vectors to a given vector and return the vector similarities" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "foo\n" + ] + } + ], + "source": [ + "results = rds.similarity_search(\"foo\")\n", + "print(results[0].page_content)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Key of the document in Redis: doc:users:a70ca43b3a4e4168bae57c78753a200f\n", + "Metadata of the document: {'user': 'derrick', 'job': 'doctor', 'credit_score': 'low', 'age': '45'}\n" + ] + } + ], + "source": [ + "# return metadata\n", + "results = rds.similarity_search(\"foo\", k=3)\n", + "meta = results[1].metadata\n", + "print(\"Key of the document in Redis: \", meta.pop(\"id\"))\n", + "print(\"Metadata of the document: \", meta)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Content: foo --- Score: 0.0\n", + "Content: foo --- Score: 0.0\n", + "Content: foo --- Score: 0.0\n", + "Content: bar --- Score: 0.1566\n", + "Content: bar --- Score: 0.1566\n" + ] + } + ], + "source": [ + "# with scores (distances)\n", + "results = rds.similarity_search_with_score(\"foo\", k=5)\n", + "for result in results:\n", + " print(f\"Content: {result[0].page_content} --- Score: {result[1]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Content: foo --- Score: 0.0\n", + "Content: foo --- Score: 0.0\n", + "Content: foo --- Score: 0.0\n" + ] + } + ], + "source": [ + "# limit the vector distance that can be returned\n", + "results = rds.similarity_search_with_score(\"foo\", k=5, distance_threshold=0.1)\n", + "for result in results:\n", + " print(f\"Content: {result[0].page_content} --- Score: {result[1]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Content: foo --- Similiarity: 1.0\n", + "Content: foo --- Similiarity: 1.0\n", + "Content: foo --- Similiarity: 1.0\n", + "Content: bar --- Similiarity: 0.8434\n", + "Content: bar --- Similiarity: 0.8434\n" + ] + } + ], + "source": [ + "# with scores\n", + "results = rds.similarity_search_with_relevance_scores(\"foo\", k=5)\n", + "for result in results:\n", + " print(f\"Content: {result[0].page_content} --- Similiarity: {result[1]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Content: foo --- Similarity: 1.0\n", + "Content: foo --- Similarity: 1.0\n", + "Content: foo --- Similarity: 1.0\n" + ] + } + ], + "source": [ + "# limit scores (similarities have to be over .9)\n", + "results = rds.similarity_search_with_relevance_scores(\"foo\", k=5, score_threshold=0.9)\n", + "for result in results:\n", + " print(f\"Content: {result[0].page_content} --- Similarity: {result[1]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['doc:users:b9c71d62a0a34241a37950b448dafd38']" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# you can also add new documents as follows\n", + "new_document = [\"baz\"]\n", + "new_metadata = [{\n", + " \"user\": \"sam\",\n", + " \"age\": 50,\n", + " \"job\": \"janitor\",\n", + " \"credit_score\": \"high\"\n", + "}]\n", + "# both the document and metadata must be lists\n", + "rds.add_texts(new_document, new_metadata)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'id': 'doc:users:b9c71d62a0a34241a37950b448dafd38', 'user': 'sam', 'job': 'janitor', 'credit_score': 'high', 'age': '50'}\n" + ] + } + ], + "source": [ + "# now query the new document\n", + "results = rds.similarity_search(\"baz\", k=3)\n", + "print(results[0].metadata)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connect to an Existing Index\n", + "\n", + "In order to have the same metadata indexed when using the ``Redis`` VectorStore. You will need to have the same ``index_schema`` passed in either as a path to a yaml file or as a dictionary. The following shows how to obtain the schema from an index and connect to an existing index." + ] + }, + { + "cell_type": "code", + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ - "texts = [d.page_content for d in docs]\n", - "metadatas = [d.metadata for d in docs]\n", + "# write the schema to a yaml file\n", + "rds.write_schema(\"redis_schema.yaml\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The schema file for this example should look something like:\n", + "\n", + "```yaml\n", + "numeric:\n", + "- name: age\n", + " no_index: false\n", + " sortable: false\n", + "text:\n", + "- name: user\n", + " no_index: false\n", + " no_stem: false\n", + " sortable: false\n", + " weight: 1\n", + " withsuffixtrie: false\n", + "- name: job\n", + " no_index: false\n", + " no_stem: false\n", + " sortable: false\n", + " weight: 1\n", + " withsuffixtrie: false\n", + "- name: credit_score\n", + " no_index: false\n", + " no_stem: false\n", + " sortable: false\n", + " weight: 1\n", + " withsuffixtrie: false\n", + "- name: content\n", + " no_index: false\n", + " no_stem: false\n", + " sortable: false\n", + " weight: 1\n", + " withsuffixtrie: false\n", + "vector:\n", + "- algorithm: FLAT\n", + " block_size: 1000\n", + " datatype: FLOAT32\n", + " dims: 1536\n", + " distance_metric: COSINE\n", + " initial_cap: 20000\n", + " name: content_vector\n", + "```\n", + "\n", + "**Notice**, this include **all** possible fields for the schema. You can remove any fields that you don't need." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'id': 'doc:users:8484c48a032d4c4cbe3cc2ed6845fabb', 'user': 'john', 'job': 'engineer', 'credit_score': 'high', 'age': '18'}\n" + ] + } + ], + "source": [ + "# now we can connect to our existing index as follows\n", + "\n", + "new_rds = Redis.from_existing_index(\n", + " embeddings,\n", + " index_name=\"users\",\n", + " redis_url=\"redis://localhost:6379\",\n", + " schema=\"redis_schema.yaml\"\n", + ")\n", + "results = new_rds.similarity_search(\"foo\", k=3)\n", + "print(results[0].metadata)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# see the schemas are the same\n", + "new_rds.schema == rds.schema" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Custom Metadata Indexing\n", + "\n", + "In some cases, you may want to control what fields the metadata maps to. For example, you may want the ``credit_score`` field to be a categorical field instead of a text field (which is the default behavior for all string fields). In this case, you can use the ``index_schema`` parameter in each of the initialization methods above to specify the schema for the index. Custom index schema can either be passed as a dictionary or as a path to a yaml file.\n", + "\n", + "All arguments in the schema have defaults besides the name, so you can specify only the fields you want to change. All the names correspond to the snake/lowercase versions of the arguments you would use on the command line with ``redis-cli`` or in ``redis-py``. For more on the arguments for each field, see the [documentation](https://redis.io/docs/interact/search-and-query/basic-constructs/field-and-type-options/)\n", + "\n", + "The below example shows how to specify the schema for the ``credit_score`` field as a Tag (categorical) field instead of a text field. \n", + "\n", + "```yaml\n", + "# index_schema.yml\n", + "tag:\n", + " - name: credit_score\n", + "text:\n", + " - name: user\n", + " - name: job\n", + "numeric:\n", + " - name: age\n", + "```\n", + "\n", + "In Python this would look like:\n", + "\n", + "```python\n", + "\n", + "index_schema = {\n", + " \"tag\": [{\"name\": \"credit_score\"}],\n", + " \"text\": [{\"name\": \"user\"}, {\"name\": \"job\"}],\n", + " \"numeric\": [{\"name\": \"age\"}],\n", + "}\n", + "\n", + "```\n", + "\n", + "Notice that only the ``name`` field needs to be specified. All other fields have defaults." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "`index_schema` does not match generated metadata schema.\n", + "If you meant to manually override the schema, please ignore this message.\n", + "index_schema: {'tag': [{'name': 'credit_score'}], 'text': [{'name': 'user'}, {'name': 'job'}], 'numeric': [{'name': 'age'}]}\n", + "generated_schema: {'text': [{'name': 'user'}, {'name': 'job'}, {'name': 'credit_score'}], 'numeric': [{'name': 'age'}], 'tag': []}\n", + "\n" + ] + } + ], + "source": [ + "# create a new index with the new schema defined above\n", + "index_schema = {\n", + " \"tag\": [{\"name\": \"credit_score\"}],\n", + " \"text\": [{\"name\": \"user\"}, {\"name\": \"job\"}],\n", + " \"numeric\": [{\"name\": \"age\"}],\n", + "}\n", "\n", "rds, keys = Redis.from_texts_return_keys(\n", - " texts, embeddings, redis_url=\"redis://localhost:6379\", index_name=\"link\"\n", - ")" + " texts,\n", + " embeddings,\n", + " metadatas=metadata,\n", + " redis_url=\"redis://localhost:6379\",\n", + " index_name=\"users_modified\",\n", + " index_schema=index_schema, # pass in the new index schema\n", + ")\n" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "rds.index_name" + "The above warning is meant to notify users when they are overriding the default behavior. Ignore it if you are intentionally overriding the behavior." ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "query = \"What did the president say about Ketanji Brown Jackson\"\n", - "results = rds.similarity_search(query)\n", - "print(results[0].page_content)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(rds.add_texts([\"Ankush went to Princeton\"]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "query = \"Princeton\"\n", - "results = rds.similarity_search(query)\n", - "print(results[0].page_content)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load from existing index\n", - "rds = Redis.from_existing_index(\n", - " embeddings, redis_url=\"redis://localhost:6379\", index_name=\"link\"\n", - ")\n", + "## Hybrid Filtering\n", "\n", - "query = \"What did the president say about Ketanji Brown Jackson\"\n", - "results = rds.similarity_search(query)\n", - "print(results[0].page_content)" + "With the Redis Filter Expression language built into langchain, you can create arbitrarily long chains of hybrid filters\n", + "that can be used to filter your search results. The expression language is derived from the [RedisVL Expression Syntax](https://redisvl.com)\n", + "and is designed to be easy to use and understand.\n", + "\n", + "The following are the available filter types:\n", + "- ``RedisText``: Filter by full-text search against metadata fields. Supports exact, fuzzy, and wildcard matching.\n", + "- ``RedisNum``: Filter by numeric range against metadata fields.\n", + "- ``RedisTag``: Filter by exact match against string based categorical metadata fields. Multiple tags can be specified like \"tag1,tag2,tag3\".\n", + "\n", + "The following are examples of utilizing these filters.\n", + "\n", + "```python\n", + "\n", + "from langchain.vectorstores.redis import RedisText, RedisNum, RedisTag\n", + "\n", + "# exact matching\n", + "has_high_credit = RedisTag(\"credit_score\") == \"high\"\n", + "does_not_have_high_credit = RedisTag(\"credit_score\") != \"low\"\n", + "\n", + "# fuzzy matching\n", + "job_starts_with_eng = RedisText(\"job\") % \"eng*\"\n", + "job_is_engineer = RedisText(\"job\") == \"engineer\"\n", + "job_is_not_engineer = RedisText(\"job\") != \"engineer\"\n", + "\n", + "# numeric filtering\n", + "age_is_18 = RedisNum(\"age\") == 18\n", + "age_is_not_18 = RedisNum(\"age\") != 18\n", + "age_is_greater_than_18 = RedisNum(\"age\") > 18\n", + "age_is_less_than_18 = RedisNum(\"age\") < 18\n", + "age_is_greater_than_or_equal_to_18 = RedisNum(\"age\") >= 18\n", + "age_is_less_than_or_equal_to_18 = RedisNum(\"age\") <= 18\n", + "\n", + "```\n", + "\n", + "The ``RedisFilter`` class can be used to simplify the import of these filters as follows\n", + "\n", + "```python\n", + "\n", + "from langchain.vectorstores.redis import RedisFilter\n", + "\n", + "# same examples as above\n", + "has_high_credit = RedisFilter.tag(\"credit_score\") == \"high\"\n", + "does_not_have_high_credit = RedisFilter.num(\"age\") > 8\n", + "job_starts_with_eng = RedisFilter.text(\"job\") % \"eng*\"\n", + "```\n", + "\n", + "The following are examples of using hybrid filter for search" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job: engineer\n", + "Engineers in the dataset: 2\n" + ] + } + ], + "source": [ + "from langchain.vectorstores.redis import RedisText\n", + "\n", + "is_engineer = RedisText(\"job\") == \"engineer\"\n", + "results = rds.similarity_search(\"foo\", k=3, filter=is_engineer)\n", + "\n", + "print(\"Job:\", results[0].metadata[\"job\"])\n", + "print(\"Engineers in the dataset:\", len(results))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job: doctor\n", + "Job: doctor\n", + "Jobs in dataset that start with 'doc': 2\n" + ] + } + ], + "source": [ + "# fuzzy match\n", + "starts_with_doc = RedisText(\"job\") % \"doc*\"\n", + "results = rds.similarity_search(\"foo\", k=3, filter=starts_with_doc)\n", + "\n", + "for result in results:\n", + " print(\"Job:\", result.metadata[\"job\"])\n", + "print(\"Jobs in dataset that start with 'doc':\", len(results))" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "User: derrick is 45\n", + "User: nancy is 94\n", + "User: joe is 35\n" + ] + } + ], + "source": [ + "from langchain.vectorstores.redis import RedisNum\n", + "\n", + "is_over_18 = RedisNum(\"age\") > 18\n", + "is_under_99 = RedisNum(\"age\") < 99\n", + "age_range = is_over_18 & is_under_99\n", + "results = rds.similarity_search(\"foo\", filter=age_range)\n", + "\n", + "for result in results:\n", + " print(\"User:\", result.metadata[\"user\"], \"is\", result.metadata[\"age\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "User: derrick is 45\n", + "User: nancy is 94\n", + "User: joe is 35\n" + ] + } + ], + "source": [ + "# make sure to use parenthesis around FilterExpressions\n", + "# if initializing them while constructing them\n", + "age_range = (RedisNum(\"age\") > 18) & (RedisNum(\"age\") < 99)\n", + "results = rds.similarity_search(\"foo\", filter=age_range)\n", + "\n", + "for result in results:\n", + " print(\"User:\", result.metadata[\"user\"], \"is\", result.metadata[\"age\"])" ] }, { @@ -196,46 +960,135 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Content: foo --- Score: 0.0\n", + "Content: foo --- Score: 0.0\n", + "Content: foo --- Score: 0.0\n" + ] + } + ], "source": [ - "retriever = rds.as_retriever()" + "query = \"foo\"\n", + "results = rds.similarity_search_with_score(query, k=3, return_metadata=True)\n", + "\n", + "for result in results:\n", + " print(\"Content:\", result[0].page_content, \" --- Score: \", result[1])\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ - "docs = retriever.get_relevant_documents(query)" + "retriever = rds.as_retriever(search_type=\"similarity\", search_kwargs={\"k\": 4})" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='foo', metadata={'id': 'doc:users_modified:988ecca7574048e396756efc0e79aeca', 'user': 'john', 'job': 'engineer', 'credit_score': 'high', 'age': '18'}),\n", + " Document(page_content='foo', metadata={'id': 'doc:users_modified:009b1afeb4084cc6bdef858c7a99b48e', 'user': 'derrick', 'job': 'doctor', 'credit_score': 'low', 'age': '45'}),\n", + " Document(page_content='foo', metadata={'id': 'doc:users_modified:7087cee9be5b4eca93c30fbdd09a2731', 'user': 'nancy', 'job': 'doctor', 'credit_score': 'high', 'age': '94'}),\n", + " Document(page_content='bar', metadata={'id': 'doc:users_modified:01ef6caac12b42c28ad870aefe574253', 'user': 'tyler', 'job': 'engineer', 'credit_score': 'high', 'age': '100'})]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "docs = retriever.get_relevant_documents(query)\n", + "docs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can also use similarity_limit as a search method. This is only return documents if they are similar enough" + "There is also the `similarity_distance_threshold` retriever which allows the user to specify the vector distance" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ - "retriever = rds.as_retriever(search_type=\"similarity_limit\")" + "retriever = rds.as_retriever(search_type=\"similarity_distance_threshold\", search_kwargs={\"k\": 4, \"distance_threshold\": 0.1})" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='foo', metadata={'id': 'doc:users_modified:988ecca7574048e396756efc0e79aeca', 'user': 'john', 'job': 'engineer', 'credit_score': 'high', 'age': '18'}),\n", + " Document(page_content='foo', metadata={'id': 'doc:users_modified:009b1afeb4084cc6bdef858c7a99b48e', 'user': 'derrick', 'job': 'doctor', 'credit_score': 'low', 'age': '45'}),\n", + " Document(page_content='foo', metadata={'id': 'doc:users_modified:7087cee9be5b4eca93c30fbdd09a2731', 'user': 'nancy', 'job': 'doctor', 'credit_score': 'high', 'age': '94'})]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "docs = retriever.get_relevant_documents(query)\n", + "docs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lastly, the ``similarity_score_threshold`` allows the user to define the minimum score for similar documents" + ] + }, + { + "cell_type": "code", + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ - "# Here we can see it doesn't return any results because there are no relevant documents\n", - "retriever.get_relevant_documents(\"where did ankush go to college?\")" + "retriever = rds.as_retriever(search_type=\"similarity_score_threshold\", search_kwargs={\"score_threshold\": 0.9, \"k\": 10})" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='foo', metadata={'id': 'doc:users_modified:988ecca7574048e396756efc0e79aeca', 'user': 'john', 'job': 'engineer', 'credit_score': 'high', 'age': '18'}),\n", + " Document(page_content='foo', metadata={'id': 'doc:users_modified:009b1afeb4084cc6bdef858c7a99b48e', 'user': 'derrick', 'job': 'doctor', 'credit_score': 'low', 'age': '45'}),\n", + " Document(page_content='foo', metadata={'id': 'doc:users_modified:7087cee9be5b4eca93c30fbdd09a2731', 'user': 'nancy', 'job': 'doctor', 'credit_score': 'high', 'age': '94'})]" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "retriever.get_relevant_documents(\"foo\")" ] }, { @@ -254,15 +1107,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "Redis.delete(keys, redis_url=\"redis://localhost:6379\")" ] }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# delete the indices too\n", + "Redis.drop_index(index_name=\"users\", delete_documents=True, redis_url=\"redis://localhost:6379\")\n", + "Redis.drop_index(index_name=\"users_modified\", delete_documents=True, redis_url=\"redis://localhost:6379\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -280,7 +1166,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -322,7 +1208,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.8.13" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/scann.ipynb b/docs/extras/integrations/vectorstores/scann.ipynb index 7eb32642f..4d63bd288 100644 --- a/docs/extras/integrations/vectorstores/scann.ipynb +++ b/docs/extras/integrations/vectorstores/scann.ipynb @@ -182,7 +182,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/supabase.ipynb b/docs/extras/integrations/vectorstores/supabase.ipynb index 19dbc3d36..9ba5dacd0 100644 --- a/docs/extras/integrations/vectorstores/supabase.ipynb +++ b/docs/extras/integrations/vectorstores/supabase.ipynb @@ -1,7 +1,6 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "683953b3", "metadata": {}, @@ -10,7 +9,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "cc80fa84-1f2f-48b4-bd39-3e6412f012f1", "metadata": {}, @@ -87,7 +85,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "69bff365-3039-4ff8-a641-aa190166179d", "metadata": {}, @@ -237,7 +234,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "18152965", "metadata": {}, @@ -246,7 +242,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "ea13e80a", "metadata": {}, @@ -287,7 +282,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "794a7552", "metadata": {}, @@ -439,7 +433,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/tair.ipynb b/docs/extras/integrations/vectorstores/tair.ipynb index e3e7b024d..0b55b9f56 100644 --- a/docs/extras/integrations/vectorstores/tair.ipynb +++ b/docs/extras/integrations/vectorstores/tair.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -27,13 +27,30 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "RuntimeError", + "evalue": "Error loading ../../../state_of_the_union.txt", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/opt/homebrew/lib/python3.10/site-packages/langchain/document_loaders/text.py:40\u001b[0m, in \u001b[0;36mTextLoader.load\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m---> 40\u001b[0m \u001b[39mwith\u001b[39;00m \u001b[39mopen\u001b[39;49m(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mfile_path, encoding\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mencoding) \u001b[39mas\u001b[39;00m f:\n\u001b[1;32m 41\u001b[0m text \u001b[39m=\u001b[39m f\u001b[39m.\u001b[39mread()\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '../../../state_of_the_union.txt'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[30], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mlangchain\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdocument_loaders\u001b[39;00m \u001b[39mimport\u001b[39;00m TextLoader\n\u001b[1;32m 3\u001b[0m loader \u001b[39m=\u001b[39m TextLoader(\u001b[39m\"\u001b[39m\u001b[39m../../../state_of_the_union.txt\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m----> 4\u001b[0m documents \u001b[39m=\u001b[39m loader\u001b[39m.\u001b[39;49mload()\n\u001b[1;32m 5\u001b[0m text_splitter \u001b[39m=\u001b[39m CharacterTextSplitter(chunk_size\u001b[39m=\u001b[39m\u001b[39m1000\u001b[39m, chunk_overlap\u001b[39m=\u001b[39m\u001b[39m0\u001b[39m)\n\u001b[1;32m 6\u001b[0m docs \u001b[39m=\u001b[39m text_splitter\u001b[39m.\u001b[39msplit_documents(documents)\n", + "File \u001b[0;32m/opt/homebrew/lib/python3.10/site-packages/langchain/document_loaders/text.py:56\u001b[0m, in \u001b[0;36mTextLoader.load\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mRuntimeError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mError loading \u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfile_path\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 55\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[0;32m---> 56\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mRuntimeError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mError loading \u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfile_path\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 58\u001b[0m metadata \u001b[39m=\u001b[39m {\u001b[39m\"\u001b[39m\u001b[39msource\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfile_path}\n\u001b[1;32m 59\u001b[0m \u001b[39mreturn\u001b[39;00m [Document(page_content\u001b[39m=\u001b[39mtext, metadata\u001b[39m=\u001b[39mmetadata)]\n", + "\u001b[0;31mRuntimeError\u001b[0m: Error loading ../../../state_of_the_union.txt" + ] + } + ], "source": [ "from langchain.document_loaders import TextLoader\n", "\n", - "loader = TextLoader(\"../../../state_of_the_union.txt\")\n", + "loader = TextLoader(\"../../../extras/modules/state_of_the_union.txt\")\n", "documents = loader.load()\n", "text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)\n", "docs = text_splitter.split_documents(documents)\n", @@ -57,16 +74,28 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'docs' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[6], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[39m# drop first if index already exists\u001b[39;00m\n\u001b[1;32m 4\u001b[0m Tair\u001b[39m.\u001b[39mdrop_index(tair_url\u001b[39m=\u001b[39mtair_url)\n\u001b[0;32m----> 6\u001b[0m vector_store \u001b[39m=\u001b[39m Tair\u001b[39m.\u001b[39mfrom_documents(docs, embeddings, tair_url\u001b[39m=\u001b[39mtair_url)\n", + "\u001b[0;31mNameError\u001b[0m: name 'docs' is not defined" + ] + } + ], "source": [ "tair_url = \"redis://localhost:6379\"\n", "\n", "# drop first if index already exists\n", "Tair.drop_index(tair_url=tair_url)\n", "\n", - "vector_store = Tair.from_documents(docs, embeddings, tair_url=tair_url)" + "vector_store = Tair.from_documents(docs, embeddings, tair_url=tair_url)\n" ] }, { @@ -98,12 +127,44 @@ "docs[0]" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tair Hybrid Search Index build" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# drop first if index already exists\n", + "Tair.drop_index(tair_url=tair_url)\n", + "\n", + "vector_store = Tair.from_documents(docs, embeddings, tair_url=tair_url, index_params={\"lexical_algorithm\":\"bm25\"})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tair Hybrid Search" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "query = \"What did the president say about Ketanji Brown Jackson\"\n", + "# hybrid_ratio: 0.5 hybrid search, 0.9999 vector search, 0.0001 text search\n", + "kwargs = {\"TEXT\" : query, \"hybrid_ratio\" : 0.5}\n", + "docs = vector_store.similarity_search(query, **kwargs)\n", + "docs[0]" + ] } ], "metadata": { @@ -122,7 +183,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.10.8" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/usearch.ipynb b/docs/extras/integrations/vectorstores/usearch.ipynb index 9778a9884..b4aefa2a1 100644 --- a/docs/extras/integrations/vectorstores/usearch.ipynb +++ b/docs/extras/integrations/vectorstores/usearch.ipynb @@ -8,7 +8,7 @@ "# USearch\n", ">[USearch](https://unum-cloud.github.io/usearch/) is a Smaller & Faster Single-File Vector Search Engine\n", "\n", - "USearch's base functionality is identical to FAISS, and the interface should look familiar if you have ever investigated Approximate Nearest Neigbors search. FAISS is a widely recognized standard for high-performance vector search engines. USearch and FAISS both employ the same HNSW algorithm, but they differ significantly in their design principles. USearch is compact and broadly compatible without sacrificing performance, with a primary focus on user-defined metrics and fewer dependencies." + ">USearch's base functionality is identical to FAISS, and the interface should look familiar if you have ever investigated Approximate Nearest Neigbors search. FAISS is a widely recognized standard for high-performance vector search engines. USearch and FAISS both employ the same HNSW algorithm, but they differ significantly in their design principles. USearch is compact and broadly compatible without sacrificing performance, with a primary focus on user-defined metrics and fewer dependencies." ] }, { @@ -187,7 +187,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/integrations/vectorstores/xata.ipynb b/docs/extras/integrations/vectorstores/xata.ipynb index 601e8599f..42f2e012e 100644 --- a/docs/extras/integrations/vectorstores/xata.ipynb +++ b/docs/extras/integrations/vectorstores/xata.ipynb @@ -232,7 +232,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.9" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/docs/extras/modules/agents/how_to/async_agent.ipynb b/docs/extras/modules/agents/how_to/async_agent.ipynb index fd05c4f8f..aa8096f13 100644 --- a/docs/extras/modules/agents/how_to/async_agent.ipynb +++ b/docs/extras/modules/agents/how_to/async_agent.ipynb @@ -9,7 +9,7 @@ "\n", "LangChain provides async support for Agents by leveraging the [asyncio](https://docs.python.org/3/library/asyncio.html) library.\n", "\n", - "Async methods are currently supported for the following `Tools`: [`GoogleSerperAPIWrapper`](https://github.com/hwchase17/langchain/blob/master/langchain/utilities/google_serper.py), [`SerpAPIWrapper`](https://github.com/hwchase17/langchain/blob/master/langchain/serpapi.py), [`LLMMathChain`](https://github.com/hwchase17/langchain/blob/master/langchain/chains/llm_math/base.py) and [`Qdrant`](https://github.com/hwchase17/langchain/blob/master/langchain/vectorstores/qdrant.py). Async support for other agent tools are on the roadmap.\n", + "Async methods are currently supported for the following `Tools`: [`GoogleSerperAPIWrapper`](https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/utilities/google_serper.py), [`SerpAPIWrapper`](https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/utilities/serpapi.py), [`LLMMathChain`](https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/chains/llm_math/base.py) and [`Qdrant`](https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/vectorstores/qdrant.py). Async support for other agent tools are on the roadmap.\n", "\n", "For `Tool`s that have a `coroutine` implemented (the four mentioned above), the `AgentExecutor` will `await` them directly. Otherwise, the `AgentExecutor` will call the `Tool`'s `func` via `asyncio.get_event_loop().run_in_executor` to avoid blocking the main runloop.\n", "\n", @@ -76,91 +76,91 @@ "text": [ "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", - "\u001B[32;1m\u001B[1;3m I need to find out who won the US Open men's final in 2019 and then calculate his age raised to the 0.334 power.\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I need to find out who won the US Open men's final in 2019 and then calculate his age raised to the 0.334 power.\n", "Action: Google Serper\n", - "Action Input: \"Who won the US Open men's final in 2019?\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3mRafael Nadal defeated Daniil Medvedev in the final, 7–5, 6–3, 5–7, 4–6, 6–4 to win the men's singles tennis title at the 2019 US Open. It was his fourth US ... Draw: 128 (16 Q / 8 WC). Champion: Rafael Nadal. Runner-up: Daniil Medvedev. Score: 7–5, 6–3, 5–7, 4–6, 6–4. Bianca Andreescu won the women's singles title, defeating Serena Williams in straight sets in the final, becoming the first Canadian to win a Grand Slam singles ... Rafael Nadal won his 19th career Grand Slam title, and his fourth US Open crown, by surviving an all-time comback effort from Daniil ... Rafael Nadal beats Daniil Medvedev in US Open final to claim 19th major title. World No2 claims 7-5, 6-3, 5-7, 4-6, 6-4 victory over Russian ... Rafael Nadal defeated Daniil Medvedev in the men's singles final of the U.S. Open on Sunday. Rafael Nadal survived. The 33-year-old defeated Daniil Medvedev in the final of the 2019 U.S. Open to earn his 19th Grand Slam title Sunday ... NEW YORK -- Rafael Nadal defeated Daniil Medvedev in an epic five-set match, 7-5, 6-3, 5-7, 4-6, 6-4 to win the men's singles title at the ... Nadal previously won the U.S. Open three times, most recently in 2017. Ahead of the match, Nadal said he was “super happy to be back in the ... Watch the full match between Daniil Medvedev and Rafael ... Duration: 4:47:32. Posted: Mar 20, 2020. US Open 2019: Rafael Nadal beats Daniil Medvedev · Updated: Sep. 08, 2019, 11:11 p.m. |; Published: Sep · Published: Sep. 08, 2019, 10:06 p.m.. 26. US Open ...\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I now know that Rafael Nadal won the US Open men's final in 2019 and he is 33 years old.\n", + "Action Input: \"Who won the US Open men's final in 2019?\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mRafael Nadal defeated Daniil Medvedev in the final, 7–5, 6–3, 5–7, 4–6, 6–4 to win the men's singles tennis title at the 2019 US Open. It was his fourth US ... Draw: 128 (16 Q / 8 WC). Champion: Rafael Nadal. Runner-up: Daniil Medvedev. Score: 7–5, 6–3, 5–7, 4–6, 6–4. Bianca Andreescu won the women's singles title, defeating Serena Williams in straight sets in the final, becoming the first Canadian to win a Grand Slam singles ... Rafael Nadal won his 19th career Grand Slam title, and his fourth US Open crown, by surviving an all-time comback effort from Daniil ... Rafael Nadal beats Daniil Medvedev in US Open final to claim 19th major title. World No2 claims 7-5, 6-3, 5-7, 4-6, 6-4 victory over Russian ... Rafael Nadal defeated Daniil Medvedev in the men's singles final of the U.S. Open on Sunday. Rafael Nadal survived. The 33-year-old defeated Daniil Medvedev in the final of the 2019 U.S. Open to earn his 19th Grand Slam title Sunday ... NEW YORK -- Rafael Nadal defeated Daniil Medvedev in an epic five-set match, 7-5, 6-3, 5-7, 4-6, 6-4 to win the men's singles title at the ... Nadal previously won the U.S. Open three times, most recently in 2017. Ahead of the match, Nadal said he was “super happy to be back in the ... Watch the full match between Daniil Medvedev and Rafael ... Duration: 4:47:32. Posted: Mar 20, 2020. US Open 2019: Rafael Nadal beats Daniil Medvedev · Updated: Sep. 08, 2019, 11:11 p.m. |; Published: Sep · Published: Sep. 08, 2019, 10:06 p.m.. 26. US Open ...\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now know that Rafael Nadal won the US Open men's final in 2019 and he is 33 years old.\n", "Action: Calculator\n", - "Action Input: 33^0.334\u001B[0m\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 3.215019829667466\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I now know the final answer.\n", - "Final Answer: Rafael Nadal won the US Open men's final in 2019 and his age raised to the 0.334 power is 3.215019829667466.\u001B[0m\n", + "Action Input: 33^0.334\u001b[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 3.215019829667466\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer.\n", + "Final Answer: Rafael Nadal won the US Open men's final in 2019 and his age raised to the 0.334 power is 3.215019829667466.\u001b[0m\n", "\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", - "\u001B[32;1m\u001B[1;3m I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.\n", "Action: Google Serper\n", - "Action Input: \"Olivia Wilde boyfriend\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3mSudeikis and Wilde's relationship ended in November 2020. Wilde was publicly served with court documents regarding child custody while she was presenting Don't Worry Darling at CinemaCon 2022. In January 2021, Wilde began dating singer Harry Styles after meeting during the filming of Don't Worry Darling.\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I need to find out Harry Styles' age.\n", + "Action Input: \"Olivia Wilde boyfriend\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mSudeikis and Wilde's relationship ended in November 2020. Wilde was publicly served with court documents regarding child custody while she was presenting Don't Worry Darling at CinemaCon 2022. In January 2021, Wilde began dating singer Harry Styles after meeting during the filming of Don't Worry Darling.\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I need to find out Harry Styles' age.\n", "Action: Google Serper\n", - "Action Input: \"Harry Styles age\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3m29 years\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I need to calculate 29 raised to the 0.23 power.\n", + "Action Input: \"Harry Styles age\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3m29 years\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I need to calculate 29 raised to the 0.23 power.\n", "Action: Calculator\n", - "Action Input: 29^0.23\u001B[0m\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 2.169459462491557\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I now know the final answer.\n", - "Final Answer: Harry Styles is Olivia Wilde's boyfriend and his current age raised to the 0.23 power is 2.169459462491557.\u001B[0m\n", + "Action Input: 29^0.23\u001b[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.169459462491557\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer.\n", + "Final Answer: Harry Styles is Olivia Wilde's boyfriend and his current age raised to the 0.23 power is 2.169459462491557.\u001b[0m\n", "\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", - "\u001B[32;1m\u001B[1;3m I need to find out who won the most recent grand prix and then calculate their age raised to the 0.23 power.\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I need to find out who won the most recent grand prix and then calculate their age raised to the 0.23 power.\n", "Action: Google Serper\n", - "Action Input: \"who won the most recent formula 1 grand prix\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3mMax Verstappen won his first Formula 1 world title on Sunday after the championship was decided by a last-lap overtake of his rival Lewis Hamilton in the Abu Dhabi Grand Prix. Dec 12, 2021\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I need to find out Max Verstappen's age\n", + "Action Input: \"who won the most recent formula 1 grand prix\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mMax Verstappen won his first Formula 1 world title on Sunday after the championship was decided by a last-lap overtake of his rival Lewis Hamilton in the Abu Dhabi Grand Prix. Dec 12, 2021\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I need to find out Max Verstappen's age\n", "Action: Google Serper\n", - "Action Input: \"Max Verstappen age\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3m25 years\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I need to calculate 25 raised to the 0.23 power\n", + "Action Input: \"Max Verstappen age\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3m25 years\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I need to calculate 25 raised to the 0.23 power\n", "Action: Calculator\n", - "Action Input: 25^0.23\u001B[0m\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 2.096651272316035\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I now know the final answer\n", - "Final Answer: Max Verstappen, aged 25, won the most recent Formula 1 grand prix and his age raised to the 0.23 power is 2.096651272316035.\u001B[0m\n", + "Action Input: 25^0.23\u001b[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.096651272316035\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n", + "Final Answer: Max Verstappen, aged 25, won the most recent Formula 1 grand prix and his age raised to the 0.23 power is 2.096651272316035.\u001b[0m\n", "\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", - "\u001B[32;1m\u001B[1;3m I need to find out who won the US Open women's final in 2019 and then calculate her age raised to the 0.34 power.\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I need to find out who won the US Open women's final in 2019 and then calculate her age raised to the 0.34 power.\n", "Action: Google Serper\n", - "Action Input: \"US Open women's final 2019 winner\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3mWHAT HAPPENED: #SheTheNorth? She the champion. Nineteen-year-old Canadian Bianca Andreescu sealed her first Grand Slam title on Saturday, downing 23-time major champion Serena Williams in the 2019 US Open women's singles final, 6-3, 7-5. Sep 7, 2019\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I now need to calculate her age raised to the 0.34 power.\n", + "Action Input: \"US Open women's final 2019 winner\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mWHAT HAPPENED: #SheTheNorth? She the champion. Nineteen-year-old Canadian Bianca Andreescu sealed her first Grand Slam title on Saturday, downing 23-time major champion Serena Williams in the 2019 US Open women's singles final, 6-3, 7-5. Sep 7, 2019\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now need to calculate her age raised to the 0.34 power.\n", "Action: Calculator\n", - "Action Input: 19^0.34\u001B[0m\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 2.7212987634680084\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I now know the final answer.\n", - "Final Answer: Nineteen-year-old Canadian Bianca Andreescu won the US Open women's final in 2019 and her age raised to the 0.34 power is 2.7212987634680084.\u001B[0m\n", + "Action Input: 19^0.34\u001b[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.7212987634680084\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer.\n", + "Final Answer: Nineteen-year-old Canadian Bianca Andreescu won the US Open women's final in 2019 and her age raised to the 0.34 power is 2.7212987634680084.\u001b[0m\n", "\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", - "\u001B[32;1m\u001B[1;3m I need to find out who Beyonce's husband is and then calculate his age raised to the 0.19 power.\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I need to find out who Beyonce's husband is and then calculate his age raised to the 0.19 power.\n", "Action: Google Serper\n", - "Action Input: \"Who is Beyonce's husband?\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3mJay-Z\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I need to find out Jay-Z's age\n", + "Action Input: \"Who is Beyonce's husband?\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mJay-Z\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I need to find out Jay-Z's age\n", "Action: Google Serper\n", - "Action Input: \"How old is Jay-Z?\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3m53 years\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I need to calculate 53 raised to the 0.19 power\n", + "Action Input: \"How old is Jay-Z?\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3m53 years\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I need to calculate 53 raised to the 0.19 power\n", "Action: Calculator\n", - "Action Input: 53^0.19\u001B[0m\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 2.12624064206896\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I now know the final answer\n", - "Final Answer: Jay-Z is Beyonce's husband and his age raised to the 0.19 power is 2.12624064206896.\u001B[0m\n", + "Action Input: 53^0.19\u001b[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.12624064206896\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n", + "Final Answer: Jay-Z is Beyonce's husband and his age raised to the 0.19 power is 2.12624064206896.\u001b[0m\n", "\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "Serial executed in 89.97 seconds.\n" ] } @@ -197,77 +197,77 @@ "text": [ "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\n", "\n", - "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n", - "\u001B[32;1m\u001B[1;3m I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.\n", "Action: Google Serper\n", - "Action Input: \"Olivia Wilde boyfriend\"\u001B[0m\u001B[32;1m\u001B[1;3m I need to find out who Beyonce's husband is and then calculate his age raised to the 0.19 power.\n", + "Action Input: \"Olivia Wilde boyfriend\"\u001b[0m\u001b[32;1m\u001b[1;3m I need to find out who Beyonce's husband is and then calculate his age raised to the 0.19 power.\n", "Action: Google Serper\n", - "Action Input: \"Who is Beyonce's husband?\"\u001B[0m\u001B[32;1m\u001B[1;3m I need to find out who won the most recent formula 1 grand prix and then calculate their age raised to the 0.23 power.\n", + "Action Input: \"Who is Beyonce's husband?\"\u001b[0m\u001b[32;1m\u001b[1;3m I need to find out who won the most recent formula 1 grand prix and then calculate their age raised to the 0.23 power.\n", "Action: Google Serper\n", - "Action Input: \"most recent formula 1 grand prix winner\"\u001B[0m\u001B[32;1m\u001B[1;3m I need to find out who won the US Open men's final in 2019 and then calculate his age raised to the 0.334 power.\n", + "Action Input: \"most recent formula 1 grand prix winner\"\u001b[0m\u001b[32;1m\u001b[1;3m I need to find out who won the US Open men's final in 2019 and then calculate his age raised to the 0.334 power.\n", "Action: Google Serper\n", - "Action Input: \"Who won the US Open men's final in 2019?\"\u001B[0m\u001B[32;1m\u001B[1;3m I need to find out who won the US Open women's final in 2019 and then calculate her age raised to the 0.34 power.\n", + "Action Input: \"Who won the US Open men's final in 2019?\"\u001b[0m\u001b[32;1m\u001b[1;3m I need to find out who won the US Open women's final in 2019 and then calculate her age raised to the 0.34 power.\n", "Action: Google Serper\n", - "Action Input: \"US Open women's final 2019 winner\"\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3mSudeikis and Wilde's relationship ended in November 2020. Wilde was publicly served with court documents regarding child custody while she was presenting Don't Worry Darling at CinemaCon 2022. In January 2021, Wilde began dating singer Harry Styles after meeting during the filming of Don't Worry Darling.\u001B[0m\n", + "Action Input: \"US Open women's final 2019 winner\"\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mSudeikis and Wilde's relationship ended in November 2020. Wilde was publicly served with court documents regarding child custody while she was presenting Don't Worry Darling at CinemaCon 2022. In January 2021, Wilde began dating singer Harry Styles after meeting during the filming of Don't Worry Darling.\u001b[0m\n", "Thought:\n", - "Observation: \u001B[36;1m\u001B[1;3mJay-Z\u001B[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mJay-Z\u001b[0m\n", "Thought:\n", - "Observation: \u001B[36;1m\u001B[1;3mRafael Nadal defeated Daniil Medvedev in the final, 7–5, 6–3, 5–7, 4–6, 6–4 to win the men's singles tennis title at the 2019 US Open. It was his fourth US ... Draw: 128 (16 Q / 8 WC). Champion: Rafael Nadal. Runner-up: Daniil Medvedev. Score: 7–5, 6–3, 5–7, 4–6, 6–4. Bianca Andreescu won the women's singles title, defeating Serena Williams in straight sets in the final, becoming the first Canadian to win a Grand Slam singles ... Rafael Nadal won his 19th career Grand Slam title, and his fourth US Open crown, by surviving an all-time comback effort from Daniil ... Rafael Nadal beats Daniil Medvedev in US Open final to claim 19th major title. World No2 claims 7-5, 6-3, 5-7, 4-6, 6-4 victory over Russian ... Rafael Nadal defeated Daniil Medvedev in the men's singles final of the U.S. Open on Sunday. Rafael Nadal survived. The 33-year-old defeated Daniil Medvedev in the final of the 2019 U.S. Open to earn his 19th Grand Slam title Sunday ... NEW YORK -- Rafael Nadal defeated Daniil Medvedev in an epic five-set match, 7-5, 6-3, 5-7, 4-6, 6-4 to win the men's singles title at the ... Nadal previously won the U.S. Open three times, most recently in 2017. Ahead of the match, Nadal said he was “super happy to be back in the ... Watch the full match between Daniil Medvedev and Rafael ... Duration: 4:47:32. Posted: Mar 20, 2020. US Open 2019: Rafael Nadal beats Daniil Medvedev · Updated: Sep. 08, 2019, 11:11 p.m. |; Published: Sep · Published: Sep. 08, 2019, 10:06 p.m.. 26. US Open ...\u001B[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mRafael Nadal defeated Daniil Medvedev in the final, 7–5, 6–3, 5–7, 4–6, 6–4 to win the men's singles tennis title at the 2019 US Open. It was his fourth US ... Draw: 128 (16 Q / 8 WC). Champion: Rafael Nadal. Runner-up: Daniil Medvedev. Score: 7–5, 6–3, 5–7, 4–6, 6–4. Bianca Andreescu won the women's singles title, defeating Serena Williams in straight sets in the final, becoming the first Canadian to win a Grand Slam singles ... Rafael Nadal won his 19th career Grand Slam title, and his fourth US Open crown, by surviving an all-time comback effort from Daniil ... Rafael Nadal beats Daniil Medvedev in US Open final to claim 19th major title. World No2 claims 7-5, 6-3, 5-7, 4-6, 6-4 victory over Russian ... Rafael Nadal defeated Daniil Medvedev in the men's singles final of the U.S. Open on Sunday. Rafael Nadal survived. The 33-year-old defeated Daniil Medvedev in the final of the 2019 U.S. Open to earn his 19th Grand Slam title Sunday ... NEW YORK -- Rafael Nadal defeated Daniil Medvedev in an epic five-set match, 7-5, 6-3, 5-7, 4-6, 6-4 to win the men's singles title at the ... Nadal previously won the U.S. Open three times, most recently in 2017. Ahead of the match, Nadal said he was “super happy to be back in the ... Watch the full match between Daniil Medvedev and Rafael ... Duration: 4:47:32. Posted: Mar 20, 2020. US Open 2019: Rafael Nadal beats Daniil Medvedev · Updated: Sep. 08, 2019, 11:11 p.m. |; Published: Sep · Published: Sep. 08, 2019, 10:06 p.m.. 26. US Open ...\u001b[0m\n", "Thought:\n", - "Observation: \u001B[36;1m\u001B[1;3mWHAT HAPPENED: #SheTheNorth? She the champion. Nineteen-year-old Canadian Bianca Andreescu sealed her first Grand Slam title on Saturday, downing 23-time major champion Serena Williams in the 2019 US Open women's singles final, 6-3, 7-5. Sep 7, 2019\u001B[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mWHAT HAPPENED: #SheTheNorth? She the champion. Nineteen-year-old Canadian Bianca Andreescu sealed her first Grand Slam title on Saturday, downing 23-time major champion Serena Williams in the 2019 US Open women's singles final, 6-3, 7-5. Sep 7, 2019\u001b[0m\n", "Thought:\n", - "Observation: \u001B[36;1m\u001B[1;3mLewis Hamilton holds the record for the most race wins in Formula One history, with 103 wins to date. Michael Schumacher, the previous record holder, ... Michael Schumacher (top left) and Lewis Hamilton (top right) have each won the championship a record seven times during their careers, while Sebastian Vettel ( ... Grand Prix, Date, Winner, Car, Laps, Time. Bahrain, 05 Mar 2023, Max Verstappen VER, Red Bull Racing Honda RBPT, 57, 1:33:56.736. Saudi Arabia, 19 Mar 2023 ... The Red Bull driver Max Verstappen of the Netherlands celebrated winning his first Formula 1 world title at the Abu Dhabi Grand Prix. Perez wins sprint as Verstappen, Russell clash. Red Bull's Sergio Perez won the first sprint of the 2023 Formula One season after catching and passing Charles ... The most successful driver in the history of F1 is Lewis Hamilton. The man from Stevenage has won 103 Grands Prix throughout his illustrious career and is still ... Lewis Hamilton: 103. Max Verstappen: 37. Michael Schumacher: 91. Fernando Alonso: 32. Max Verstappen and Sergio Perez will race in a very different-looking Red Bull this weekend after the team unveiled a striking special livery for the Miami GP. Lewis Hamilton holds the record of most victories with 103, ahead of Michael Schumacher (91) and Sebastian Vettel (53). Schumacher also holds the record for the ... Lewis Hamilton holds the record for the most race wins in Formula One history, with 103 wins to date. Michael Schumacher, the previous record holder, is second ...\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I need to find out Harry Styles' age.\n", + "Observation: \u001b[36;1m\u001b[1;3mLewis Hamilton holds the record for the most race wins in Formula One history, with 103 wins to date. Michael Schumacher, the previous record holder, ... Michael Schumacher (top left) and Lewis Hamilton (top right) have each won the championship a record seven times during their careers, while Sebastian Vettel ( ... Grand Prix, Date, Winner, Car, Laps, Time. Bahrain, 05 Mar 2023, Max Verstappen VER, Red Bull Racing Honda RBPT, 57, 1:33:56.736. Saudi Arabia, 19 Mar 2023 ... The Red Bull driver Max Verstappen of the Netherlands celebrated winning his first Formula 1 world title at the Abu Dhabi Grand Prix. Perez wins sprint as Verstappen, Russell clash. Red Bull's Sergio Perez won the first sprint of the 2023 Formula One season after catching and passing Charles ... The most successful driver in the history of F1 is Lewis Hamilton. The man from Stevenage has won 103 Grands Prix throughout his illustrious career and is still ... Lewis Hamilton: 103. Max Verstappen: 37. Michael Schumacher: 91. Fernando Alonso: 32. Max Verstappen and Sergio Perez will race in a very different-looking Red Bull this weekend after the team unveiled a striking special livery for the Miami GP. Lewis Hamilton holds the record of most victories with 103, ahead of Michael Schumacher (91) and Sebastian Vettel (53). Schumacher also holds the record for the ... Lewis Hamilton holds the record for the most race wins in Formula One history, with 103 wins to date. Michael Schumacher, the previous record holder, is second ...\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I need to find out Harry Styles' age.\n", "Action: Google Serper\n", - "Action Input: \"Harry Styles age\"\u001B[0m\u001B[32;1m\u001B[1;3m I need to find out Jay-Z's age\n", + "Action Input: \"Harry Styles age\"\u001b[0m\u001b[32;1m\u001b[1;3m I need to find out Jay-Z's age\n", "Action: Google Serper\n", - "Action Input: \"How old is Jay-Z?\"\u001B[0m\u001B[32;1m\u001B[1;3m I now know that Rafael Nadal won the US Open men's final in 2019 and he is 33 years old.\n", + "Action Input: \"How old is Jay-Z?\"\u001b[0m\u001b[32;1m\u001b[1;3m I now know that Rafael Nadal won the US Open men's final in 2019 and he is 33 years old.\n", "Action: Calculator\n", - "Action Input: 33^0.334\u001B[0m\u001B[32;1m\u001B[1;3m I now need to calculate her age raised to the 0.34 power.\n", + "Action Input: 33^0.334\u001b[0m\u001b[32;1m\u001b[1;3m I now need to calculate her age raised to the 0.34 power.\n", "Action: Calculator\n", - "Action Input: 19^0.34\u001B[0m\n", - "Observation: \u001B[36;1m\u001B[1;3m29 years\u001B[0m\n", + "Action Input: 19^0.34\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3m29 years\u001b[0m\n", "Thought:\n", - "Observation: \u001B[36;1m\u001B[1;3m53 years\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m Max Verstappen won the most recent Formula 1 grand prix.\n", + "Observation: \u001b[36;1m\u001b[1;3m53 years\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m Max Verstappen won the most recent Formula 1 grand prix.\n", "Action: Calculator\n", - "Action Input: Max Verstappen's age (23) raised to the 0.23 power\u001B[0m\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 2.7212987634680084\u001B[0m\n", + "Action Input: Max Verstappen's age (23) raised to the 0.23 power\u001b[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.7212987634680084\u001b[0m\n", "Thought:\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 3.215019829667466\u001B[0m\n", - "Thought:\u001B[32;1m\u001B[1;3m I need to calculate 29 raised to the 0.23 power.\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 3.215019829667466\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I need to calculate 29 raised to the 0.23 power.\n", "Action: Calculator\n", - "Action Input: 29^0.23\u001B[0m\u001B[32;1m\u001B[1;3m I need to calculate 53 raised to the 0.19 power\n", + "Action Input: 29^0.23\u001b[0m\u001b[32;1m\u001b[1;3m I need to calculate 53 raised to the 0.19 power\n", "Action: Calculator\n", - "Action Input: 53^0.19\u001B[0m\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 2.0568252837687546\u001B[0m\n", + "Action Input: 53^0.19\u001b[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.0568252837687546\u001b[0m\n", "Thought:\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 2.169459462491557\u001B[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.169459462491557\u001b[0m\n", "Thought:\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "\n", - "Observation: \u001B[33;1m\u001B[1;3mAnswer: 2.12624064206896\u001B[0m\n", + "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.12624064206896\u001b[0m\n", "Thought:\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "\n", - "\u001B[1m> Finished chain.\u001B[0m\n", + "\u001b[1m> Finished chain.\u001b[0m\n", "Concurrent executed in 17.52 seconds.\n" ] } diff --git a/docs/extras/modules/callbacks/tags.mdx b/docs/extras/modules/callbacks/tags.mdx index f8bcc42da..87d9b7beb 100644 --- a/docs/extras/modules/callbacks/tags.mdx +++ b/docs/extras/modules/callbacks/tags.mdx @@ -1,3 +1,3 @@ # Tags -You can add tags to your callbacks by passing a `tags` argument to the `call()`/`run()`/`apply()` methods. This is useful for filtering your logs, eg. if you want to log all requests made to a specific LLMChain, you can add a tag, and then filter your logs by that tag. You can pass tags to both constructor and request callbacks, see the examples above for details. These tags are then passed to the `tags` argument of the "start" callback methods, ie. `on_llm_start`, `on_chat_model_start`, `on_chain_start`, `on_tool_start`. +You can add tags to your callbacks by passing a `tags` argument to the `call()`/`run()`/`apply()` methods. This is useful for filtering your logs, e.g. if you want to log all requests made to a specific LLMChain, you can add a tag, and then filter your logs by that tag. You can pass tags to both constructor and request callbacks, see the examples above for details. These tags are then passed to the `tags` argument of the "start" callback methods, ie. `on_llm_start`, `on_chat_model_start`, `on_chain_start`, `on_tool_start`. diff --git a/docs/extras/modules/data_connection/indexing.ipynb b/docs/extras/modules/data_connection/indexing.ipynb new file mode 100644 index 000000000..28914efaa --- /dev/null +++ b/docs/extras/modules/data_connection/indexing.ipynb @@ -0,0 +1,916 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0fe57ac5-31c5-4dbb-b96c-78dead32e1bd", + "metadata": {}, + "source": [ + "# Indexing\n", + "\n", + "Here, we will look at a basic indexing workflow using the LangChain indexing API. \n", + "\n", + "The indexing API lets you load and keep in sync documents from any source into a vector store. Specifically, it helps:\n", + "\n", + "* Avoid writing duplicated content into the vector store\n", + "* Avoid re-writing unchanged content\n", + "* Avoid re-computing embeddings over unchanged content\n", + "\n", + "All of which should save you time and money, as well as improve your vector search results.\n", + "\n", + "Crucially, the indexing API will work even with documents that have gone through several \n", + "transformation steps (e.g., via text chunking) with respect to the original source documents.\n", + "\n", + "## How it works\n", + "\n", + "LangChain indexing makes use of a record manager (`RecordManager`) that keeps track of document writes into the vector store.\n", + "\n", + "When indexing content, hashes are computed for each document, and the following information is stored in the record manager: \n", + "\n", + "- the document hash (hash of both page content and metadata)\n", + "- write time\n", + "- the source id -- each document should include information in its metadata to allow us to determine the ultimate source of this document\n", + "\n", + "## Deletion modes\n", + "\n", + "When indexing documents into a vector store, it's possible that some existing documents in the vector store should be deleted. In certain situations you may want to remove any existing documents that are derived from the same sources as the new documents being indexed. In others you may want to delete all existing documents wholesale. The indexing API deletion modes let you pick the behavior you want:\n", + "\n", + "| Delete Mode | De-Duplicates Content | Parallelizable | Cleans Up Deleted Source Docs | Cleans Up Mutations of Source Docs and/or Derived Docs | Clean Up Timing |\n", + "|-------------|-----------------------|---------------|----------------------------------|----------------------------------------------------|---------------------|\n", + "| None | ✅ | ✅ | ❌ | ❌ | - |\n", + "| Incremental | ✅ | ✅ | ❌ | ✅ | Continuously |\n", + "| Full | ✅ | ❌ | ✅ | ✅ | At end of indexing |\n", + "\n", + "\n", + "`None` does not do any automatic clean up, allowing the user to manually do clean up of old content. \n", + "\n", + "`incremental` and `full` offer the following automated clean up:\n", + "\n", + "* If the content of source document or derived documents has **changed**, both `incremental` or `full` modes will clean up (delete) previous versions of the content.\n", + "* If the source document has been **deleted** (meaning it is not included in the documents currently being indexed), the `full` delete mode will delete it from the vector store correctly, but the `incremental` mode will not.\n", + "\n", + "When content is mutated (e.g., the source PDF file was revised) there will be a period of time during indexing when both the new and old versions may be returned to the user. This happens after the new content was written, but before the old version was deleted.\n", + "\n", + "* `incremental` indexing minimizes this period of time as it is able to do clean up continuously, as it writes.\n", + "* `full` mode does the clean up after all batches have been written.\n", + "\n", + "## Requirements\n", + "\n", + "1. Do not use with a store that has been pre-populated with content independently of the indexing API, as the record manager will not know that records have been inserted previously.\n", + "2. Only works with LangChain ``VectorStore``'s that support:\n", + " * document addition by id (`add_documents` method with `ids` argument)\n", + " * delete by id (`delete` method with)\n", + " \n", + "## Caution\n", + "\n", + "The record manager relies on a time-based mechanism to determine what content can be cleaned up (when using `full` or `incremental` delete modes).\n", + "\n", + "If two tasks run back to back, and the first task finishes before the the clock time changes, then the second task may not be able to clean up content.\n", + "\n", + "This is unlikely to be an issue in actual settings for the following reasons:\n", + "\n", + "1. The RecordManager uses higher resolutino timestamps.\n", + "2. The data would need to change between the first and the second tasks runs, which becomes unlikely if the time interval between the tasks is small.\n", + "3. Indexing tasks typically take more than a few ms." + ] + }, + { + "cell_type": "markdown", + "id": "ec2109b4-cbcc-44eb-9dac-3f7345f971dc", + "metadata": {}, + "source": [ + "## Quickstart" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "15f7263e-c82e-4914-874f-9699ea4de93e", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.embeddings import OpenAIEmbeddings\n", + "from langchain.indexes import SQLRecordManager, index\n", + "from langchain.schema import Document\n", + "from langchain.vectorstores import ElasticsearchStore" + ] + }, + { + "cell_type": "markdown", + "id": "f81201ab-d997-433c-9f18-ceea70e61cbd", + "metadata": {}, + "source": [ + "Initialize a vector store and set up the embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "4ffc9659-91c0-41e0-ae4b-f7ff0d97292d", + "metadata": {}, + "outputs": [], + "source": [ + "collection_name = \"test_index\"\n", + "\n", + "embedding = OpenAIEmbeddings()\n", + "\n", + "vectorstore = ElasticsearchStore(\n", + " es_url=\"http://localhost:9200\", index_name=\"test_index\", embedding=embedding\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "b9b7564f-2334-428b-b513-13045a08b56c", + "metadata": {}, + "source": [ + "Initialize a record manager with an appropriate namespace.\n", + "\n", + "**Suggestion** Use a namespace that takes into account both the vectostore and the collection name in the vectorstore; e.g., 'redis/my_docs', 'chromadb/my_docs' or 'postgres/my_docs'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "498cc80e-c339-49ee-893b-b18d06346ef8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "namespace = f\"elasticsearch/{collection_name}\"\n", + "record_manager = SQLRecordManager(\n", + " namespace, db_url=\"sqlite:///record_manager_cache.sql\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "835c2c19-68ec-4086-9066-f7ba40877fd5", + "metadata": {}, + "source": [ + "Create a schema before using the record manager" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a4be2da3-3a5c-468a-a824-560157290f7f", + "metadata": {}, + "outputs": [], + "source": [ + "record_manager.create_schema()" + ] + }, + { + "cell_type": "markdown", + "id": "7f07c6bd-6ada-4b17-a8c5-fe5e4a5278fd", + "metadata": {}, + "source": [ + "Let's index some test documents" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "bbfdf314-14f9-4799-8fb6-d42de4d51287", + "metadata": {}, + "outputs": [], + "source": [ + "doc1 = Document(page_content=\"kitty\", metadata={\"source\": \"kitty.txt\"})\n", + "doc2 = Document(page_content=\"doggy\", metadata={\"source\": \"doggy.txt\"})" + ] + }, + { + "cell_type": "markdown", + "id": "c7d572be-a913-4511-ab64-2864a252458a", + "metadata": {}, + "source": [ + "Indexing into an empty vectorstore" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "67d2a5c8-f2bd-489a-b58e-2c7ba7fefe6f", + "metadata": {}, + "outputs": [], + "source": [ + "def _clear():\n", + " \"\"\"Hacky helper method to clear content. See the `full` mode section to to understand why it works.\"\"\"\n", + " index([], record_manager, vectorstore, delete_mode=\"full\", source_id_key=\"source\")" + ] + }, + { + "cell_type": "markdown", + "id": "e5e92e76-f23f-4a61-8a2d-f16baf288700", + "metadata": {}, + "source": [ + "### ``None`` deletion mode\n", + "\n", + "This mode does not do automatic clean up of old versions of content; however, it still takes care of content de-duplication." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e2288cee-1738-4054-af72-23b5c5be8840", + "metadata": {}, + "outputs": [], + "source": [ + "_clear()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b253483b-5be0-4151-b732-ca93db4457b1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 1, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " [doc1, doc1, doc1, doc1, doc1],\n", + " record_manager,\n", + " vectorstore,\n", + " delete_mode=None,\n", + " source_id_key=\"source\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "7abaf351-bf5a-4d9e-95cd-4e3ecbfc1a84", + "metadata": {}, + "outputs": [], + "source": [ + "_clear()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "55b6873c-5907-4fa6-84ca-df6cdf1810f0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 2, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " [doc1, doc2], record_manager, vectorstore, delete_mode=None, source_id_key=\"source\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "7be3e55a-5fe9-4f40-beff-577c2aa5e76a", + "metadata": {}, + "source": [ + "Second time around all content will be skipped" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "59d74ca1-2e3d-4b4c-ad88-a4907aa20081", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 0, 'num_updated': 0, 'num_skipped': 2, 'num_deleted': 0}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " [doc1, doc2], record_manager, vectorstore, delete_mode=None, source_id_key=\"source\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "237a809e-575d-4f02-870e-5906a3643f30", + "metadata": {}, + "source": [ + "### ``\"incremental\"`` deletion mode" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6bc91073-0ab4-465a-9302-e7f4bbd2285c", + "metadata": {}, + "outputs": [], + "source": [ + "_clear()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4a551091-6d46-4cdd-9af9-8672e5866a0a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 2, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " [doc1, doc2],\n", + " record_manager,\n", + " vectorstore,\n", + " delete_mode=\"incremental\",\n", + " source_id_key=\"source\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "d0604ab8-318c-4706-959b-3907af438630", + "metadata": {}, + "source": [ + "Indexing again should result in both documents getting **skipped** -- also skipping the embedding operation!" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "81785863-391b-4578-a6f6-63b3e5285488", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 0, 'num_updated': 0, 'num_skipped': 2, 'num_deleted': 0}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " [doc1, doc2],\n", + " record_manager,\n", + " vectorstore,\n", + " delete_mode=\"incremental\",\n", + " source_id_key=\"source\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "b205c1ba-f069-4a4e-af93-dc98afd5c9e6", + "metadata": {}, + "source": [ + "If we provide no documents with incremental indexing mode, nothing will change" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "1f73ca85-7478-48ab-976c-17b00beec7bd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 0, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " [], record_manager, vectorstore, delete_mode=\"incremental\", source_id_key=\"source\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "b8c4ac96-8d60-4ade-8a94-e76ccb536442", + "metadata": {}, + "source": [ + "If we mutate a document, the new version will be written and all old versions sharing the same source will be deleted." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "27d05bcb-d96d-42eb-88a8-54b33d6cfcdc", + "metadata": {}, + "outputs": [], + "source": [ + "changed_doc_2 = Document(page_content=\"puppy\", metadata={\"source\": \"doggy.txt\"})" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3809e379-5962-4267-add9-b10f43e24c66", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 1, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 1}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " [changed_doc_2],\n", + " record_manager,\n", + " vectorstore,\n", + " delete_mode=\"incremental\",\n", + " source_id_key=\"source\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "8bc75b9c-784a-4eb6-b5d6-688e3fbd4658", + "metadata": {}, + "source": [ + "### ``\"full\"`` deletion mode\n", + "\n", + "In `full` mode the user should pass the `full` universe of content that should be indexed into the indexing function.\n", + "\n", + "Any documents that are not passed into the indexing functino and are present in the vectorstore will be deleted!\n", + "\n", + "This behavior is useful to handle deletions of source documents." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "38a14a3d-11c7-43e2-b7f1-08e487961bb5", + "metadata": {}, + "outputs": [], + "source": [ + "_clear()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "46b5d7b6-ce91-47d2-a9d0-f390e77d847f", + "metadata": {}, + "outputs": [], + "source": [ + "all_docs = [doc1, doc2]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "06954765-6155-40a0-b95e-33ef87754c8d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 2, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(all_docs, record_manager, vectorstore, delete_mode=\"full\", source_id_key=\"source\")" + ] + }, + { + "cell_type": "markdown", + "id": "887c45c6-4363-4389-ac56-9cdad682b4c8", + "metadata": {}, + "source": [ + "Say someone deleted the first doc" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "35270e4e-9b03-4486-95de-e819ca5e469f", + "metadata": {}, + "outputs": [], + "source": [ + "del all_docs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "7d835a6a-f468-4d79-9a3d-47db187edbb8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='doggy', metadata={'source': 'doggy.txt'})]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_docs" + ] + }, + { + "cell_type": "markdown", + "id": "d940bcb4-cf6d-4c21-a565-e7f53f6dacf1", + "metadata": {}, + "source": [ + "Using full mode will clean up the deleted content as well" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "1b660eae-3bed-434d-a6f5-2aec96e5f0d6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 0, 'num_updated': 0, 'num_skipped': 1, 'num_deleted': 1}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(all_docs, record_manager, vectorstore, delete_mode=\"full\", source_id_key=\"source\")" + ] + }, + { + "cell_type": "markdown", + "id": "1a7ecdc9-df3c-4601-b2f3-50fdffc6e5f9", + "metadata": {}, + "source": [ + "## Source " + ] + }, + { + "cell_type": "markdown", + "id": "4002a4ac-02dd-4599-9b23-9b59f54237c8", + "metadata": {}, + "source": [ + "The metadata attribute contains a filed called `source`. This source should be pointing at the *ultimate* provenance associated with the given document.\n", + "\n", + "For example, if these documents are representing chunks of some parent document, the `source` for both documents should be the same and reference the parent document.\n", + "\n", + "In general, `source` should always be specified. Only use a `None`, if you **never** intend to use `incremental` mode, and for some reason can't specify the `source` field correctly." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "184d3051-7fd1-4db2-a1d5-218ac0e1e641", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.text_splitter import CharacterTextSplitter" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "11318248-ad2a-4ef0-bd9b-9d4dab97caba", + "metadata": {}, + "outputs": [], + "source": [ + "doc1 = Document(\n", + " page_content=\"kitty kitty kitty kitty kitty\", metadata={\"source\": \"kitty.txt\"}\n", + ")\n", + "doc2 = Document(page_content=\"doggy doggy the doggy\", metadata={\"source\": \"doggy.txt\"})" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "2cbf0902-d17b-44c9-8983-e8d0e831f909", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='kitty kit', metadata={'source': 'kitty.txt'}),\n", + " Document(page_content='tty kitty ki', metadata={'source': 'kitty.txt'}),\n", + " Document(page_content='tty kitty', metadata={'source': 'kitty.txt'}),\n", + " Document(page_content='doggy doggy', metadata={'source': 'doggy.txt'}),\n", + " Document(page_content='the doggy', metadata={'source': 'doggy.txt'})]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_docs = CharacterTextSplitter(\n", + " separator=\"t\", keep_separator=True, chunk_size=12, chunk_overlap=2\n", + ").split_documents([doc1, doc2])\n", + "new_docs" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "0f9d9bc2-ea85-48ab-b4a2-351c8708b1d4", + "metadata": {}, + "outputs": [], + "source": [ + "_clear()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "58781d81-f273-4aeb-8df6-540236826d00", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 5, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " new_docs,\n", + " record_manager,\n", + " vectorstore,\n", + " delete_mode=\"incremental\",\n", + " source_id_key=\"source\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "11b81cb6-5f04-499b-b125-1abb22d353bf", + "metadata": {}, + "outputs": [], + "source": [ + "changed_doggy_docs = [\n", + " Document(page_content=\"woof woof\", metadata={\"source\": \"doggy.txt\"}),\n", + " Document(page_content=\"woof woof woof\", metadata={\"source\": \"doggy.txt\"}),\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "ab1c0915-3f9e-42ac-bdb5-3017935c6e7f", + "metadata": {}, + "source": [ + "This should delete the old versions of documents associated with `doggy.txt` source and replace them with the new versions" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "fec71cb5-6757-4b92-a306-62509f6e867d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 0, 'num_updated': 0, 'num_skipped': 2, 'num_deleted': 2}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(\n", + " changed_doggy_docs,\n", + " record_manager,\n", + " vectorstore,\n", + " delete_mode=\"incremental\",\n", + " source_id_key=\"source\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "876f5ab6-4b25-423e-8cff-f5a7a014395b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='tty kitty', metadata={'source': 'kitty.txt'}),\n", + " Document(page_content='tty kitty ki', metadata={'source': 'kitty.txt'}),\n", + " Document(page_content='kitty kit', metadata={'source': 'kitty.txt'})]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vectorstore.similarity_search(\"dog\", k=30)" + ] + }, + { + "cell_type": "markdown", + "id": "c0af4d24-d735-4e5d-ad9b-a2e8b281f9f1", + "metadata": {}, + "source": [ + "## Using with Loaders\n", + "\n", + "Indexing can accept either an iterable of documents or else any loader.\n", + "\n", + "**Attention** The loader **MUST** set source keys correctly." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "08b68357-27c0-4f07-a51d-61c986aeb359", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders.base import BaseLoader\n", + "\n", + "\n", + "class MyCustomLoader(BaseLoader):\n", + " def lazy_load(self):\n", + " text_splitter = CharacterTextSplitter(\n", + " separator=\"t\", keep_separator=True, chunk_size=12, chunk_overlap=2\n", + " )\n", + " docs = [\n", + " Document(page_content=\"woof woof\", metadata={\"source\": \"doggy.txt\"}),\n", + " Document(page_content=\"woof woof woof\", metadata={\"source\": \"doggy.txt\"}),\n", + " ]\n", + " yield from text_splitter.split_documents(docs)\n", + "\n", + " def load(self):\n", + " return list(self.lazy_load())" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "5dae8e11-c0d6-4fc6-aa0e-68f8d92b5087", + "metadata": {}, + "outputs": [], + "source": [ + "_clear()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "d8d72f76-6d6e-4a7c-8fea-9bdec05af05b", + "metadata": {}, + "outputs": [], + "source": [ + "loader = MyCustomLoader()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "945c45cc-5a8d-4bd7-9f36-4ebd4a50e08b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='woof woof', metadata={'source': 'doggy.txt'}),\n", + " Document(page_content='woof woof woof', metadata={'source': 'doggy.txt'})]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "loader.load()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "dcb1ba71-db49-4140-ab4a-c5d64fc2578a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'num_added': 2, 'num_updated': 0, 'num_skipped': 0, 'num_deleted': 0}" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index(loader, record_manager, vectorstore, delete_mode=\"full\", source_id_key=\"source\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "441159c1-dd84-48d7-8599-37a65c9fb589", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content='woof woof', metadata={'source': 'doggy.txt'}),\n", + " Document(page_content='woof woof woof', metadata={'source': 'doggy.txt'})]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vectorstore.similarity_search(\"dog\", k=30)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/modules/data_connection/retrievers/multi_vector.ipynb b/docs/extras/modules/data_connection/retrievers/multi_vector.ipynb new file mode 100644 index 000000000..9197b5168 --- /dev/null +++ b/docs/extras/modules/data_connection/retrievers/multi_vector.ipynb @@ -0,0 +1,579 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d9172545", + "metadata": {}, + "source": [ + "# MultiVector Retriever\n", + "\n", + "It can often be beneficial to store multiple vectors per document. There are multiple use cases where this is beneficial. LangChain has a base `MultiVectorRetriever` which makes querying this type of setup easy. A lot of the complexity lies in how to create the multiple vectors per document. This notebook covers some of the common ways to create those vectors and use the `MultiVectorRetriever`.\n", + "\n", + "The methods to create multiple vectors per document include:\n", + "\n", + "- smaller chunks: split a document into smaller chunks, and embed those (this is ParentDocumentRetriever)\n", + "- summary: create a summary for each document, embed that along with (or instead of) the document\n", + "- hypothetical questions: create hypothetical questions that each document would be appropriate to answer, embed those along with (or instead of) the document\n", + "\n", + "\n", + "Note that this also enables another method of adding embeddings - manually. This is great because you can explicitly add questions or queries that should lead to a document being recovered, giving you more control" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "eed469be", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.retrievers.multi_vector import MultiVectorRetriever" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "18c1421a", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.vectorstores import Chroma\n", + "from langchain.embeddings import OpenAIEmbeddings\n", + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "from langchain.storage import InMemoryStore\n", + "from langchain.document_loaders import TextLoader" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6d869496", + "metadata": {}, + "outputs": [], + "source": [ + "loaders = [\n", + " TextLoader('../../paul_graham_essay.txt'),\n", + " TextLoader('../../state_of_the_union.txt'),\n", + "]\n", + "docs = []\n", + "for l in loaders:\n", + " docs.extend(l.load())\n", + "text_splitter = RecursiveCharacterTextSplitter(chunk_size=10000)\n", + "docs = text_splitter.split_documents(docs)" + ] + }, + { + "cell_type": "markdown", + "id": "fa17beda", + "metadata": {}, + "source": [ + "## Smaller chunks\n", + "\n", + "Often times it can be useful to retrieve larger chunks of information, but embed smaller chunks. This allows for embeddings to capture the semantic meaning as closely as possible, but for as much context as possible to be passed downstream. NOTE: this is what the ParentDocumentRetriever does. Here we show what is going on under the hood." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0e7b6b45", + "metadata": {}, + "outputs": [], + "source": [ + "# The vectorstore to use to index the child chunks\n", + "vectorstore = Chroma(\n", + " collection_name=\"full_documents\",\n", + " embedding_function=OpenAIEmbeddings()\n", + ")\n", + "# The storage layer for the parent documents\n", + "store = InMemoryStore()\n", + "id_key = \"doc_id\"\n", + "# The retriever (empty to start)\n", + "retriever = MultiVectorRetriever(\n", + " vectorstore=vectorstore, \n", + " docstore=store, \n", + " id_key=id_key,\n", + ")\n", + "import uuid\n", + "doc_ids = [str(uuid.uuid4()) for _ in docs]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "72a36491", + "metadata": {}, + "outputs": [], + "source": [ + "# The splitter to use to create smaller chunks\n", + "child_text_splitter = RecursiveCharacterTextSplitter(chunk_size=400)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "5d23247d", + "metadata": {}, + "outputs": [], + "source": [ + "sub_docs = []\n", + "for i, doc in enumerate(docs):\n", + " _id = doc_ids[i]\n", + " _sub_docs = child_text_splitter.split_documents([doc])\n", + " for _doc in _sub_docs:\n", + " _doc.metadata[id_key] = _id\n", + " sub_docs.extend(_sub_docs)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "92ed5861", + "metadata": {}, + "outputs": [], + "source": [ + "retriever.vectorstore.add_documents(sub_docs)\n", + "retriever.docstore.mset(list(zip(doc_ids, docs)))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8afed60c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Document(page_content='Tonight, I’d like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \\n\\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court.', metadata={'doc_id': '10e9cbc0-4ba5-4d79-a09b-c033d1ba7b01', 'source': '../../state_of_the_union.txt'})" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Vectorstore alone retrieves the small chunks\n", + "retriever.vectorstore.similarity_search(\"justice breyer\")[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "3c9017f1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9874" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Retriever returns larger chunks\n", + "len(retriever.get_relevant_documents(\"justice breyer\")[0].page_content)" + ] + }, + { + "cell_type": "markdown", + "id": "d6a7ae0d", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "Oftentimes a summary may be able to distill more accurately what a chunk is about, leading to better retrieval. Here we show how to create summaries, and then embed those." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "1433dff4", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.prompts import ChatPromptTemplate\n", + "from langchain.schema.output_parser import StrOutputParser\n", + "import uuid\n", + "from langchain.schema.document import Document" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "35b30390", + "metadata": {}, + "outputs": [], + "source": [ + "chain = (\n", + " {\"doc\": lambda x: x.page_content}\n", + " | ChatPromptTemplate.from_template(\"Summarize the following document:\\n\\n{doc}\")\n", + " | ChatOpenAI(max_retries=0)\n", + " | StrOutputParser()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "41a2a738", + "metadata": {}, + "outputs": [], + "source": [ + "summaries = chain.batch(docs, {\"max_concurrency\": 5})" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "7ac5e4b1", + "metadata": {}, + "outputs": [], + "source": [ + "# The vectorstore to use to index the child chunks\n", + "vectorstore = Chroma(\n", + " collection_name=\"summaries\",\n", + " embedding_function=OpenAIEmbeddings()\n", + ")\n", + "# The storage layer for the parent documents\n", + "store = InMemoryStore()\n", + "id_key = \"doc_id\"\n", + "# The retriever (empty to start)\n", + "retriever = MultiVectorRetriever(\n", + " vectorstore=vectorstore, \n", + " docstore=store, \n", + " id_key=id_key,\n", + ")\n", + "doc_ids = [str(uuid.uuid4()) for _ in docs]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "0d93309f", + "metadata": {}, + "outputs": [], + "source": [ + "summary_docs = [Document(page_content=s,metadata={id_key: doc_ids[i]}) for i, s in enumerate(summaries)]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "6d5edf0d", + "metadata": {}, + "outputs": [], + "source": [ + "retriever.vectorstore.add_documents(summary_docs)\n", + "retriever.docstore.mset(list(zip(doc_ids, docs)))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "862ae920", + "metadata": {}, + "outputs": [], + "source": [ + "# # We can also add the original chunks to the vectorstore if we so want\n", + "# for i, doc in enumerate(docs):\n", + "# doc.metadata[id_key] = doc_ids[i]\n", + "# retriever.vectorstore.add_documents(docs)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "299232d6", + "metadata": {}, + "outputs": [], + "source": [ + "sub_docs = vectorstore.similarity_search(\"justice breyer\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "10e404c0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Document(page_content=\"The document is a transcript of a speech given by the President of the United States. The President discusses several important issues and initiatives, including the nomination of a Supreme Court Justice, border security and immigration reform, protecting women's rights, advancing LGBTQ+ equality, bipartisan legislation, addressing the opioid epidemic and mental health, supporting veterans, investigating the health effects of burn pits on military personnel, ending cancer, and the strength and resilience of the American people.\", metadata={'doc_id': '79fa2e9f-28d9-4372-8af3-2caf4f1de312'})" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sub_docs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e4cce5c2", + "metadata": {}, + "outputs": [], + "source": [ + "retrieved_docs = retriever.get_relevant_documents(\"justice breyer\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c8570dbb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9194" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(retrieved_docs[0].page_content)" + ] + }, + { + "cell_type": "markdown", + "id": "097a5396", + "metadata": {}, + "source": [ + "## Hypothetical Queries\n", + "\n", + "An LLM can also be used to generate a list of hypothetical questions that could be asked of a particular document. These questions can then be embedded" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "5219b085", + "metadata": {}, + "outputs": [], + "source": [ + "functions = [\n", + " {\n", + " \"name\": \"hypothetical_questions\",\n", + " \"description\": \"Generate hypothetical questions\",\n", + " \"parameters\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"questions\": {\n", + " \"type\": \"array\",\n", + " \"items\": {\n", + " \"type\": \"string\"\n", + " },\n", + " },\n", + " },\n", + " \"required\": [\"questions\"]\n", + " }\n", + " }\n", + " ]" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "523deb92", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.output_parsers.openai_functions import JsonKeyOutputFunctionsParser\n", + "chain = (\n", + " {\"doc\": lambda x: x.page_content}\n", + " # Only asking for 3 hypothetical questions, but this could be adjusted\n", + " | ChatPromptTemplate.from_template(\"Generate a list of 3 hypothetical questions that the below document could be used to answer:\\n\\n{doc}\")\n", + " | ChatOpenAI(max_retries=0, model=\"gpt-4\").bind(functions=functions, function_call={\"name\": \"hypothetical_questions\"})\n", + " | JsonKeyOutputFunctionsParser(key_name=\"questions\")\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "11d30554", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[\"What was the author's initial impression of philosophy as a field of study, and how did it change when they got to college?\",\n", + " 'Why did the author decide to switch their focus to Artificial Intelligence (AI)?',\n", + " \"What led to the author's disillusionment with the field of AI as it was practiced at the time?\"]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain.invoke(docs[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "3eb2e48c", + "metadata": {}, + "outputs": [], + "source": [ + "hypothetical_questions = chain.batch(docs, {\"max_concurrency\": 5})" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "b2cd6e75", + "metadata": {}, + "outputs": [], + "source": [ + "# The vectorstore to use to index the child chunks\n", + "vectorstore = Chroma(\n", + " collection_name=\"hypo-questions\",\n", + " embedding_function=OpenAIEmbeddings()\n", + ")\n", + "# The storage layer for the parent documents\n", + "store = InMemoryStore()\n", + "id_key = \"doc_id\"\n", + "# The retriever (empty to start)\n", + "retriever = MultiVectorRetriever(\n", + " vectorstore=vectorstore, \n", + " docstore=store, \n", + " id_key=id_key,\n", + ")\n", + "doc_ids = [str(uuid.uuid4()) for _ in docs]" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "18831b3b", + "metadata": {}, + "outputs": [], + "source": [ + "question_docs = []\n", + "for i, question_list in enumerate(hypothetical_questions):\n", + " question_docs.extend([Document(page_content=s,metadata={id_key: doc_ids[i]}) for s in question_list])" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "224b24c5", + "metadata": {}, + "outputs": [], + "source": [ + "retriever.vectorstore.add_documents(question_docs)\n", + "retriever.docstore.mset(list(zip(doc_ids, docs)))" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "7b442b90", + "metadata": {}, + "outputs": [], + "source": [ + "sub_docs = vectorstore.similarity_search(\"justice breyer\")" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "089b5ad0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content=\"What is the President's stance on immigration reform?\", metadata={'doc_id': '505d73e3-8350-46ec-a58e-3af032f04ab3'}),\n", + " Document(page_content=\"What is the President's stance on immigration reform?\", metadata={'doc_id': '1c9618f0-7660-4b4f-a37c-509cbbbf6dba'}),\n", + " Document(page_content=\"What is the President's stance on immigration reform?\", metadata={'doc_id': '82c08209-b904-46a8-9532-edd2380950b7'}),\n", + " Document(page_content='What measures is the President proposing to protect the rights of LGBTQ+ Americans?', metadata={'doc_id': '82c08209-b904-46a8-9532-edd2380950b7'})]" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sub_docs" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "7594b24e", + "metadata": {}, + "outputs": [], + "source": [ + "retrieved_docs = retriever.get_relevant_documents(\"justice breyer\")" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "4c120c65", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9194" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(retrieved_docs[0].page_content)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "616cfeeb", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/modules/data_connection/retrievers/parent_document_retriever.ipynb b/docs/extras/modules/data_connection/retrievers/parent_document_retriever.ipynb index 4b166bc14..206ecbfba 100644 --- a/docs/extras/modules/data_connection/retrievers/parent_document_retriever.ipynb +++ b/docs/extras/modules/data_connection/retrievers/parent_document_retriever.ipynb @@ -83,7 +83,6 @@ "outputs": [], "source": [ "# This text splitter is used to create the child documents\n", - "\n", "child_splitter = RecursiveCharacterTextSplitter(chunk_size=400)\n", "# The vectorstore to use to index the child chunks\n", "vectorstore = Chroma(\n", @@ -432,7 +431,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.5" + "version": "3.10.1" } }, "nbformat": 4, diff --git a/docs/extras/modules/data_connection/caching_embeddings.ipynb b/docs/extras/modules/data_connection/text_embedding/caching_embeddings.ipynb similarity index 99% rename from docs/extras/modules/data_connection/caching_embeddings.ipynb rename to docs/extras/modules/data_connection/text_embedding/caching_embeddings.ipynb index bf87f9e05..2a2c3b09d 100644 --- a/docs/extras/modules/data_connection/caching_embeddings.ipynb +++ b/docs/extras/modules/data_connection/text_embedding/caching_embeddings.ipynb @@ -5,7 +5,7 @@ "id": "bf4061ce", "metadata": {}, "source": [ - "# Caching Embeddings\n", + "# Caching\n", "\n", "Embeddings can be stored or temporarily cached to avoid needing to recompute them.\n", "\n", @@ -586,7 +586,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.10" + "version": "3.9.1" } }, "nbformat": 4, diff --git a/docs/extras/modules/memory/adding_memory.ipynb b/docs/extras/modules/memory/adding_memory.ipynb index e13d4c703..79e6cbd8d 100644 --- a/docs/extras/modules/memory/adding_memory.ipynb +++ b/docs/extras/modules/memory/adding_memory.ipynb @@ -203,7 +203,7 @@ "prompt = ChatPromptTemplate.from_messages([\n", " SystemMessage(content=\"You are a chatbot having a conversation with a human.\"), # The persistent system prompt\n", " MessagesPlaceholder(variable_name=\"chat_history\"), # Where the memory will be stored.\n", - " HumanMessagePromptTemplate.from_template(\"{human_input}\"), # Where the human input will injectd\n", + " HumanMessagePromptTemplate.from_template(\"{human_input}\"), # Where the human input will injected\n", "])\n", " \n", "memory = ConversationBufferMemory(memory_key=\"chat_history\", return_messages=True)" diff --git a/docs/extras/modules/model_io/prompts/example_selectors/custom_example_selector.md b/docs/extras/modules/model_io/prompts/example_selectors/custom_example_selector.md index 15f070a0f..d9bff1559 100644 --- a/docs/extras/modules/model_io/prompts/example_selectors/custom_example_selector.md +++ b/docs/extras/modules/model_io/prompts/example_selectors/custom_example_selector.md @@ -5,7 +5,7 @@ In this tutorial, we'll create a custom example selector that selects every alte An `ExampleSelector` must implement two methods: 1. An `add_example` method which takes in an example and adds it into the ExampleSelector -2. A `select_examples` method which takes in input variables (which are meant to be user input) and returns a list of examples to use in the few shot prompt. +2. A `select_examples` method which takes in input variables (which are meant to be user input) and returns a list of examples to use in the few-shot prompt. Let's implement a custom `ExampleSelector` that just selects two examples at random. diff --git a/docs/extras/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store.ipynb b/docs/extras/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store.ipynb index a549ce2bf..768c43e92 100644 --- a/docs/extras/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store.ipynb +++ b/docs/extras/modules/model_io/prompts/prompt_templates/connecting_to_a_feature_store.ipynb @@ -35,7 +35,7 @@ "source": [ "### Load Feast Store\n", "\n", - "Again, this should be set up according to the instructions in the Feast README" + "Again, this should be set up according to the instructions in the Feast README." ] }, { @@ -160,7 +160,7 @@ "source": [ "### Use in a chain\n", "\n", - "We can now use this in a chain, successfully creating a chain that achieves personalization backed by a feature store" + "We can now use this in a chain, successfully creating a chain that achieves personalization backed by a feature store." ] }, { @@ -243,7 +243,7 @@ "tags": [] }, "source": [ - "### Define and Load Features\n", + "### Define and load features\n", "\n", "We will use the user_transaction_counts Feature View from the [Tecton tutorial](https://docs.tecton.ai/docs/tutorials/tecton-fundamentals) as part of a Feature Service. For simplicity, we are only using a single Feature View; however, more sophisticated applications may require more feature views to retrieve the features needed for its prompt.\n", "\n", @@ -394,7 +394,7 @@ "source": [ "### Use in a chain\n", "\n", - "We can now use this in a chain, successfully creating a chain that achieves personalization backed by the Tecton Feature Platform" + "We can now use this in a chain, successfully creating a chain that achieves personalization backed by the Tecton Feature Platform." ] }, { @@ -460,7 +460,7 @@ "source": [ "## Featureform\n", "\n", - "Finally, we will use [Featureform](https://github.com/featureform/featureform) an open-source and enterprise-grade feature store to run the same example. Featureform allows you to work with your infrastructure like Spark or locally to define your feature transformations." + "Finally, we will use [Featureform](https://github.com/featureform/featureform), an open-source and enterprise-grade feature store, to run the same example. Featureform allows you to work with your infrastructure like Spark or locally to define your feature transformations." ] }, { @@ -564,7 +564,7 @@ "source": [ "### Use in a chain\n", "\n", - "We can now use this in a chain, successfully creating a chain that achieves personalization backed by the Featureform Feature Platform" + "We can now use this in a chain, successfully creating a chain that achieves personalization backed by the Featureform Feature Platform." ] }, { @@ -605,7 +605,7 @@ "source": [ "## AzureML Managed Feature Store\n", "\n", - "We will use [AzureML Managed Feature Store](https://learn.microsoft.com/en-us/azure/machine-learning/concept-what-is-managed-feature-store) to run the below example. " + "We will use [AzureML Managed Feature Store](https://learn.microsoft.com/en-us/azure/machine-learning/concept-what-is-managed-feature-store) to run the example below. " ] }, { @@ -768,7 +768,7 @@ "source": [ "### Use in a chain\n", "\n", - "We can now use this in a chain, successfully creating a chain that achieves personalization backed by the AzureML Managed Feature Store" + "We can now use this in a chain, successfully creating a chain that achieves personalization backed by the AzureML Managed Feature Store." ] }, { diff --git a/docs/extras/modules/model_io/prompts/prompt_templates/custom_prompt_template.ipynb b/docs/extras/modules/model_io/prompts/prompt_templates/custom_prompt_template.ipynb index c5044265a..7c9141a59 100644 --- a/docs/extras/modules/model_io/prompts/prompt_templates/custom_prompt_template.ipynb +++ b/docs/extras/modules/model_io/prompts/prompt_templates/custom_prompt_template.ipynb @@ -11,9 +11,7 @@ "\n", "## Why are custom prompt templates needed?\n", "\n", - "LangChain provides a set of default prompt templates that can be used to generate prompts for a variety of tasks. However, there may be cases where the default prompt templates do not meet your needs. For example, you may want to create a prompt template with specific dynamic instructions for your language model. In such cases, you can create a custom prompt template.\n", - "\n", - "Take a look at the current set of default prompt templates [here](/docs/modules/model_io/prompts/prompt_templates/)." + "LangChain provides a set of [default prompt templates](/docs/modules/model_io/prompts/prompt_templates/) that can be used to generate prompts for a variety of tasks. However, there may be cases where the default prompt templates do not meet your needs. For example, you may want to create a prompt template with specific dynamic instructions for your language model. In such cases, you can create a custom prompt template." ] }, { @@ -21,7 +19,7 @@ "id": "5d56ce86", "metadata": {}, "source": [ - "## Creating a Custom Prompt Template\n", + "## Creating a custom prompt template\n", "\n", "There are essentially two distinct prompt templates available - string prompt templates and chat prompt templates. String prompt templates provides a simple prompt in string format, while chat prompt templates produces a more structured prompt to be used with a chat API.\n", "\n", @@ -29,7 +27,7 @@ "\n", "To create a custom string prompt template, there are two requirements:\n", "1. It has an input_variables attribute that exposes what input variables the prompt template expects.\n", - "2. It exposes a format method that takes in keyword arguments corresponding to the expected input_variables and returns the formatted prompt.\n", + "2. It defines a format method that takes in keyword arguments corresponding to the expected input_variables and returns the formatted prompt.\n", "\n", "We will create a custom prompt template that takes in the function name as input and formats the prompt to provide the source code of the function. To achieve this, let's first create a function that will return the source code of a function given its name." ] diff --git a/docs/extras/modules/model_io/prompts/prompt_templates/few_shot_examples_chat.ipynb b/docs/extras/modules/model_io/prompts/prompt_templates/few_shot_examples_chat.ipynb index 6e88c0157..c6050f326 100644 --- a/docs/extras/modules/model_io/prompts/prompt_templates/few_shot_examples_chat.ipynb +++ b/docs/extras/modules/model_io/prompts/prompt_templates/few_shot_examples_chat.ipynb @@ -5,9 +5,9 @@ "id": "bb0735c0", "metadata": {}, "source": [ - "# Few shot examples for chat models\n", + "# Few-shot examples for chat models\n", "\n", - "This notebook covers how to use few shot examples in chat models. There does not appear to be solid consensus on how best to do few shot prompting, and the optimal prompt compilation will likely vary by model. Because of this, we provide few-shot prompt templates like the [FewShotChatMessagePromptTemplate](https://api.python.langchain.com/en/latest/prompts/langchain.prompts.few_shot.FewShotChatMessagePromptTemplate.html) as a flexible starting point, and you can modify or replace them as you see fit.\n", + "This notebook covers how to use few-shot examples in chat models. There does not appear to be solid consensus on how best to do few-shot prompting, and the optimal prompt compilation will likely vary by model. Because of this, we provide few-shot prompt templates like the [FewShotChatMessagePromptTemplate](https://api.python.langchain.com/en/latest/prompts/langchain.prompts.few_shot.FewShotChatMessagePromptTemplate.html) as a flexible starting point, and you can modify or replace them as you see fit.\n", "\n", "The goal of few-shot prompt templates are to dynamically select examples based on an input, and then format the examples in a final prompt to provide for the model.\n", "\n", @@ -133,7 +133,7 @@ "source": [ "final_prompt = ChatPromptTemplate.from_messages(\n", " [\n", - " (\"system\", \"You are wonderous wizard of math.\"),\n", + " (\"system\", \"You are a wondrous wizard of math.\"),\n", " few_shot_prompt,\n", " (\"human\", \"{input}\"),\n", " ]\n", @@ -172,7 +172,7 @@ "id": "70ab7114-f07f-46be-8874-3705a25aba5f", "metadata": {}, "source": [ - "## Dynamic Few-shot Prompting\n", + "## Dynamic few-shot prompting\n", "\n", "Sometimes you may want to condition which examples are shown based on the input. For this, you can replace the `examples` with an `example_selector`. The other components remain the same as above! To review, the dynamic few-shot prompt template would look like:\n", "\n", @@ -357,7 +357,7 @@ "source": [ "final_prompt = ChatPromptTemplate.from_messages(\n", " [\n", - " (\"system\", \"You are wonderous wizard of math.\"),\n", + " (\"system\", \"You are a wondrous wizard of math.\"),\n", " few_shot_prompt,\n", " (\"human\", \"{input}\"),\n", " ]\n", diff --git a/docs/extras/modules/model_io/prompts/prompt_templates/format_output.mdx b/docs/extras/modules/model_io/prompts/prompt_templates/format_output.mdx index 1be52b93c..38904076e 100644 --- a/docs/extras/modules/model_io/prompts/prompt_templates/format_output.mdx +++ b/docs/extras/modules/model_io/prompts/prompt_templates/format_output.mdx @@ -1,6 +1,6 @@ # Format template output -The output of the format method is available as string, list of messages and `ChatPromptValue` +The output of the format method is available as a string, list of messages and `ChatPromptValue` As string: @@ -26,22 +26,7 @@ output_2 = chat_prompt.format_prompt(input_language="English", output_language=" assert output == output_2 ``` -As `ChatPromptValue` - - -```python -chat_prompt.format_prompt(input_language="English", output_language="French", text="I love programming.") -``` - - - -``` - ChatPromptValue(messages=[SystemMessage(content='You are a helpful assistant that translates English to French.', additional_kwargs={}), HumanMessage(content='I love programming.', additional_kwargs={})]) -``` - - - -As list of Message objects +As list of Message objects: ```python @@ -57,3 +42,17 @@ chat_prompt.format_prompt(input_language="English", output_language="French", te +As `ChatPromptValue`: + + +```python +chat_prompt.format_prompt(input_language="English", output_language="French", text="I love programming.") +``` + + + +``` + ChatPromptValue(messages=[SystemMessage(content='You are a helpful assistant that translates English to French.', additional_kwargs={}), HumanMessage(content='I love programming.', additional_kwargs={})]) +``` + + diff --git a/docs/extras/modules/model_io/prompts/prompt_templates/formats.mdx b/docs/extras/modules/model_io/prompts/prompt_templates/formats.mdx index 6abe8cbca..05ab55eae 100644 --- a/docs/extras/modules/model_io/prompts/prompt_templates/formats.mdx +++ b/docs/extras/modules/model_io/prompts/prompt_templates/formats.mdx @@ -1,4 +1,4 @@ -# Template Formats +# Template formats `PromptTemplate` by default uses Python f-string as its template format. However, it can also use other formats like `jinja2`, specified through the `template_format` argument. diff --git a/docs/extras/modules/model_io/prompts/prompt_templates/prompt_serialization.ipynb b/docs/extras/modules/model_io/prompts/prompt_templates/prompt_serialization.ipynb index 5317fe1c2..28bc342fe 100644 --- a/docs/extras/modules/model_io/prompts/prompt_templates/prompt_serialization.ipynb +++ b/docs/extras/modules/model_io/prompts/prompt_templates/prompt_serialization.ipynb @@ -11,7 +11,7 @@ "\n", "At a high level, the following design principles are applied to serialization:\n", "\n", - "1. Both JSON and YAML are supported. We want to support serialization methods that are human readable on disk, and YAML and JSON are two of the most popular methods for that. Note that this rule applies to prompts. For other assets, like Examples, different serialization methods may be supported.\n", + "1. Both JSON and YAML are supported. We want to support serialization methods that are human readable on disk, and YAML and JSON are two of the most popular methods for that. Note that this rule applies to prompts. For other assets, like examples, different serialization methods may be supported.\n", "\n", "2. We support specifying everything in one file, or storing different components (templates, examples, etc) in different files and referencing them. For some cases, storing everything in file makes the most sense, but for others it is preferrable to split up some of the assets (long templates, large examples, reusable components). LangChain supports both.\n", "\n", @@ -144,7 +144,7 @@ "id": "d788a83c", "metadata": {}, "source": [ - "### Loading Template from a File\n", + "### Loading template from a file\n", "This shows an example of storing the template in a separate file and then referencing it in the config. Notice that the key changes from `template` to `template_path`." ] }, @@ -214,7 +214,7 @@ "source": [ "## FewShotPromptTemplate\n", "\n", - "This section covers examples for loading few shot prompt templates." + "This section covers examples for loading few-shot prompt templates." ] }, { @@ -282,7 +282,7 @@ "metadata": {}, "source": [ "### Loading from YAML\n", - "This shows an example of loading a few shot example from YAML." + "This shows an example of loading a few-shot example from YAML." ] }, { @@ -419,7 +419,7 @@ "metadata": {}, "source": [ "### Loading from JSON\n", - "This shows an example of loading a few shot example from JSON." + "This shows an example of loading a few-shot example from JSON." ] }, { @@ -484,7 +484,7 @@ "id": "9d23faf4", "metadata": {}, "source": [ - "### Examples in the Config\n", + "### Examples in the config\n", "This shows an example of referencing the examples directly in the config." ] }, @@ -553,7 +553,7 @@ "id": "2e86139e", "metadata": {}, "source": [ - "### Example Prompt from a File\n", + "### Example prompt from a file\n", "This shows an example of loading the PromptTemplate that is used to format the examples from a separate file. Note that the key changes from `example_prompt` to `example_prompt_path`." ] }, @@ -637,7 +637,7 @@ "id": "c6e3f9fe", "metadata": {}, "source": [ - "## PromptTempalte with OutputParser\n", + "## PromptTemplate with OutputParser\n", "This shows an example of loading a prompt along with an OutputParser from a file." ] }, diff --git a/docs/extras/modules/model_io/prompts/prompt_templates/prompts_pipelining.ipynb b/docs/extras/modules/model_io/prompts/prompt_templates/prompts_pipelining.ipynb index 594a404e5..74316f704 100644 --- a/docs/extras/modules/model_io/prompts/prompt_templates/prompts_pipelining.ipynb +++ b/docs/extras/modules/model_io/prompts/prompt_templates/prompts_pipelining.ipynb @@ -5,9 +5,9 @@ "id": "4de4e022", "metadata": {}, "source": [ - "# Prompt Pipelining\n", + "# Prompt pipelining\n", "\n", - "The idea behind prompt pipelining is to expose a user friendly interface for composing different parts of prompts together. You can do this with either string prompts or chat prompts. Constructing prompts this way allows for easy reuse of components." + "The idea behind prompt pipelining is to provide a user friendly interface for composing different parts of prompts together. You can do this with either string prompts or chat prompts. Constructing prompts this way allows for easy reuse of components." ] }, { @@ -15,26 +15,17 @@ "id": "c3190650", "metadata": {}, "source": [ - "## String Prompt Pipelining\n", + "## String prompt pipelining\n", "\n", "When working with string prompts, each template is joined togther. You can work with either prompts directly or strings (the first element in the list needs to be a prompt)." ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "69b17f05", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/harrisonchase/.pyenv/versions/3.9.1/envs/langchain/lib/python3.9/site-packages/deeplake/util/check_latest_version.py:32: UserWarning: A newer version of deeplake (3.6.12) is available. It's recommended that you update to the latest version using `pip install -U deeplake`.\n", - " warnings.warn(\n" - ] - } - ], + "outputs": [], "source": [ "from langchain.prompts import PromptTemplate" ] @@ -160,7 +151,7 @@ "id": "4e4f6a8a", "metadata": {}, "source": [ - "## Chat Prompt Pipelining" + "## Chat prompt pipelining" ] }, { @@ -173,19 +164,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "2a180f75", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/harrisonchase/.pyenv/versions/3.9.1/envs/langchain/lib/python3.9/site-packages/deeplake/util/check_latest_version.py:32: UserWarning: A newer version of deeplake (3.6.10) is available. It's recommended that you update to the latest version using `pip install -U deeplake`.\n", - " warnings.warn(\n" - ] - } - ], + "outputs": [], "source": [ "from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate\n", "from langchain.schema import HumanMessage, AIMessage, SystemMessage" @@ -214,8 +196,8 @@ "id": "30656ef8", "metadata": {}, "source": [ - "You can then easily create a pipeline combining it with other messages OR message templates.\n", - "Use a `Message` when there is no variables to be formatted, use a `MessageTemplate` when there are variables to be formatted. You can also use just a string -> note that this will automatically get inferred as a HumanMessagePromptTemplate." + "You can then easily create a pipeline combining it with other messages *or* message templates.\n", + "Use a `Message` when there is no variables to be formatted, use a `MessageTemplate` when there are variables to be formatted. You can also use just a string (note: this will automatically get inferred as a HumanMessagePromptTemplate.)" ] }, { @@ -270,7 +252,7 @@ "id": "850357c0", "metadata": {}, "source": [ - "You can also use it in an LLMChain, just like before" + "You can also use it in an LLMChain, just like before." ] }, { diff --git a/docs/extras/use_cases/agents/baby_agi.ipynb b/docs/extras/use_cases/agents/baby_agi.ipynb deleted file mode 100644 index 49e2fa35f..000000000 --- a/docs/extras/use_cases/agents/baby_agi.ipynb +++ /dev/null @@ -1,565 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "517a9fd4", - "metadata": {}, - "source": [ - "# BabyAGI User Guide\n", - "\n", - "This notebook demonstrates how to implement [BabyAGI](https://github.com/yoheinakajima/babyagi/tree/main) by [Yohei Nakajima](https://twitter.com/yoheinakajima). BabyAGI is an AI agent that can generate and pretend to execute tasks based on a given objective.\n", - "\n", - "This guide will help you understand the components to create your own recursive agents.\n", - "\n", - "Although BabyAGI uses specific vectorstores/model providers (Pinecone, OpenAI), one of the benefits of implementing it with LangChain is that you can easily swap those out for different options. In this implementation we use a FAISS vectorstore (because it runs locally and is free)." - ] - }, - { - "cell_type": "markdown", - "id": "556af556", - "metadata": {}, - "source": [ - "## Install and Import Required Modules" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "id": "c8a354b6", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "from collections import deque\n", - "from typing import Dict, List, Optional, Any\n", - "\n", - "from langchain import LLMChain, OpenAI, PromptTemplate\n", - "from langchain.embeddings import OpenAIEmbeddings\n", - "from langchain.llms import BaseLLM\n", - "from langchain.vectorstores.base import VectorStore\n", - "from pydantic import BaseModel, Field\n", - "from langchain.chains.base import Chain" - ] - }, - { - "cell_type": "markdown", - "id": "09f70772", - "metadata": {}, - "source": [ - "## Connect to the Vector Store\n", - "\n", - "Depending on what vectorstore you use, this step may look different." - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "794045d4", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.vectorstores import FAISS\n", - "from langchain.docstore import InMemoryDocstore" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "6e0305eb", - "metadata": {}, - "outputs": [], - "source": [ - "# Define your embedding model\n", - "embeddings_model = OpenAIEmbeddings()\n", - "# Initialize the vectorstore as empty\n", - "import faiss\n", - "\n", - "embedding_size = 1536\n", - "index = faiss.IndexFlatL2(embedding_size)\n", - "vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})" - ] - }, - { - "cell_type": "markdown", - "id": "0f3b72bf", - "metadata": {}, - "source": [ - "## Define the Chains\n", - "\n", - "BabyAGI relies on three LLM chains:\n", - "- Task creation chain to select new tasks to add to the list\n", - "- Task prioritization chain to re-prioritize tasks\n", - "- Execution Chain to execute the tasks" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "bf4bd5cd", - "metadata": {}, - "outputs": [], - "source": [ - "class TaskCreationChain(LLMChain):\n", - " \"\"\"Chain to generates tasks.\"\"\"\n", - "\n", - " @classmethod\n", - " def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:\n", - " \"\"\"Get the response parser.\"\"\"\n", - " task_creation_template = (\n", - " \"You are a task creation AI that uses the result of an execution agent\"\n", - " \" to create new tasks with the following objective: {objective},\"\n", - " \" The last completed task has the result: {result}.\"\n", - " \" This result was based on this task description: {task_description}.\"\n", - " \" These are incomplete tasks: {incomplete_tasks}.\"\n", - " \" Based on the result, create new tasks to be completed\"\n", - " \" by the AI system that do not overlap with incomplete tasks.\"\n", - " \" Return the tasks as an array.\"\n", - " )\n", - " prompt = PromptTemplate(\n", - " template=task_creation_template,\n", - " input_variables=[\n", - " \"result\",\n", - " \"task_description\",\n", - " \"incomplete_tasks\",\n", - " \"objective\",\n", - " ],\n", - " )\n", - " return cls(prompt=prompt, llm=llm, verbose=verbose)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "b6488ffe", - "metadata": {}, - "outputs": [], - "source": [ - "class TaskPrioritizationChain(LLMChain):\n", - " \"\"\"Chain to prioritize tasks.\"\"\"\n", - "\n", - " @classmethod\n", - " def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:\n", - " \"\"\"Get the response parser.\"\"\"\n", - " task_prioritization_template = (\n", - " \"You are a task prioritization AI tasked with cleaning the formatting of and reprioritizing\"\n", - " \" the following tasks: {task_names}.\"\n", - " \" Consider the ultimate objective of your team: {objective}.\"\n", - " \" Do not remove any tasks. Return the result as a numbered list, like:\"\n", - " \" #. First task\"\n", - " \" #. Second task\"\n", - " \" Start the task list with number {next_task_id}.\"\n", - " )\n", - " prompt = PromptTemplate(\n", - " template=task_prioritization_template,\n", - " input_variables=[\"task_names\", \"next_task_id\", \"objective\"],\n", - " )\n", - " return cls(prompt=prompt, llm=llm, verbose=verbose)" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "id": "b43cd580", - "metadata": {}, - "outputs": [], - "source": [ - "class ExecutionChain(LLMChain):\n", - " \"\"\"Chain to execute tasks.\"\"\"\n", - "\n", - " @classmethod\n", - " def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:\n", - " \"\"\"Get the response parser.\"\"\"\n", - " execution_template = (\n", - " \"You are an AI who performs one task based on the following objective: {objective}.\"\n", - " \" Take into account these previously completed tasks: {context}.\"\n", - " \" Your task: {task}.\"\n", - " \" Response:\"\n", - " )\n", - " prompt = PromptTemplate(\n", - " template=execution_template,\n", - " input_variables=[\"objective\", \"context\", \"task\"],\n", - " )\n", - " return cls(prompt=prompt, llm=llm, verbose=verbose)" - ] - }, - { - "cell_type": "markdown", - "id": "3ad996c5", - "metadata": {}, - "source": [ - "### Define the BabyAGI Controller\n", - "\n", - "BabyAGI composes the chains defined above in a (potentially-)infinite loop." - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "0ada0636", - "metadata": {}, - "outputs": [], - "source": [ - "def get_next_task(\n", - " task_creation_chain: LLMChain,\n", - " result: Dict,\n", - " task_description: str,\n", - " task_list: List[str],\n", - " objective: str,\n", - ") -> List[Dict]:\n", - " \"\"\"Get the next task.\"\"\"\n", - " incomplete_tasks = \", \".join(task_list)\n", - " response = task_creation_chain.run(\n", - " result=result,\n", - " task_description=task_description,\n", - " incomplete_tasks=incomplete_tasks,\n", - " objective=objective,\n", - " )\n", - " new_tasks = response.split(\"\\n\")\n", - " return [{\"task_name\": task_name} for task_name in new_tasks if task_name.strip()]" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "d35250ad", - "metadata": {}, - "outputs": [], - "source": [ - "def prioritize_tasks(\n", - " task_prioritization_chain: LLMChain,\n", - " this_task_id: int,\n", - " task_list: List[Dict],\n", - " objective: str,\n", - ") -> List[Dict]:\n", - " \"\"\"Prioritize tasks.\"\"\"\n", - " task_names = [t[\"task_name\"] for t in task_list]\n", - " next_task_id = int(this_task_id) + 1\n", - " response = task_prioritization_chain.run(\n", - " task_names=task_names, next_task_id=next_task_id, objective=objective\n", - " )\n", - " new_tasks = response.split(\"\\n\")\n", - " prioritized_task_list = []\n", - " for task_string in new_tasks:\n", - " if not task_string.strip():\n", - " continue\n", - " task_parts = task_string.strip().split(\".\", 1)\n", - " if len(task_parts) == 2:\n", - " task_id = task_parts[0].strip()\n", - " task_name = task_parts[1].strip()\n", - " prioritized_task_list.append({\"task_id\": task_id, \"task_name\": task_name})\n", - " return prioritized_task_list" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "e3f1840c", - "metadata": {}, - "outputs": [], - "source": [ - "def _get_top_tasks(vectorstore, query: str, k: int) -> List[str]:\n", - " \"\"\"Get the top k tasks based on the query.\"\"\"\n", - " results = vectorstore.similarity_search_with_score(query, k=k)\n", - " if not results:\n", - " return []\n", - " sorted_results, _ = zip(*sorted(results, key=lambda x: x[1], reverse=True))\n", - " return [str(item.metadata[\"task\"]) for item in sorted_results]\n", - "\n", - "\n", - "def execute_task(\n", - " vectorstore, execution_chain: LLMChain, objective: str, task: str, k: int = 5\n", - ") -> str:\n", - " \"\"\"Execute a task.\"\"\"\n", - " context = _get_top_tasks(vectorstore, query=objective, k=k)\n", - " return execution_chain.run(objective=objective, context=context, task=task)" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "id": "1e978938", - "metadata": {}, - "outputs": [], - "source": [ - "class BabyAGI(Chain, BaseModel):\n", - " \"\"\"Controller model for the BabyAGI agent.\"\"\"\n", - "\n", - " task_list: deque = Field(default_factory=deque)\n", - " task_creation_chain: TaskCreationChain = Field(...)\n", - " task_prioritization_chain: TaskPrioritizationChain = Field(...)\n", - " execution_chain: ExecutionChain = Field(...)\n", - " task_id_counter: int = Field(1)\n", - " vectorstore: VectorStore = Field(init=False)\n", - " max_iterations: Optional[int] = None\n", - "\n", - " class Config:\n", - " \"\"\"Configuration for this pydantic object.\"\"\"\n", - "\n", - " arbitrary_types_allowed = True\n", - "\n", - " def add_task(self, task: Dict):\n", - " self.task_list.append(task)\n", - "\n", - " def print_task_list(self):\n", - " print(\"\\033[95m\\033[1m\" + \"\\n*****TASK LIST*****\\n\" + \"\\033[0m\\033[0m\")\n", - " for t in self.task_list:\n", - " print(str(t[\"task_id\"]) + \": \" + t[\"task_name\"])\n", - "\n", - " def print_next_task(self, task: Dict):\n", - " print(\"\\033[92m\\033[1m\" + \"\\n*****NEXT TASK*****\\n\" + \"\\033[0m\\033[0m\")\n", - " print(str(task[\"task_id\"]) + \": \" + task[\"task_name\"])\n", - "\n", - " def print_task_result(self, result: str):\n", - " print(\"\\033[93m\\033[1m\" + \"\\n*****TASK RESULT*****\\n\" + \"\\033[0m\\033[0m\")\n", - " print(result)\n", - "\n", - " @property\n", - " def input_keys(self) -> List[str]:\n", - " return [\"objective\"]\n", - "\n", - " @property\n", - " def output_keys(self) -> List[str]:\n", - " return []\n", - "\n", - " def _call(self, inputs: Dict[str, Any]) -> Dict[str, Any]:\n", - " \"\"\"Run the agent.\"\"\"\n", - " objective = inputs[\"objective\"]\n", - " first_task = inputs.get(\"first_task\", \"Make a todo list\")\n", - " self.add_task({\"task_id\": 1, \"task_name\": first_task})\n", - " num_iters = 0\n", - " while True:\n", - " if self.task_list:\n", - " self.print_task_list()\n", - "\n", - " # Step 1: Pull the first task\n", - " task = self.task_list.popleft()\n", - " self.print_next_task(task)\n", - "\n", - " # Step 2: Execute the task\n", - " result = execute_task(\n", - " self.vectorstore, self.execution_chain, objective, task[\"task_name\"]\n", - " )\n", - " this_task_id = int(task[\"task_id\"])\n", - " self.print_task_result(result)\n", - "\n", - " # Step 3: Store the result in Pinecone\n", - " result_id = f\"result_{task['task_id']}_{num_iters}\"\n", - " self.vectorstore.add_texts(\n", - " texts=[result],\n", - " metadatas=[{\"task\": task[\"task_name\"]}],\n", - " ids=[result_id],\n", - " )\n", - "\n", - " # Step 4: Create new tasks and reprioritize task list\n", - " new_tasks = get_next_task(\n", - " self.task_creation_chain,\n", - " result,\n", - " task[\"task_name\"],\n", - " [t[\"task_name\"] for t in self.task_list],\n", - " objective,\n", - " )\n", - " for new_task in new_tasks:\n", - " self.task_id_counter += 1\n", - " new_task.update({\"task_id\": self.task_id_counter})\n", - " self.add_task(new_task)\n", - " self.task_list = deque(\n", - " prioritize_tasks(\n", - " self.task_prioritization_chain,\n", - " this_task_id,\n", - " list(self.task_list),\n", - " objective,\n", - " )\n", - " )\n", - " num_iters += 1\n", - " if self.max_iterations is not None and num_iters == self.max_iterations:\n", - " print(\n", - " \"\\033[91m\\033[1m\" + \"\\n*****TASK ENDING*****\\n\" + \"\\033[0m\\033[0m\"\n", - " )\n", - " break\n", - " return {}\n", - "\n", - " @classmethod\n", - " def from_llm(\n", - " cls, llm: BaseLLM, vectorstore: VectorStore, verbose: bool = False, **kwargs\n", - " ) -> \"BabyAGI\":\n", - " \"\"\"Initialize the BabyAGI Controller.\"\"\"\n", - " task_creation_chain = TaskCreationChain.from_llm(llm, verbose=verbose)\n", - " task_prioritization_chain = TaskPrioritizationChain.from_llm(\n", - " llm, verbose=verbose\n", - " )\n", - " execution_chain = ExecutionChain.from_llm(llm, verbose=verbose)\n", - " return cls(\n", - " task_creation_chain=task_creation_chain,\n", - " task_prioritization_chain=task_prioritization_chain,\n", - " execution_chain=execution_chain,\n", - " vectorstore=vectorstore,\n", - " **kwargs,\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "05ba762e", - "metadata": {}, - "source": [ - "### Run the BabyAGI\n", - "\n", - "Now it's time to create the BabyAGI controller and watch it try to accomplish your objective." - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "id": "3d220b69", - "metadata": {}, - "outputs": [], - "source": [ - "OBJECTIVE = \"Write a weather report for SF today\"" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "8a8e5543", - "metadata": {}, - "outputs": [], - "source": [ - "llm = OpenAI(temperature=0)" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "id": "3d69899b", - "metadata": {}, - "outputs": [], - "source": [ - "# Logging of LLMChains\n", - "verbose = False\n", - "# If None, will keep on going forever\n", - "max_iterations: Optional[int] = 3\n", - "baby_agi = BabyAGI.from_llm(\n", - " llm=llm, vectorstore=vectorstore, verbose=verbose, max_iterations=max_iterations\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "id": "f7957b51", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[95m\u001b[1m\n", - "*****TASK LIST*****\n", - "\u001b[0m\u001b[0m\n", - "1: Make a todo list\n", - "\u001b[92m\u001b[1m\n", - "*****NEXT TASK*****\n", - "\u001b[0m\u001b[0m\n", - "1: Make a todo list\n", - "\u001b[93m\u001b[1m\n", - "*****TASK RESULT*****\n", - "\u001b[0m\u001b[0m\n", - "\n", - "\n", - "1. Check the temperature range for the day.\n", - "2. Gather temperature data for SF today.\n", - "3. Analyze the temperature data and create a weather report.\n", - "4. Publish the weather report.\n", - "\u001b[95m\u001b[1m\n", - "*****TASK LIST*****\n", - "\u001b[0m\u001b[0m\n", - "2: Gather data on the expected temperature range for the day.\n", - "3: Collect data on the expected precipitation for the day.\n", - "4: Analyze the data and create a weather report.\n", - "5: Check the current weather conditions in SF.\n", - "6: Publish the weather report.\n", - "\u001b[92m\u001b[1m\n", - "*****NEXT TASK*****\n", - "\u001b[0m\u001b[0m\n", - "2: Gather data on the expected temperature range for the day.\n", - "\u001b[93m\u001b[1m\n", - "*****TASK RESULT*****\n", - "\u001b[0m\u001b[0m\n", - "\n", - "\n", - "I have gathered data on the expected temperature range for the day in San Francisco. The forecast is for temperatures to range from a low of 55 degrees Fahrenheit to a high of 68 degrees Fahrenheit.\n", - "\u001b[95m\u001b[1m\n", - "*****TASK LIST*****\n", - "\u001b[0m\u001b[0m\n", - "3: Check the current weather conditions in SF.\n", - "4: Calculate the average temperature for the day in San Francisco.\n", - "5: Determine the probability of precipitation for the day in San Francisco.\n", - "6: Identify any potential weather warnings or advisories for the day in San Francisco.\n", - "7: Research any historical weather patterns for the day in San Francisco.\n", - "8: Compare the expected temperature range to the historical average for the day in San Francisco.\n", - "9: Collect data on the expected precipitation for the day.\n", - "10: Analyze the data and create a weather report.\n", - "11: Publish the weather report.\n", - "\u001b[92m\u001b[1m\n", - "*****NEXT TASK*****\n", - "\u001b[0m\u001b[0m\n", - "3: Check the current weather conditions in SF.\n", - "\u001b[93m\u001b[1m\n", - "*****TASK RESULT*****\n", - "\u001b[0m\u001b[0m\n", - "\n", - "\n", - "I am checking the current weather conditions in SF. According to the data I have gathered, the temperature in SF today is currently around 65 degrees Fahrenheit with clear skies. The temperature range for the day is expected to be between 60 and 70 degrees Fahrenheit.\n", - "\u001b[91m\u001b[1m\n", - "*****TASK ENDING*****\n", - "\u001b[0m\u001b[0m\n" - ] - }, - { - "data": { - "text/plain": [ - "{'objective': 'Write a weather report for SF today'}" - ] - }, - "execution_count": 141, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "baby_agi({\"objective\": OBJECTIVE})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "898a210b", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/extras/use_cases/agents/baby_agi_with_agent.ipynb b/docs/extras/use_cases/agents/baby_agi_with_agent.ipynb deleted file mode 100644 index 7f492b510..000000000 --- a/docs/extras/use_cases/agents/baby_agi_with_agent.ipynb +++ /dev/null @@ -1,647 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "517a9fd4", - "metadata": {}, - "source": [ - "# BabyAGI with Tools\n", - "\n", - "This notebook builds on top of [baby agi](baby_agi.html), but shows how you can swap out the execution chain. The previous execution chain was just an LLM which made stuff up. By swapping it out with an agent that has access to tools, we can hopefully get real reliable information" - ] - }, - { - "cell_type": "markdown", - "id": "556af556", - "metadata": {}, - "source": [ - "## Install and Import Required Modules" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "c8a354b6", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "from collections import deque\n", - "from typing import Dict, List, Optional, Any\n", - "\n", - "from langchain import LLMChain, OpenAI, PromptTemplate\n", - "from langchain.embeddings import OpenAIEmbeddings\n", - "from langchain.llms import BaseLLM\n", - "from langchain.vectorstores.base import VectorStore\n", - "from pydantic import BaseModel, Field\n", - "from langchain.chains.base import Chain" - ] - }, - { - "cell_type": "markdown", - "id": "09f70772", - "metadata": {}, - "source": [ - "## Connect to the Vector Store\n", - "\n", - "Depending on what vectorstore you use, this step may look different." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "794045d4", - "metadata": {}, - "outputs": [], - "source": [ - "%pip install faiss-cpu > /dev/null\n", - "%pip install google-search-results > /dev/null\n", - "from langchain.vectorstores import FAISS\n", - "from langchain.docstore import InMemoryDocstore" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "6e0305eb", - "metadata": {}, - "outputs": [], - "source": [ - "# Define your embedding model\n", - "embeddings_model = OpenAIEmbeddings()\n", - "# Initialize the vectorstore as empty\n", - "import faiss\n", - "\n", - "embedding_size = 1536\n", - "index = faiss.IndexFlatL2(embedding_size)\n", - "vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})" - ] - }, - { - "cell_type": "markdown", - "id": "0f3b72bf", - "metadata": {}, - "source": [ - "## Define the Chains\n", - "\n", - "BabyAGI relies on three LLM chains:\n", - "- Task creation chain to select new tasks to add to the list\n", - "- Task prioritization chain to re-prioritize tasks\n", - "- Execution Chain to execute the tasks\n", - "\n", - "\n", - "NOTE: in this notebook, the Execution chain will now be an agent." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "bf4bd5cd", - "metadata": {}, - "outputs": [], - "source": [ - "class TaskCreationChain(LLMChain):\n", - " \"\"\"Chain to generates tasks.\"\"\"\n", - "\n", - " @classmethod\n", - " def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:\n", - " \"\"\"Get the response parser.\"\"\"\n", - " task_creation_template = (\n", - " \"You are an task creation AI that uses the result of an execution agent\"\n", - " \" to create new tasks with the following objective: {objective},\"\n", - " \" The last completed task has the result: {result}.\"\n", - " \" This result was based on this task description: {task_description}.\"\n", - " \" These are incomplete tasks: {incomplete_tasks}.\"\n", - " \" Based on the result, create new tasks to be completed\"\n", - " \" by the AI system that do not overlap with incomplete tasks.\"\n", - " \" Return the tasks as an array.\"\n", - " )\n", - " prompt = PromptTemplate(\n", - " template=task_creation_template,\n", - " input_variables=[\n", - " \"result\",\n", - " \"task_description\",\n", - " \"incomplete_tasks\",\n", - " \"objective\",\n", - " ],\n", - " )\n", - " return cls(prompt=prompt, llm=llm, verbose=verbose)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "b6488ffe", - "metadata": {}, - "outputs": [], - "source": [ - "class TaskPrioritizationChain(LLMChain):\n", - " \"\"\"Chain to prioritize tasks.\"\"\"\n", - "\n", - " @classmethod\n", - " def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:\n", - " \"\"\"Get the response parser.\"\"\"\n", - " task_prioritization_template = (\n", - " \"You are an task prioritization AI tasked with cleaning the formatting of and reprioritizing\"\n", - " \" the following tasks: {task_names}.\"\n", - " \" Consider the ultimate objective of your team: {objective}.\"\n", - " \" Do not remove any tasks. Return the result as a numbered list, like:\"\n", - " \" #. First task\"\n", - " \" #. Second task\"\n", - " \" Start the task list with number {next_task_id}.\"\n", - " )\n", - " prompt = PromptTemplate(\n", - " template=task_prioritization_template,\n", - " input_variables=[\"task_names\", \"next_task_id\", \"objective\"],\n", - " )\n", - " return cls(prompt=prompt, llm=llm, verbose=verbose)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "b43cd580", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.agents import ZeroShotAgent, Tool, AgentExecutor\n", - "from langchain import OpenAI, SerpAPIWrapper, LLMChain\n", - "\n", - "todo_prompt = PromptTemplate.from_template(\n", - " \"You are a planner who is an expert at coming up with a todo list for a given objective. Come up with a todo list for this objective: {objective}\"\n", - ")\n", - "todo_chain = LLMChain(llm=OpenAI(temperature=0), prompt=todo_prompt)\n", - "search = SerpAPIWrapper()\n", - "tools = [\n", - " Tool(\n", - " name=\"Search\",\n", - " func=search.run,\n", - " description=\"useful for when you need to answer questions about current events\",\n", - " ),\n", - " Tool(\n", - " name=\"TODO\",\n", - " func=todo_chain.run,\n", - " description=\"useful for when you need to come up with todo lists. Input: an objective to create a todo list for. Output: a todo list for that objective. Please be very clear what the objective is!\",\n", - " ),\n", - "]\n", - "\n", - "\n", - "prefix = \"\"\"You are an AI who performs one task based on the following objective: {objective}. Take into account these previously completed tasks: {context}.\"\"\"\n", - "suffix = \"\"\"Question: {task}\n", - "{agent_scratchpad}\"\"\"\n", - "prompt = ZeroShotAgent.create_prompt(\n", - " tools,\n", - " prefix=prefix,\n", - " suffix=suffix,\n", - " input_variables=[\"objective\", \"task\", \"context\", \"agent_scratchpad\"],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "3ad996c5", - "metadata": {}, - "source": [ - "### Define the BabyAGI Controller\n", - "\n", - "BabyAGI composes the chains defined above in a (potentially-)infinite loop." - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "0ada0636", - "metadata": {}, - "outputs": [], - "source": [ - "def get_next_task(\n", - " task_creation_chain: LLMChain,\n", - " result: Dict,\n", - " task_description: str,\n", - " task_list: List[str],\n", - " objective: str,\n", - ") -> List[Dict]:\n", - " \"\"\"Get the next task.\"\"\"\n", - " incomplete_tasks = \", \".join(task_list)\n", - " response = task_creation_chain.run(\n", - " result=result,\n", - " task_description=task_description,\n", - " incomplete_tasks=incomplete_tasks,\n", - " objective=objective,\n", - " )\n", - " new_tasks = response.split(\"\\n\")\n", - " return [{\"task_name\": task_name} for task_name in new_tasks if task_name.strip()]" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "d35250ad", - "metadata": {}, - "outputs": [], - "source": [ - "def prioritize_tasks(\n", - " task_prioritization_chain: LLMChain,\n", - " this_task_id: int,\n", - " task_list: List[Dict],\n", - " objective: str,\n", - ") -> List[Dict]:\n", - " \"\"\"Prioritize tasks.\"\"\"\n", - " task_names = [t[\"task_name\"] for t in task_list]\n", - " next_task_id = int(this_task_id) + 1\n", - " response = task_prioritization_chain.run(\n", - " task_names=task_names, next_task_id=next_task_id, objective=objective\n", - " )\n", - " new_tasks = response.split(\"\\n\")\n", - " prioritized_task_list = []\n", - " for task_string in new_tasks:\n", - " if not task_string.strip():\n", - " continue\n", - " task_parts = task_string.strip().split(\".\", 1)\n", - " if len(task_parts) == 2:\n", - " task_id = task_parts[0].strip()\n", - " task_name = task_parts[1].strip()\n", - " prioritized_task_list.append({\"task_id\": task_id, \"task_name\": task_name})\n", - " return prioritized_task_list" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "e3f1840c", - "metadata": {}, - "outputs": [], - "source": [ - "def _get_top_tasks(vectorstore, query: str, k: int) -> List[str]:\n", - " \"\"\"Get the top k tasks based on the query.\"\"\"\n", - " results = vectorstore.similarity_search_with_score(query, k=k)\n", - " if not results:\n", - " return []\n", - " sorted_results, _ = zip(*sorted(results, key=lambda x: x[1], reverse=True))\n", - " return [str(item.metadata[\"task\"]) for item in sorted_results]\n", - "\n", - "\n", - "def execute_task(\n", - " vectorstore, execution_chain: LLMChain, objective: str, task: str, k: int = 5\n", - ") -> str:\n", - " \"\"\"Execute a task.\"\"\"\n", - " context = _get_top_tasks(vectorstore, query=objective, k=k)\n", - " return execution_chain.run(objective=objective, context=context, task=task)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "1e978938", - "metadata": {}, - "outputs": [], - "source": [ - "class BabyAGI(Chain, BaseModel):\n", - " \"\"\"Controller model for the BabyAGI agent.\"\"\"\n", - "\n", - " task_list: deque = Field(default_factory=deque)\n", - " task_creation_chain: TaskCreationChain = Field(...)\n", - " task_prioritization_chain: TaskPrioritizationChain = Field(...)\n", - " execution_chain: AgentExecutor = Field(...)\n", - " task_id_counter: int = Field(1)\n", - " vectorstore: VectorStore = Field(init=False)\n", - " max_iterations: Optional[int] = None\n", - "\n", - " class Config:\n", - " \"\"\"Configuration for this pydantic object.\"\"\"\n", - "\n", - " arbitrary_types_allowed = True\n", - "\n", - " def add_task(self, task: Dict):\n", - " self.task_list.append(task)\n", - "\n", - " def print_task_list(self):\n", - " print(\"\\033[95m\\033[1m\" + \"\\n*****TASK LIST*****\\n\" + \"\\033[0m\\033[0m\")\n", - " for t in self.task_list:\n", - " print(str(t[\"task_id\"]) + \": \" + t[\"task_name\"])\n", - "\n", - " def print_next_task(self, task: Dict):\n", - " print(\"\\033[92m\\033[1m\" + \"\\n*****NEXT TASK*****\\n\" + \"\\033[0m\\033[0m\")\n", - " print(str(task[\"task_id\"]) + \": \" + task[\"task_name\"])\n", - "\n", - " def print_task_result(self, result: str):\n", - " print(\"\\033[93m\\033[1m\" + \"\\n*****TASK RESULT*****\\n\" + \"\\033[0m\\033[0m\")\n", - " print(result)\n", - "\n", - " @property\n", - " def input_keys(self) -> List[str]:\n", - " return [\"objective\"]\n", - "\n", - " @property\n", - " def output_keys(self) -> List[str]:\n", - " return []\n", - "\n", - " def _call(self, inputs: Dict[str, Any]) -> Dict[str, Any]:\n", - " \"\"\"Run the agent.\"\"\"\n", - " objective = inputs[\"objective\"]\n", - " first_task = inputs.get(\"first_task\", \"Make a todo list\")\n", - " self.add_task({\"task_id\": 1, \"task_name\": first_task})\n", - " num_iters = 0\n", - " while True:\n", - " if self.task_list:\n", - " self.print_task_list()\n", - "\n", - " # Step 1: Pull the first task\n", - " task = self.task_list.popleft()\n", - " self.print_next_task(task)\n", - "\n", - " # Step 2: Execute the task\n", - " result = execute_task(\n", - " self.vectorstore, self.execution_chain, objective, task[\"task_name\"]\n", - " )\n", - " this_task_id = int(task[\"task_id\"])\n", - " self.print_task_result(result)\n", - "\n", - " # Step 3: Store the result in Pinecone\n", - " result_id = f\"result_{task['task_id']}_{num_iters}\"\n", - " self.vectorstore.add_texts(\n", - " texts=[result],\n", - " metadatas=[{\"task\": task[\"task_name\"]}],\n", - " ids=[result_id],\n", - " )\n", - "\n", - " # Step 4: Create new tasks and reprioritize task list\n", - " new_tasks = get_next_task(\n", - " self.task_creation_chain,\n", - " result,\n", - " task[\"task_name\"],\n", - " [t[\"task_name\"] for t in self.task_list],\n", - " objective,\n", - " )\n", - " for new_task in new_tasks:\n", - " self.task_id_counter += 1\n", - " new_task.update({\"task_id\": self.task_id_counter})\n", - " self.add_task(new_task)\n", - " self.task_list = deque(\n", - " prioritize_tasks(\n", - " self.task_prioritization_chain,\n", - " this_task_id,\n", - " list(self.task_list),\n", - " objective,\n", - " )\n", - " )\n", - " num_iters += 1\n", - " if self.max_iterations is not None and num_iters == self.max_iterations:\n", - " print(\n", - " \"\\033[91m\\033[1m\" + \"\\n*****TASK ENDING*****\\n\" + \"\\033[0m\\033[0m\"\n", - " )\n", - " break\n", - " return {}\n", - "\n", - " @classmethod\n", - " def from_llm(\n", - " cls, llm: BaseLLM, vectorstore: VectorStore, verbose: bool = False, **kwargs\n", - " ) -> \"BabyAGI\":\n", - " \"\"\"Initialize the BabyAGI Controller.\"\"\"\n", - " task_creation_chain = TaskCreationChain.from_llm(llm, verbose=verbose)\n", - " task_prioritization_chain = TaskPrioritizationChain.from_llm(\n", - " llm, verbose=verbose\n", - " )\n", - " llm_chain = LLMChain(llm=llm, prompt=prompt)\n", - " tool_names = [tool.name for tool in tools]\n", - " agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names)\n", - " agent_executor = AgentExecutor.from_agent_and_tools(\n", - " agent=agent, tools=tools, verbose=True\n", - " )\n", - " return cls(\n", - " task_creation_chain=task_creation_chain,\n", - " task_prioritization_chain=task_prioritization_chain,\n", - " execution_chain=agent_executor,\n", - " vectorstore=vectorstore,\n", - " **kwargs,\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "05ba762e", - "metadata": {}, - "source": [ - "### Run the BabyAGI\n", - "\n", - "Now it's time to create the BabyAGI controller and watch it try to accomplish your objective." - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "3d220b69", - "metadata": {}, - "outputs": [], - "source": [ - "OBJECTIVE = \"Write a weather report for SF today\"" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "8a8e5543", - "metadata": {}, - "outputs": [], - "source": [ - "llm = OpenAI(temperature=0)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "3d69899b", - "metadata": {}, - "outputs": [], - "source": [ - "# Logging of LLMChains\n", - "verbose = False\n", - "# If None, will keep on going forever\n", - "max_iterations: Optional[int] = 3\n", - "baby_agi = BabyAGI.from_llm(\n", - " llm=llm, vectorstore=vectorstore, verbose=verbose, max_iterations=max_iterations\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "f7957b51", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[95m\u001b[1m\n", - "*****TASK LIST*****\n", - "\u001b[0m\u001b[0m\n", - "1: Make a todo list\n", - "\u001b[92m\u001b[1m\n", - "*****NEXT TASK*****\n", - "\u001b[0m\u001b[0m\n", - "1: Make a todo list\n", - "\n", - "\n", - "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mThought: I need to gather data on the current weather conditions in SF\n", - "Action: Search\n", - "Action Input: Current weather conditions in SF\u001b[0m\n", - "Observation: \u001b[36;1m\u001b[1;3mHigh 67F. Winds WNW at 10 to 15 mph. Clear to partly cloudy.\u001b[0m\n", - "Thought:\u001b[32;1m\u001b[1;3m I need to make a todo list\n", - "Action: TODO\n", - "Action Input: Write a weather report for SF today\u001b[0m\n", - "Observation: \u001b[33;1m\u001b[1;3m\n", - "\n", - "1. Research current weather conditions in San Francisco\n", - "2. Gather data on temperature, humidity, wind speed, and other relevant weather conditions\n", - "3. Analyze data to determine current weather trends\n", - "4. Write a brief introduction to the weather report\n", - "5. Describe current weather conditions in San Francisco\n", - "6. Discuss any upcoming weather changes\n", - "7. Summarize the weather report\n", - "8. Proofread and edit the report\n", - "9. Submit the report\u001b[0m\n", - "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n", - "Final Answer: A weather report for SF today should include research on current weather conditions in San Francisco, gathering data on temperature, humidity, wind speed, and other relevant weather conditions, analyzing data to determine current weather trends, writing a brief introduction to the weather report, describing current weather conditions in San Francisco, discussing any upcoming weather changes, summarizing the weather report, proofreading and editing the report, and submitting the report.\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[93m\u001b[1m\n", - "*****TASK RESULT*****\n", - "\u001b[0m\u001b[0m\n", - "A weather report for SF today should include research on current weather conditions in San Francisco, gathering data on temperature, humidity, wind speed, and other relevant weather conditions, analyzing data to determine current weather trends, writing a brief introduction to the weather report, describing current weather conditions in San Francisco, discussing any upcoming weather changes, summarizing the weather report, proofreading and editing the report, and submitting the report.\n", - "\u001b[95m\u001b[1m\n", - "*****TASK LIST*****\n", - "\u001b[0m\u001b[0m\n", - "2: Gather data on temperature, humidity, wind speed, and other relevant weather conditions\n", - "3: Analyze data to determine current weather trends\n", - "4: Write a brief introduction to the weather report\n", - "5: Describe current weather conditions in San Francisco\n", - "6: Discuss any upcoming weather changes\n", - "7: Summarize the weather report\n", - "8: Proofread and edit the report\n", - "9: Submit the report\n", - "1: Research current weather conditions in San Francisco\n", - "\u001b[92m\u001b[1m\n", - "*****NEXT TASK*****\n", - "\u001b[0m\u001b[0m\n", - "2: Gather data on temperature, humidity, wind speed, and other relevant weather conditions\n", - "\n", - "\n", - "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mThought: I need to search for the current weather conditions in SF\n", - "Action: Search\n", - "Action Input: Current weather conditions in SF\u001b[0m\n", - "Observation: \u001b[36;1m\u001b[1;3mHigh 67F. Winds WNW at 10 to 15 mph. Clear to partly cloudy.\u001b[0m\n", - "Thought:\u001b[32;1m\u001b[1;3m I need to make a todo list\n", - "Action: TODO\n", - "Action Input: Create a weather report for SF today\u001b[0m\n", - "Observation: \u001b[33;1m\u001b[1;3m\n", - "\n", - "1. Gather current weather data for SF, including temperature, wind speed, humidity, and precipitation.\n", - "2. Research historical weather data for SF to compare current conditions.\n", - "3. Analyze current and historical data to determine any trends or patterns.\n", - "4. Create a visual representation of the data, such as a graph or chart.\n", - "5. Write a summary of the weather report, including key findings and any relevant information.\n", - "6. Publish the weather report on a website or other platform.\u001b[0m\n", - "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n", - "Final Answer: Today in San Francisco, the temperature is 67F with winds WNW at 10 to 15 mph. The sky is clear to partly cloudy.\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[93m\u001b[1m\n", - "*****TASK RESULT*****\n", - "\u001b[0m\u001b[0m\n", - "Today in San Francisco, the temperature is 67F with winds WNW at 10 to 15 mph. The sky is clear to partly cloudy.\n", - "\u001b[95m\u001b[1m\n", - "*****TASK LIST*****\n", - "\u001b[0m\u001b[0m\n", - "3: Research current weather conditions in San Francisco\n", - "4: Compare the current weather conditions in San Francisco to the average for this time of year.\n", - "5: Identify any potential weather-related hazards in the area.\n", - "6: Research any historical weather patterns in San Francisco.\n", - "7: Analyze data to determine current weather trends\n", - "8: Include any relevant data from nearby cities in the report.\n", - "9: Include any relevant data from the National Weather Service in the report.\n", - "10: Include any relevant data from local news sources in the report.\n", - "11: Include any relevant data from online weather sources in the report.\n", - "12: Include any relevant data from local meteorologists in the report.\n", - "13: Include any relevant data from local weather stations in the report.\n", - "14: Include any relevant data from satellite images in the report.\n", - "15: Describe current weather conditions in San Francisco\n", - "16: Discuss any upcoming weather changes\n", - "17: Write a brief introduction to the weather report\n", - "18: Summarize the weather report\n", - "19: Proofread and edit the report\n", - "20: Submit the report\n", - "\u001b[92m\u001b[1m\n", - "*****NEXT TASK*****\n", - "\u001b[0m\u001b[0m\n", - "3: Research current weather conditions in San Francisco\n", - "\n", - "\n", - "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", - "\u001b[32;1m\u001b[1;3mThought: I need to search for current weather conditions in San Francisco\n", - "Action: Search\n", - "Action Input: Current weather conditions in San Francisco\u001b[0m\n", - "Observation: \u001b[36;1m\u001b[1;3mTodaySun 04/09 High 67 · 1% Precip. ; TonightSun 04/09 Low 49 · 9% Precip. ; TomorrowMon 04/10 High 64 · 11% Precip.\u001b[0m\n", - "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n", - "Final Answer: Today in San Francisco, the high temperature is 67 degrees with 1% chance of precipitation. The low temperature tonight is 49 degrees with 9% chance of precipitation. Tomorrow's high temperature is 64 degrees with 11% chance of precipitation.\u001b[0m\n", - "\n", - "\u001b[1m> Finished chain.\u001b[0m\n", - "\u001b[93m\u001b[1m\n", - "*****TASK RESULT*****\n", - "\u001b[0m\u001b[0m\n", - "Today in San Francisco, the high temperature is 67 degrees with 1% chance of precipitation. The low temperature tonight is 49 degrees with 9% chance of precipitation. Tomorrow's high temperature is 64 degrees with 11% chance of precipitation.\n", - "\u001b[91m\u001b[1m\n", - "*****TASK ENDING*****\n", - "\u001b[0m\u001b[0m\n" - ] - }, - { - "data": { - "text/plain": [ - "{'objective': 'Write a weather report for SF today'}" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "baby_agi({\"objective\": OBJECTIVE})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "898a210b", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/extras/use_cases/code_understanding.ipynb b/docs/extras/use_cases/code_understanding.ipynb index a649d7409..6e59c3f24 100644 --- a/docs/extras/use_cases/code_understanding.ipynb +++ b/docs/extras/use_cases/code_understanding.ipynb @@ -66,11 +66,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ - "from git import Repo\n", + "# from git import Repo\n", "from langchain.text_splitter import Language\n", "from langchain.document_loaders.generic import GenericLoader\n", "from langchain.document_loaders.parsers import LanguageParser" @@ -78,13 +78,13 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Clone\n", "repo_path = \"/Users/rlm/Desktop/test_repo\"\n", - "repo = Repo.clone_from(\"https://github.com/hwchase17/langchain\", to_path=repo_path)" + "# repo = Repo.clone_from(\"https://github.com/hwchase17/langchain\", to_path=repo_path)" ] }, { @@ -100,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -109,7 +109,7 @@ "1293" ] }, - "execution_count": 14, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -148,7 +148,7 @@ "3748" ] }, - "execution_count": 17, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -187,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -195,7 +195,7 @@ "from langchain.embeddings.openai import OpenAIEmbeddings\n", "db = Chroma.from_documents(texts, OpenAIEmbeddings(disallowed_special=()))\n", "retriever = db.as_retriever(\n", - " search_type=\"mmr\", # Also test \"similarity\"\n", + " search_type=\"mmr\", # Also test \"similarity\"\n", " search_kwargs={\"k\": 8},\n", ")" ] @@ -217,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -231,22 +231,22 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'To load a source code as documents for a QA over code, you can use the `CodeLoader` class. This class allows you to load source code files and split them into classes and functions.\\n\\nHere is an example of how to use the `CodeLoader` class:\\n\\n```python\\nfrom langchain.document_loaders.code import CodeLoader\\n\\n# Specify the path to the source code file\\ncode_file_path = \"path/to/code/file.py\"\\n\\n# Create an instance of the CodeLoader class\\ncode_loader = CodeLoader(code_file_path)\\n\\n# Load the code as documents\\ndocuments = code_loader.load()\\n\\n# Iterate over the documents\\nfor document in documents:\\n # Access the class or function name\\n name = document.metadata[\"name\"]\\n \\n # Access the code content\\n code = document.page_content\\n \\n # Process the code as needed\\n # ...\\n```\\n\\nIn the example above, `code_file_path` should be replaced with the actual path to your source code file. The `load()` method of the `CodeLoader` class will return a list of `Document` objects, where each document represents a class or function in the source code. You can access the class or function name using the `metadata[\"name\"]` attribute, and the code content using the `page_content` attribute of each `Document` object.\\n\\nYou can then process the code as needed for your QA task.'" + "'To initialize a ReAct agent, you need to follow these steps:\\n\\n1. Initialize a language model `llm` of type `BaseLanguageModel`.\\n\\n2. Initialize a document store `docstore` of type `Docstore`.\\n\\n3. Create a `DocstoreExplorer` with the initialized `docstore`. The `DocstoreExplorer` is used to search for and look up terms in the document store.\\n\\n4. Create an array of `Tool` objects. The `Tool` objects represent the actions that the agent can perform. In the case of `ReActDocstoreAgent`, the tools must be \"Search\" and \"Lookup\" with their corresponding functions from the `DocstoreExplorer`.\\n\\n5. Initialize the `ReActDocstoreAgent` using the `from_llm_and_tools` method with the `llm` (language model) and `tools` as parameters.\\n\\n6. Initialize the `ReActChain` (which is the `AgentExecutor`) using the `ReActDocstoreAgent` and `tools` as parameters.\\n\\nHere is an example of how to do this:\\n\\n```python\\nfrom langchain import ReActChain, OpenAI\\nfrom langchain.docstore.base import Docstore\\nfrom langchain.docstore.document import Document\\nfrom langchain.tools.base import BaseTool\\n\\n# Initialize the LLM and a docstore\\nllm = OpenAI()\\ndocstore = Docstore()\\n\\ndocstore_explorer = DocstoreExplorer(docstore)\\ntools = [\\n Tool(\\n name=\"Search\",\\n func=docstore_explorer.search,\\n description=\"Search for a term in the docstore.\",\\n ),\\n Tool(\\n name=\"Lookup\",\\n func=docstore_explorer.lookup,\\n description=\"Lookup a term in the docstore.\",\\n ),\\n]\\nagent = ReActDocstoreAgent.from_llm_and_tools(llm, tools)\\nreact = ReActChain(agent=agent, tools=tools)\\n```\\n\\nKeep in mind that this is a simplified example and you might need to adapt it to your specific needs.'" ] }, - "execution_count": 30, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "question = \"How can I load a source code as documents, for a QA over code, spliting the code in classes and functions?\"\n", + "question = \"How can I initialize a ReAct agent?\"\n", "result = qa(question)\n", "result['answer']" ] @@ -328,6 +328,679 @@ "\n", "![Image description](/img/code_retrieval.png)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Open source LLMs\n", + "\n", + "We can use [Code LLaMA](https://about.fb.com/news/2023/08/code-llama-ai-for-coding/) via LLamaCPP or [Ollama integration](https://ollama.ai/blog/run-code-llama-locally).\n", + "\n", + "Note: be sure to upgrade `llama-cpp-python` in order to use the new `gguf` [file format](https://github.com/abetlen/llama-cpp-python/pull/633).\n", + "\n", + "```\n", + "CMAKE_ARGS=\"-DLLAMA_METAL=on\" FORCE_CMAKE=1 /Users/rlm/miniforge3/envs/llama2/bin/pip install -U llama-cpp-python --no-cache-dir\n", + "```\n", + " \n", + "Check out the latest code-llama models [here](https://huggingface.co/TheBloke/CodeLlama-13B-Instruct-GGUF/tree/main)." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.llms import LlamaCpp\n", + "from langchain import PromptTemplate, LLMChain\n", + "from langchain.callbacks.manager import CallbackManager\n", + "from langchain.memory import ConversationSummaryMemory\n", + "from langchain.chains import ConversationalRetrievalChain \n", + "from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "llama_model_loader: loaded meta data with 17 key-value pairs and 363 tensors from /Users/rlm/Desktop/Code/llama/code-llama/codellama-13b-instruct.Q4_K_M.gguf (version GGUF V1 (latest))\n", + "llama_model_loader: - tensor 0: token_embd.weight q4_0 [ 5120, 32016, 1, 1 ]\n", + "llama_model_loader: - tensor 1: output_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 2: output.weight f16 [ 5120, 32016, 1, 1 ]\n", + "llama_model_loader: - tensor 3: blk.0.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 4: blk.0.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 5: blk.0.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 6: blk.0.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 7: blk.0.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 8: blk.0.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 9: blk.0.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 10: blk.0.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 11: blk.0.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 12: blk.1.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 13: blk.1.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 14: blk.1.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 15: blk.1.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 16: blk.1.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 17: blk.1.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 18: blk.1.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 19: blk.1.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 20: blk.1.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 21: blk.2.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 22: blk.2.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 23: blk.2.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 24: blk.2.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 25: blk.2.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 26: blk.2.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 27: blk.2.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 28: blk.2.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 29: blk.2.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 30: blk.3.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 31: blk.3.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 32: blk.3.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 33: blk.3.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 34: blk.3.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 35: blk.3.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 36: blk.3.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 37: blk.3.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 38: blk.3.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 39: blk.4.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 40: blk.4.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 41: blk.4.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 42: blk.4.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 43: blk.4.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 44: blk.4.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 45: blk.4.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 46: blk.4.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 47: blk.4.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 48: blk.5.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 49: blk.5.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 50: blk.5.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 51: blk.5.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 52: blk.5.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 53: blk.5.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 54: blk.5.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 55: blk.5.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 56: blk.5.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 57: blk.6.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 58: blk.6.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 59: blk.6.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 60: blk.6.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 61: blk.6.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 62: blk.6.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 63: blk.6.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 64: blk.6.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 65: blk.6.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 66: blk.7.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 67: blk.7.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 68: blk.7.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 69: blk.7.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 70: blk.7.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 71: blk.7.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 72: blk.7.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 73: blk.7.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 74: blk.7.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 75: blk.8.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 76: blk.8.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 77: blk.8.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 78: blk.8.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 79: blk.8.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 80: blk.8.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 81: blk.8.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 82: blk.8.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 83: blk.8.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 84: blk.9.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 85: blk.9.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 86: blk.9.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 87: blk.9.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 88: blk.9.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 89: blk.9.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 90: blk.9.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 91: blk.9.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 92: blk.9.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 93: blk.10.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 94: blk.10.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 95: blk.10.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 96: blk.10.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 97: blk.10.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 98: blk.10.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 99: blk.10.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 100: blk.10.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 101: blk.10.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 102: blk.11.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 103: blk.11.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 104: blk.11.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 105: blk.11.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 106: blk.11.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 107: blk.11.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 108: blk.11.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 109: blk.11.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 110: blk.11.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 111: blk.12.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 112: blk.12.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 113: blk.12.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 114: blk.12.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 115: blk.12.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 116: blk.12.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 117: blk.12.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 118: blk.12.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 119: blk.12.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 120: blk.13.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 121: blk.13.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 122: blk.13.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 123: blk.13.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 124: blk.13.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 125: blk.13.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 126: blk.13.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 127: blk.13.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 128: blk.13.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 129: blk.14.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 130: blk.14.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 131: blk.14.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 132: blk.14.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 133: blk.14.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 134: blk.14.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 135: blk.14.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 136: blk.14.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 137: blk.14.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 138: blk.15.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 139: blk.15.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 140: blk.15.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 141: blk.15.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 142: blk.15.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 143: blk.15.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 144: blk.15.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 145: blk.15.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 146: blk.15.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 147: blk.16.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 148: blk.16.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 149: blk.16.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 150: blk.16.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 151: blk.16.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 152: blk.16.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 153: blk.16.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 154: blk.16.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 155: blk.16.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 156: blk.17.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 157: blk.17.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 158: blk.17.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 159: blk.17.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 160: blk.17.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 161: blk.17.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 162: blk.17.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 163: blk.17.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 164: blk.17.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 165: blk.18.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 166: blk.18.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 167: blk.18.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 168: blk.18.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 169: blk.18.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 170: blk.18.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 171: blk.18.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 172: blk.18.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 173: blk.18.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 174: blk.19.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 175: blk.19.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 176: blk.19.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 177: blk.19.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 178: blk.19.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 179: blk.19.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 180: blk.19.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 181: blk.19.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 182: blk.19.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 183: blk.20.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 184: blk.20.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 185: blk.20.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 186: blk.20.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 187: blk.20.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 188: blk.20.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 189: blk.20.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 190: blk.20.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 191: blk.20.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 192: blk.21.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 193: blk.21.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 194: blk.21.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 195: blk.21.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 196: blk.21.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 197: blk.21.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 198: blk.21.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 199: blk.21.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 200: blk.21.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 201: blk.22.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 202: blk.22.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 203: blk.22.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 204: blk.22.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 205: blk.22.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 206: blk.22.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 207: blk.22.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 208: blk.22.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 209: blk.22.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 210: blk.23.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 211: blk.23.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 212: blk.23.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 213: blk.23.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 214: blk.23.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 215: blk.23.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 216: blk.23.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 217: blk.23.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 218: blk.23.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 219: blk.24.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 220: blk.24.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 221: blk.24.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 222: blk.24.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 223: blk.24.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 224: blk.24.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 225: blk.24.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 226: blk.24.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 227: blk.24.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 228: blk.25.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 229: blk.25.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 230: blk.25.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 231: blk.25.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 232: blk.25.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 233: blk.25.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 234: blk.25.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 235: blk.25.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 236: blk.25.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 237: blk.26.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 238: blk.26.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 239: blk.26.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 240: blk.26.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 241: blk.26.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 242: blk.26.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 243: blk.26.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 244: blk.26.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 245: blk.26.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 246: blk.27.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 247: blk.27.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 248: blk.27.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 249: blk.27.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 250: blk.27.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 251: blk.27.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 252: blk.27.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 253: blk.27.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 254: blk.27.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 255: blk.28.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 256: blk.28.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 257: blk.28.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 258: blk.28.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 259: blk.28.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 260: blk.28.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 261: blk.28.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 262: blk.28.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 263: blk.28.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 264: blk.29.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 265: blk.29.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 266: blk.29.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 267: blk.29.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 268: blk.29.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 269: blk.29.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 270: blk.29.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 271: blk.29.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 272: blk.29.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 273: blk.30.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 274: blk.30.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 275: blk.30.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 276: blk.30.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 277: blk.30.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 278: blk.30.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 279: blk.30.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 280: blk.30.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 281: blk.30.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 282: blk.31.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 283: blk.31.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 284: blk.31.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 285: blk.31.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 286: blk.31.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 287: blk.31.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 288: blk.31.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 289: blk.31.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 290: blk.31.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 291: blk.32.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 292: blk.32.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 293: blk.32.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 294: blk.32.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 295: blk.32.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 296: blk.32.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 297: blk.32.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 298: blk.32.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 299: blk.32.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 300: blk.33.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 301: blk.33.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 302: blk.33.attn_v.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 303: blk.33.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 304: blk.33.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 305: blk.33.ffn_down.weight q4_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 306: blk.33.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 307: blk.33.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 308: blk.33.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 309: blk.34.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 310: blk.34.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 311: blk.34.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 312: blk.34.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 313: blk.34.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 314: blk.34.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 315: blk.34.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 316: blk.34.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 317: blk.34.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 318: blk.35.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 319: blk.35.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 320: blk.35.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 321: blk.35.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 322: blk.35.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 323: blk.35.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 324: blk.35.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 325: blk.35.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 326: blk.35.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 327: blk.36.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 328: blk.36.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 329: blk.36.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 330: blk.36.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 331: blk.36.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 332: blk.36.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 333: blk.36.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 334: blk.36.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 335: blk.36.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 336: blk.37.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 337: blk.37.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 338: blk.37.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 339: blk.37.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 340: blk.37.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 341: blk.37.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 342: blk.37.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 343: blk.37.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 344: blk.37.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 345: blk.38.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 346: blk.38.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 347: blk.38.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 348: blk.38.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 349: blk.38.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 350: blk.38.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 351: blk.38.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 352: blk.38.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 353: blk.38.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 354: blk.39.attn_q.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 355: blk.39.attn_k.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 356: blk.39.attn_v.weight q6_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 357: blk.39.attn_output.weight q4_K [ 5120, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 358: blk.39.ffn_gate.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 359: blk.39.ffn_down.weight q6_K [ 13824, 5120, 1, 1 ]\n", + "llama_model_loader: - tensor 360: blk.39.ffn_up.weight q4_K [ 5120, 13824, 1, 1 ]\n", + "llama_model_loader: - tensor 361: blk.39.attn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - tensor 362: blk.39.ffn_norm.weight f32 [ 5120, 1, 1, 1 ]\n", + "llama_model_loader: - kv 0: general.architecture str \n", + "llama_model_loader: - kv 1: general.name str \n", + "llama_model_loader: - kv 2: llama.context_length u32 \n", + "llama_model_loader: - kv 3: llama.embedding_length u32 \n", + "llama_model_loader: - kv 4: llama.block_count u32 \n", + "llama_model_loader: - kv 5: llama.feed_forward_length u32 \n", + "llama_model_loader: - kv 6: llama.rope.dimension_count u32 \n", + "llama_model_loader: - kv 7: llama.attention.head_count u32 \n", + "llama_model_loader: - kv 8: llama.attention.head_count_kv u32 \n", + "llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 \n", + "llama_model_loader: - kv 10: llama.rope.freq_base f32 \n", + "llama_model_loader: - kv 11: general.file_type u32 \n", + "llama_model_loader: - kv 12: tokenizer.ggml.model str \n", + "llama_model_loader: - kv 13: tokenizer.ggml.tokens arr \n", + "llama_model_loader: - kv 14: tokenizer.ggml.scores arr \n", + "llama_model_loader: - kv 15: tokenizer.ggml.token_type arr \n", + "llama_model_loader: - kv 16: general.quantization_version u32 \n", + "llama_model_loader: - type f32: 81 tensors\n", + "llama_model_loader: - type f16: 1 tensors\n", + "llama_model_loader: - type q4_0: 1 tensors\n", + "llama_model_loader: - type q4_K: 240 tensors\n", + "llama_model_loader: - type q6_K: 40 tensors\n", + "llm_load_print_meta: format = GGUF V1 (latest)\n", + "llm_load_print_meta: arch = llama\n", + "llm_load_print_meta: vocab type = SPM\n", + "llm_load_print_meta: n_vocab = 32016\n", + "llm_load_print_meta: n_merges = 0\n", + "llm_load_print_meta: n_ctx_train = 16384\n", + "llm_load_print_meta: n_ctx = 5000\n", + "llm_load_print_meta: n_embd = 5120\n", + "llm_load_print_meta: n_head = 40\n", + "llm_load_print_meta: n_head_kv = 40\n", + "llm_load_print_meta: n_layer = 40\n", + "llm_load_print_meta: n_rot = 128\n", + "llm_load_print_meta: n_gqa = 1\n", + "llm_load_print_meta: f_norm_eps = 1.0e-05\n", + "llm_load_print_meta: f_norm_rms_eps = 1.0e-05\n", + "llm_load_print_meta: n_ff = 13824\n", + "llm_load_print_meta: freq_base = 1000000.0\n", + "llm_load_print_meta: freq_scale = 1\n", + "llm_load_print_meta: model type = 13B\n", + "llm_load_print_meta: model ftype = mostly Q4_K - Medium\n", + "llm_load_print_meta: model size = 13.02 B\n", + "llm_load_print_meta: general.name = LLaMA\n", + "llm_load_print_meta: BOS token = 1 ''\n", + "llm_load_print_meta: EOS token = 2 ''\n", + "llm_load_print_meta: UNK token = 0 ''\n", + "llm_load_print_meta: LF token = 13 '<0x0A>'\n", + "llm_load_tensors: ggml ctx size = 0.11 MB\n", + "llm_load_tensors: mem required = 7685.49 MB (+ 3906.25 MB per state)\n", + ".................................................................................................\n", + "llama_new_context_with_model: kv self size = 3906.25 MB\n", + "ggml_metal_init: allocating\n", + "ggml_metal_init: loading '/Users/rlm/miniforge3/envs/llama2/lib/python3.9/site-packages/llama_cpp/ggml-metal.metal'\n", + "ggml_metal_init: loaded kernel_add 0x12126dd00 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_add_row 0x12126d610 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul 0x12126f2a0 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_row 0x12126f500 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_scale 0x12126f760 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_silu 0x12126fe40 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_relu 0x1212700a0 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_gelu 0x121270300 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_soft_max 0x121270560 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_diag_mask_inf 0x1212707c0 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_f16 0x121270a20 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_q4_0 0x121270c80 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_q4_1 0x121270ee0 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_q8_0 0x121271140 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_q2_K 0x1212713a0 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_q3_K 0x121271600 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_q4_K 0x121271860 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_q5_K 0x121271ac0 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_get_rows_q6_K 0x121271d20 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_rms_norm 0x121271f80 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_norm 0x1212721e0 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_f16_f32 0x121272440 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_q4_0_f32 0x1212726a0 | th_max = 896 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_q4_1_f32 0x121272900 | th_max = 896 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_q8_0_f32 0x121272b60 | th_max = 768 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_q2_K_f32 0x121272dc0 | th_max = 640 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_q3_K_f32 0x121273020 | th_max = 704 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_q4_K_f32 0x121273280 | th_max = 576 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_q5_K_f32 0x1212734e0 | th_max = 576 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mat_q6_K_f32 0x121273740 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_f16_f32 0x1212739a0 | th_max = 768 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_q4_0_f32 0x121273c00 | th_max = 768 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_q8_0_f32 0x121273e60 | th_max = 768 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_q4_1_f32 0x1212740c0 | th_max = 768 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_q2_K_f32 0x121274320 | th_max = 768 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_q3_K_f32 0x121274580 | th_max = 768 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_q4_K_f32 0x1212747e0 | th_max = 768 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_q5_K_f32 0x121274a40 | th_max = 704 | th_width = 32\n", + "ggml_metal_init: loaded kernel_mul_mm_q6_K_f32 0x121274ca0 | th_max = 704 | th_width = 32\n", + "ggml_metal_init: loaded kernel_rope 0x121274f00 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_alibi_f32 0x121275160 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_cpy_f32_f16 0x1212753c0 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_cpy_f32_f32 0x121275620 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: loaded kernel_cpy_f16_f16 0x121275880 | th_max = 1024 | th_width = 32\n", + "ggml_metal_init: recommendedMaxWorkingSetSize = 21845.34 MB\n", + "ggml_metal_init: hasUnifiedMemory = true\n", + "ggml_metal_init: maxTransferRate = built-in GPU\n", + "llama_new_context_with_model: compute buffer total size = 442.03 MB\n", + "llama_new_context_with_model: max tensor size = 312.66 MB\n", + "ggml_metal_add_buffer: allocated 'data ' buffer, size = 7686.00 MB, (20243.77 / 21845.34)\n", + "ggml_metal_add_buffer: allocated 'eval ' buffer, size = 1.42 MB, (20245.19 / 21845.34)\n", + "ggml_metal_add_buffer: allocated 'kv ' buffer, size = 3908.25 MB, (24153.44 / 21845.34), warning: current allocated size is greater than the recommended max working set size\n", + "AVX = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | VSX = 0 | \n", + "ggml_metal_add_buffer: allocated 'alloc ' buffer, size = 440.64 MB, (24594.08 / 21845.34), warning: current allocated size is greater than the recommended max working set size\n" + ] + } + ], + "source": [ + "callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])\n", + "llm = LlamaCpp(\n", + " model_path=\"/Users/rlm/Desktop/Code/llama/code-llama/codellama-13b-instruct.Q4_K_M.gguf\",\n", + " n_ctx=5000,\n", + " n_gpu_layers=1,\n", + " n_batch=512,\n", + " f16_kv=True, # MUST set to True, otherwise you will run into problem after a couple of calls\n", + " callback_manager=callback_manager,\n", + " verbose=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Llama.generate: prefix-match hit\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " You can use the find command with a few options to this task. Here is an example of how you might go about it:\n", + "\n", + "find . -type f -mtime +28 -exec ls {} \\;\n", + "This command only for plain files (not), and limits the search to files that were more than 28 days ago, then the \"ls\" command on each file found. The {} is a for the filenames found by find that are being passed to the -exec option of find.\n", + "\n", + "You can also use find in with other unix utilities like sort and grep to the list of files before they are:\n", + "\n", + "find . -type f -mtime +28 | sort | grep pattern\n", + "This will find all plain files that match a given pattern, then sort the listically and filter it for only the matches.\n", + "\n", + "Answer: `find` is pretty with its search. The should work as well:\n", + "\n", + "\\begin{code}\n", + "ls -l $(find . -mtime +28)\n", + "\\end{code}\n", + "\n", + "(It's a bad idea to parse output from `ls`, though, as you may" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "llama_print_timings: load time = 1074.43 ms\n", + "llama_print_timings: sample time = 180.71 ms / 256 runs ( 0.71 ms per token, 1416.67 tokens per second)\n", + "llama_print_timings: prompt eval time = 0.00 ms / 1 tokens ( 0.00 ms per token, inf tokens per second)\n", + "llama_print_timings: eval time = 9593.04 ms / 256 runs ( 37.47 ms per token, 26.69 tokens per second)\n", + "llama_print_timings: total time = 10139.91 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "' You can use the find command with a few options to this task. Here is an example of how you might go about it:\\n\\nfind . -type f -mtime +28 -exec ls {} \\\\;\\nThis command only for plain files (not), and limits the search to files that were more than 28 days ago, then the \"ls\" command on each file found. The {} is a for the filenames found by find that are being passed to the -exec option of find.\\n\\nYou can also use find in with other unix utilities like sort and grep to the list of files before they are:\\n\\nfind . -type f -mtime +28 | sort | grep pattern\\nThis will find all plain files that match a given pattern, then sort the listically and filter it for only the matches.\\n\\nAnswer: `find` is pretty with its search. The should work as well:\\n\\n\\\\begin{code}\\nls -l $(find . -mtime +28)\\n\\\\end{code}\\n\\n(It\\'s a bad idea to parse output from `ls`, though, as you may'" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "llm(\"Question: In bash, how do I list all the text files in the current directory that have been modified in the last month? Answer:\")" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Llama.generate: prefix-match hit\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " You can use the `ReActAgent` class and pass it the desired tools as, for example, you would do like this to create an agent with the `Lookup` and `Search` tool:\n", + "```python\n", + "from langchain.agents.react import ReActAgent\n", + "from langchain.tools.lookup import Lookup\n", + "from langchain.tools.search import Search\n", + "ReActAgent(Lookup(), Search())\n", + "```" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "llama_print_timings: load time = 1074.43 ms\n", + "llama_print_timings: sample time = 65.46 ms / 94 runs ( 0.70 ms per token, 1435.95 tokens per second)\n", + "llama_print_timings: prompt eval time = 15975.57 ms / 1408 tokens ( 11.35 ms per token, 88.13 tokens per second)\n", + "llama_print_timings: eval time = 4772.57 ms / 93 runs ( 51.32 ms per token, 19.49 tokens per second)\n", + "llama_print_timings: total time = 20959.57 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "{'output_text': ' You can use the `ReActAgent` class and pass it the desired tools as, for example, you would do like this to create an agent with the `Lookup` and `Search` tool:\\n```python\\nfrom langchain.agents.react import ReActAgent\\nfrom langchain.tools.lookup import Lookup\\nfrom langchain.tools.search import Search\\nReActAgent(Lookup(), Search())\\n```'}" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.chains.question_answering import load_qa_chain\n", + "\n", + "# Prompt\n", + "template = \"\"\"Use the following pieces of context to answer the question at the end. \n", + "If you don't know the answer, just say that you don't know, don't try to make up an answer. \n", + "Use three sentences maximum and keep the answer as concise as possible. \n", + "{context}\n", + "Question: {question}\n", + "Helpful Answer:\"\"\"\n", + "QA_CHAIN_PROMPT = PromptTemplate(\n", + " input_variables=[\"context\", \"question\"],\n", + " template=template,\n", + ")\n", + "\n", + "# Docs\n", + "question = \"How can I initialize a ReAct agent?\"\n", + "docs = retriever.get_relevant_documents(question)\n", + "\n", + "# Chain\n", + "chain = load_qa_chain(llm, chain_type=\"stuff\", prompt=QA_CHAIN_PROMPT)\n", + "\n", + "# Run\n", + "chain({\"input_documents\": docs, \"question\": question}, return_only_outputs=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the trace [RAG](https://smith.langchain.com/public/f21c4bcd-88da-4681-8b22-a0bb0e31a0d3/r), showing the retrieved docs." + ] } ], "metadata": { @@ -350,5 +1023,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/extras/use_cases/extraction.ipynb b/docs/extras/use_cases/extraction.ipynb index 20ef1cc03..f1e6b2c23 100644 --- a/docs/extras/use_cases/extraction.ipynb +++ b/docs/extras/use_cases/extraction.ipynb @@ -55,7 +55,7 @@ "source": [ "## Quickstart\n", "\n", - "OpenAI funtions are one way to get started with extraction.\n", + "OpenAI functions are one way to get started with extraction.\n", "\n", "Define a schema that specifies the properties we want to extract from the LLM output.\n", "\n", @@ -122,7 +122,7 @@ "id": "6f7eb826", "metadata": {}, "source": [ - "## Option 1: OpenAI funtions\n", + "## Option 1: OpenAI functions\n", "\n", "### Looking under the hood\n", "\n", diff --git a/docs/extras/use_cases/agent_simulations/camel_role_playing.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/camel_role_playing.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/camel_role_playing.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/camel_role_playing.ipynb diff --git a/docs/extras/use_cases/agent_simulations/characters.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/characters.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/characters.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/characters.ipynb diff --git a/docs/extras/use_cases/agent_simulations/gymnasium.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/gymnasium.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/gymnasium.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/gymnasium.ipynb diff --git a/docs/extras/use_cases/agent_simulations/index.mdx b/docs/extras/use_cases/more/agents/agent_simulations/index.mdx similarity index 100% rename from docs/extras/use_cases/agent_simulations/index.mdx rename to docs/extras/use_cases/more/agents/agent_simulations/index.mdx diff --git a/docs/extras/use_cases/agent_simulations/multi_player_dnd.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/multi_player_dnd.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/multi_player_dnd.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/multi_player_dnd.ipynb diff --git a/docs/extras/use_cases/agent_simulations/multiagent_authoritarian.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/multiagent_authoritarian.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/multiagent_authoritarian.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/multiagent_authoritarian.ipynb diff --git a/docs/extras/use_cases/agent_simulations/multiagent_bidding.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/multiagent_bidding.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/multiagent_bidding.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/multiagent_bidding.ipynb diff --git a/docs/extras/use_cases/agent_simulations/petting_zoo.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/petting_zoo.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/petting_zoo.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/petting_zoo.ipynb diff --git a/docs/extras/use_cases/agent_simulations/two_agent_debate_tools.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/two_agent_debate_tools.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/two_agent_debate_tools.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/two_agent_debate_tools.ipynb diff --git a/docs/extras/use_cases/agent_simulations/two_player_dnd.ipynb b/docs/extras/use_cases/more/agents/agent_simulations/two_player_dnd.ipynb similarity index 100% rename from docs/extras/use_cases/agent_simulations/two_player_dnd.ipynb rename to docs/extras/use_cases/more/agents/agent_simulations/two_player_dnd.ipynb diff --git a/docs/extras/use_cases/more/agents/agents.ipynb b/docs/extras/use_cases/more/agents/agents.ipynb new file mode 100644 index 000000000..e3b187d0e --- /dev/null +++ b/docs/extras/use_cases/more/agents/agents.ipynb @@ -0,0 +1,718 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "842dd272", + "metadata": {}, + "source": [ + "# Agents\n", + "\n", + "[![Open In Collab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/langchain-ai/langchain/blob/master/docs/extras/use_cases/more/agents/agents.ipynb)\n", + "\n", + "## Use case \n", + "\n", + "LLM-based agents are powerful general problem solvers.\n", + "\n", + "The [primary LLM agent components](https://lilianweng.github.io/posts/2023-06-23-agent/) include at least 3 things:\n", + "\n", + "* `Planning`: The ability to break down tasks into smaller sub-goals\n", + "* `Memory`: The ability to retain and recall information\n", + "* `Tools`: The ability to get information from external sources (e.g., APIs)\n", + "\n", + "Unlike LLMs simply connected to [APIs](/docs/use_cases/apis/apis), agents [can](https://www.youtube.com/watch?v=DWUdGhRrv2c):\n", + "\n", + "* Self-correct\n", + "* Handle multi-hop tasks (several intermediate \"hops\" or steps to arrive at a conclusion)\n", + "* Tackle long time horizon tasks (that require access to long-term memory)\n", + "\n", + "![Image description](/img/agents_use_case_1.png)\n", + "\n", + "## Overview \n", + "\n", + "LangChain has [many agent types](/docs/modules/agents/agent_types/).\n", + "\n", + "Nearly all agents will use the following components:\n", + " \n", + "**Planning**\n", + " \n", + "* `Prompt`: Can given the LLM [personality](https://arxiv.org/pdf/2304.03442.pdf), context (e.g, via retrieval from memory), or strategies for learninng (e.g., [chain-of-thought](https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/#chain-of-thought-cot)).\n", + "* `Agent` Responsible for deciding what step to take next using an LLM with the `Prompt`\n", + "\n", + "**Memory**\n", + "\n", + "* This can be short or long-term, allowing the agent to persist information.\n", + "\n", + "**Tools**\n", + "\n", + "* Tools are functions that an agent can call.\n", + "\n", + "But, there are some taxonomic differences:\n", + "\n", + "* `Action agents`: Designed to decide the sequence of actions (tool use) (e.g., OpenAI functions agents, ReAct agents).\n", + "* `Simulation agents`: Designed for role-play often in simulated enviorment (e.g., Generative Agents, CAMEL).\n", + "* `Autonomous agents`: Designed for indepdent execution towards long term goals (e.g., BabyAGI, Auto-GPT).\n", + "\n", + "This will focus on `Action agents`.\n", + "\n", + "\n", + "## Quickstart " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a704c7a", + "metadata": {}, + "outputs": [], + "source": [ + "! pip install langchain openai google-search-results\n", + "\n", + "# Set env var OPENAI_API_KEY and SERPAPI_API_KEY or load from a .env file\n", + "# import dotenv\n", + "\n", + "# dotenv.load_env()" + ] + }, + { + "cell_type": "markdown", + "id": "639d41ad", + "metadata": {}, + "source": [ + "`Tools`\n", + "\n", + "LangChain has [many tools](https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/agents/load_tools.py) for Agents that we can load easily.\n", + "\n", + "Let's load search and a calcultor." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c60001c9", + "metadata": {}, + "outputs": [], + "source": [ + "# Tool\n", + "from langchain.agents import load_tools\n", + "from langchain.chat_models import ChatOpenAI\n", + "llm = ChatOpenAI(temperature=0)\n", + "tools = load_tools([\"serpapi\", \"llm-math\"], llm=llm)" + ] + }, + { + "cell_type": "markdown", + "id": "431ba30b", + "metadata": {}, + "source": [ + "`Agent`\n", + "\n", + "The [`OPENAI_FUNCTIONS` agent](/docs/modules/agents/agent_types/openai_functions_agent) is a good action agent to start with.\n", + "\n", + "OpenAI models have been fine-tuned to recognize when function should be called." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d636395f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'As of 2023, the estimated population of Canada is approximately 39,858,480 people.'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Prompt\n", + "from langchain.agents import AgentExecutor\n", + "from langchain.schema import SystemMessage\n", + "from langchain.agents import OpenAIFunctionsAgent\n", + "system_message = SystemMessage(content=\"You are a search assistant.\")\n", + "prompt = OpenAIFunctionsAgent.create_prompt(system_message=system_message)\n", + "\n", + "# Agent\n", + "search_agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)\n", + "agent_executor = AgentExecutor(agent=search_agent, tools=tools, verbose=False)\n", + "\n", + "# Run\n", + "agent_executor.run(\"How many people live in canada as of 2023?\")" + ] + }, + { + "cell_type": "markdown", + "id": "27842380", + "metadata": {}, + "source": [ + "Great, we have created a simple search agent with a tool!\n", + "\n", + "Note that we use an agent executor, which is the runtime for an agent. \n", + "\n", + "This is what calls the agent and executes the actions it chooses. \n", + "\n", + "Pseudocode for this runtime is below:\n", + "```\n", + "next_action = agent.get_action(...)\n", + "while next_action != AgentFinish:\n", + " observation = run(next_action)\n", + " next_action = agent.get_action(..., next_action, observation)\n", + "return next_action\n", + "```\n", + "\n", + "While this may seem simple, there are several complexities this runtime handles for you, including:\n", + "\n", + "* Handling cases where the agent selects a non-existent tool\n", + "* Handling cases where the tool errors\n", + "* Handling cases where the agent produces output that cannot be parsed into a tool invocation\n", + "* Logging and observability at all levels (agent decisions, tool calls) either to stdout or LangSmith.\n" + ] + }, + { + "cell_type": "markdown", + "id": "0b93c7d0", + "metadata": {}, + "source": [ + "## Memory \n", + "\n", + "### Short-term memory\n", + "\n", + "Of course, `memory` is needed to enable conversation / persistence of information.\n", + "\n", + "LangChain has many options for [short-term memory](/docs/modules/memory/types/), which are frequently used in [chat](/docs/modules/memory/adding_memory.html). \n", + "\n", + "They can be [employed with agents](/docs/modules/memory/agent_with_memory) too.\n", + "\n", + "`ConversationBufferMemory` is a popular choice for short-term memory.\n", + "\n", + "We set `MEMORY_KEY`, which can be referenced by the prompt later.\n", + "\n", + "Now, let's add memory to our agent." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "1d291015", + "metadata": {}, + "outputs": [], + "source": [ + "# Memory \n", + "from langchain.memory import ConversationBufferMemory\n", + "MEMORY_KEY = \"chat_history\"\n", + "memory = ConversationBufferMemory(memory_key=MEMORY_KEY, return_messages=True)\n", + "\n", + "# Prompt w/ placeholder for memory\n", + "from langchain.schema import SystemMessage\n", + "from langchain.agents import OpenAIFunctionsAgent\n", + "from langchain.prompts import MessagesPlaceholder\n", + "system_message = SystemMessage(content=\"You are a search assistant tasked with using Serpapi to answer questions.\")\n", + "prompt = OpenAIFunctionsAgent.create_prompt(\n", + " system_message=system_message,\n", + " extra_prompt_messages=[MessagesPlaceholder(variable_name=MEMORY_KEY)]\n", + ")\n", + "\n", + "# Agent\n", + "search_agent_memory = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt, memory=memory)\n", + "agent_executor_memory = AgentExecutor(agent=search_agent_memory, tools=tools, memory=memory, verbose=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "b4b2249a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'As of August 2023, the estimated population of Canada is approximately 38,781,291 people.'" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agent_executor_memory.run(\"How many people live in Canada as of August, 2023?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "4d31b0cf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'As of August 2023, the largest province in Canada is Ontario, with a population of over 15 million people.'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agent_executor_memory.run(\"What is the population of its largest provence as of August, 2023?\")" + ] + }, + { + "cell_type": "markdown", + "id": "3606c32a", + "metadata": {}, + "source": [ + "Looking at the [trace](https://smith.langchain.com/public/4425a131-ec90-4aaa-acd8-5b880c7452a3/r), we can what is happening:\n", + "\n", + "* The chat history is passed to the LLMs\n", + "* This gives context to `its` in `What is the population of its largest provence as of August, 2023?`\n", + "* The LLM generates a function call to the search tool\n", + "\n", + "```\n", + "function_call:\n", + " name: Search\n", + " arguments: |-\n", + " {\n", + " \"query\": \"population of largest province in Canada as of August 2023\"\n", + " }\n", + "```\n", + "\n", + "* The search is executed\n", + "* The results frum search are passed back to the LLM for synthesis into an answer\n", + "\n", + "![Image description](/img/oai_function_agent.png)" + ] + }, + { + "cell_type": "markdown", + "id": "384e37f8", + "metadata": {}, + "source": [ + "### Long-term memory \n", + "\n", + "Vectorstores are great options for long-term memory." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "1489746c", + "metadata": {}, + "outputs": [], + "source": [ + "import faiss\n", + "from langchain.vectorstores import FAISS\n", + "from langchain.docstore import InMemoryDocstore\n", + "from langchain.embeddings import OpenAIEmbeddings\n", + "embedding_size = 1536\n", + "embeddings_model = OpenAIEmbeddings()\n", + "index = faiss.IndexFlatL2(embedding_size)\n", + "vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})" + ] + }, + { + "cell_type": "markdown", + "id": "9668ef5d", + "metadata": {}, + "source": [ + "### Going deeper \n", + "\n", + "* Explore projects using long-term memory, such as [autonomous agents](/docs/use_cases/autonomous_agents/autonomous_agents)." + ] + }, + { + "cell_type": "markdown", + "id": "43fe2bb3", + "metadata": {}, + "source": [ + "## Tools \n", + "\n", + "As mentioned above, LangChain has [many tools](https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/agents/load_tools.py) for Agents that we can load easily.\n", + "\n", + "We can also define [custom tools](/docs/modules/agents/tools/custom_tools). For example, here is a search tool.\n", + "\n", + "* The `Tool` dataclass wraps functions that accept a single string input and returns a string output.\n", + "* `return_direct` determines whether to return the tool's output directly. \n", + "* Setting this to `True` means that after the tool is called, the `AgentExecutor` will stop looping." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "7357e496", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.agents import Tool, tool\n", + "from langchain.utilities import GoogleSearchAPIWrapper\n", + "search = GoogleSearchAPIWrapper()\n", + "search_tool = [\n", + " Tool(\n", + " name=\"Search\",\n", + " func=search.run,\n", + " description=\"useful for when you need to answer questions about current events\",\n", + " return_direct=True,\n", + " )\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "c6ef5bfa", + "metadata": {}, + "source": [ + "To make it easier to define custom tools, a `@tool` decorator is provided. \n", + "\n", + "This decorator can be used to quickly create a Tool from a simple function." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "b6308c69", + "metadata": {}, + "outputs": [], + "source": [ + "# Tool\n", + "@tool\n", + "def get_word_length(word: str) -> int:\n", + " \"\"\"Returns the length of a word.\"\"\"\n", + " return len(word)\n", + "word_length_tool = [get_word_length]" + ] + }, + { + "cell_type": "markdown", + "id": "83c104d7", + "metadata": {}, + "source": [ + "### Going deeper\n", + "\n", + "**Toolkits**\n", + "\n", + "* Toolkits are groups of tools needed to accomplish specific objectives.\n", + "* [Here](/docs/integrations/toolkits/) are > 15 different agent toolkits (e.g., Gmail, Pandas, etc). \n", + "\n", + "Here is a simple way to think about agents vs the various chains covered in other docs:\n", + "\n", + "![Image description](/img/agents_vs_chains.png)" + ] + }, + { + "cell_type": "markdown", + "id": "5eefe4a0", + "metadata": {}, + "source": [ + "## Agents\n", + "\n", + "There's a number of [action agent types](docs/modules/agents/agent_types/) available in LangChain.\n", + "\n", + "* [ReAct](/docs/modules/agents/agent_types/react.html): This is the most general purpose action agent using the [ReAct framework](https://arxiv.org/pdf/2205.00445.pdf), which can work with [Docstores](/docs/modules/agents/agent_types/react_docstore.html) or [Multi-tool Inputs](/docs/modules/agents/agent_types/structured_chat.html).\n", + "* [OpenAI functions](/docs/modules/agents/agent_types/openai_functions_agent.html): Designed to work with OpenAI function-calling models.\n", + "* [Conversational](/docs/modules/agents/agent_types/chat_conversation_agent.html): This agent is designed to be used in conversational settings\n", + "* [Self-ask with search](/docs/modules/agents/agent_types/self_ask_with_search.html): Designed to lookup factual answers to questions\n", + "\n", + "### OpenAI Functions agent\n", + "\n", + "As shown in Quickstart, let's continue with [`OpenAI functions` agent](/docs/modules/agents/agent_types/).\n", + "\n", + "This uses OpenAI models, which are fine-tuned to detect when a function should to be called.\n", + "\n", + "They will respond with the inputs that should be passed to the function.\n", + "\n", + "But, we can unpack it, first with a custom prompt:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "1c2deb4a", + "metadata": {}, + "outputs": [], + "source": [ + "# Memory\n", + "MEMORY_KEY = \"chat_history\"\n", + "memory = ConversationBufferMemory(memory_key=MEMORY_KEY, return_messages=True)\n", + "\n", + "# Prompt\n", + "from langchain.schema import SystemMessage\n", + "from langchain.agents import OpenAIFunctionsAgent\n", + "system_message = SystemMessage(content=\"You are very powerful assistant, but bad at calculating lengths of words.\")\n", + "prompt = OpenAIFunctionsAgent.create_prompt(\n", + " system_message=system_message,\n", + " extra_prompt_messages=[MessagesPlaceholder(variable_name=MEMORY_KEY)]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ee317a45", + "metadata": {}, + "source": [ + "Define agent:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "460dab9b", + "metadata": {}, + "outputs": [], + "source": [ + "# Agent \n", + "from langchain.agents import OpenAIFunctionsAgent\n", + "agent = OpenAIFunctionsAgent(llm=llm, tools=word_length_tool, prompt=prompt)" + ] + }, + { + "cell_type": "markdown", + "id": "184e6c23", + "metadata": {}, + "source": [ + "Run agent:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "f4f27d37", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'There are 5 letters in the word \"educa\".'" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run the executer, including short-term memory we created\n", + "agent_executor = AgentExecutor(agent=agent, tools=word_length_tool, memory=memory, verbose=False)\n", + "agent_executor.run(\"how many letters in the word educa?\")" + ] + }, + { + "cell_type": "markdown", + "id": "e4d9217e", + "metadata": {}, + "source": [ + "### ReAct agent\n", + "\n", + "[ReAct](https://arxiv.org/abs/2210.03629) agents are another popular framework.\n", + "\n", + "There has been lots of work on [LLM reasoning](https://ai.googleblog.com/2022/05/language-models-perform-reasoning-via.html), such as chain-of-thought prompting.\n", + "\n", + "There also has been work on LLM action-taking to generate obervations, such as [Say-Can](https://say-can.github.io/).\n", + "\n", + "ReAct marries these two ideas:\n", + "\n", + "![Image description](/img/ReAct.png)\n", + " \n", + "It uses a charecteristic `Thought`, `Action`, `Observation` [pattern in the output](https://lilianweng.github.io/posts/2023-06-23-agent/).\n", + " \n", + "We can use `initialize_agent` to create the ReAct agent from a list of available types [here](https://github.com/langchain-ai/langchain/blob/master/libs/langchain/langchain/agents/types.py):\n", + "\n", + "```\n", + "* AgentType.ZERO_SHOT_REACT_DESCRIPTION: ZeroShotAgent\n", + "* AgentType.REACT_DOCSTORE: ReActDocstoreAgent\n", + "* AgentType.SELF_ASK_WITH_SEARCH: SelfAskWithSearchAgent\n", + "* AgentType.CONVERSATIONAL_REACT_DESCRIPTION: ConversationalAgent\n", + "* AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION: ChatAgent\n", + "* AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION: ConversationalChatAgent\n", + "* AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION: StructuredChatAgent\n", + "* AgentType.OPENAI_FUNCTIONS: OpenAIFunctionsAgent\n", + "* AgentType.OPENAI_MULTI_FUNCTIONS: OpenAIMultiFunctionsAgent\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "85f033d3", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.agents import AgentType\n", + "from langchain.agents import initialize_agent\n", + "MEMORY_KEY = \"chat_history\"\n", + "memory = ConversationBufferMemory(memory_key=MEMORY_KEY, return_messages=True)\n", + "react_agent = initialize_agent(search_tool, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=False, memory=memory)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7d05a26c", + "metadata": {}, + "outputs": [], + "source": [ + "react_agent(\"How many people live in Canada as of August, 2023?\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b626dc5", + "metadata": {}, + "outputs": [], + "source": [ + "react_agent(\"What is the population of its largest provence as of August, 2023?\")" + ] + }, + { + "cell_type": "markdown", + "id": "d4df0638", + "metadata": {}, + "source": [ + "LangSmith can help us run diagnostics on the ReAct agent:\n", + "\n", + "The [ReAct agent](https://smith.langchain.com/public/3d8d0a15-d73f-44f3-9f81-037f7031c592/r) fails to pass chat history to LLM, gets wrong answer.\n", + " \n", + "The OAI functions agent does and [gets right answer](https://smith.langchain.com/public/4425a131-ec90-4aaa-acd8-5b880c7452a3/r), as shown above.\n", + " \n", + "Also the search tool result for [ReAct](https://smith.langchain.com/public/6473e608-fc9d-47c9-a8a4-2ef7f2801d82/r) is worse than [OAI](https://smith.langchain.com/public/4425a131-ec90-4aaa-acd8-5b880c7452a3/r/26b85fa9-e33a-4028-8650-1714f8b3db96).\n", + "\n", + "Collectivly, this tells us: carefully inspect Agent traces and tool outputs. \n", + "\n", + "As we saw with the [SQL use case](/docs/use_cases/sql), `ReAct agents` can be work very well for specific problems. \n", + "\n", + "But, as shown here, the result is degraded relative to what we see with the OpenAI agent." + ] + }, + { + "cell_type": "markdown", + "id": "5cde8f9a", + "metadata": {}, + "source": [ + "### Custom\n", + "\n", + "Let's peel it back even further to define our own action agent.\n", + "\n", + "We can [create a custom agent](/docs/modules/agents/how_to/custom_agent.html) to unpack the central pieces:\n", + "\n", + "* `Tools`: The tools the agent has available to use\n", + "* `Agent`: decides which action to take" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "3313f5cd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"The current population of Canada is 38,808,843 as of Tuesday, August 1, 2023, based on Worldometer elaboration of the latest United Nations data 1. Canada 2023\\xa0... Mar 22, 2023 ... Record-high population growth in the year 2022. Canada's population was estimated at 39,566,248 on January 1, 2023, after a record population\\xa0... Jun 19, 2023 ... As of June 16, 2023, there are now 40 million Canadians! This is a historic milestone for Canada and certainly cause for celebration. It is also\\xa0... Jun 28, 2023 ... Canada's population was estimated at 39,858,480 on April 1, 2023, an increase of 292,232 people (+0.7%) from January 1, 2023. The main driver of population growth is immigration, and to a lesser extent, natural growth. Demographics of Canada · Population pyramid of Canada in 2023. May 2, 2023 ... On January 1, 2023, Canada's population was estimated to be 39,566,248, following an unprecedented increase of 1,050,110 people between January\\xa0... Canada ranks 37th by population among countries of the world, comprising about 0.5% of the world's total, with over 40.0 million Canadians as of 2023. The current population of Canada in 2023 is 38,781,291, a 0.85% increase from 2022. The population of Canada in 2022 was 38,454,327, a 0.78% increase from 2021. Whether a given sub-nation is a province or a territory depends upon how its power and authority are derived. Provinces were given their power by the\\xa0... Jun 28, 2023 ... Index to the latest information from the Census of Population. ... 2023. Census in Brief: Multilingualism of Canadian households\\xa0...\"" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from typing import List, Tuple, Any, Union\n", + "from langchain.schema import AgentAction, AgentFinish\n", + "from langchain.agents import Tool, AgentExecutor, BaseSingleActionAgent\n", + "\n", + "class FakeAgent(BaseSingleActionAgent):\n", + " \"\"\"Fake Custom Agent.\"\"\"\n", + "\n", + " @property\n", + " def input_keys(self):\n", + " return [\"input\"]\n", + "\n", + " def plan(\n", + " self, intermediate_steps: List[Tuple[AgentAction, str]], **kwargs: Any\n", + " ) -> Union[AgentAction, AgentFinish]:\n", + " \"\"\"Given input, decided what to do.\n", + "\n", + " Args:\n", + " intermediate_steps: Steps the LLM has taken to date,\n", + " along with observations\n", + " **kwargs: User inputs.\n", + "\n", + " Returns:\n", + " Action specifying what tool to use.\n", + " \"\"\"\n", + " return AgentAction(tool=\"Search\", tool_input=kwargs[\"input\"], log=\"\")\n", + "\n", + " async def aplan(\n", + " self, intermediate_steps: List[Tuple[AgentAction, str]], **kwargs: Any\n", + " ) -> Union[AgentAction, AgentFinish]:\n", + " \"\"\"Given input, decided what to do.\n", + "\n", + " Args:\n", + " intermediate_steps: Steps the LLM has taken to date,\n", + " along with observations\n", + " **kwargs: User inputs.\n", + "\n", + " Returns:\n", + " Action specifying what tool to use.\n", + " \"\"\"\n", + " return AgentAction(tool=\"Search\", tool_input=kwargs[\"input\"], log=\"\")\n", + " \n", + "fake_agent = FakeAgent()\n", + "fake_agent_executor = AgentExecutor.from_agent_and_tools(agent=fake_agent, \n", + " tools=search_tool, \n", + " verbose=False)\n", + "\n", + "fake_agent_executor.run(\"How many people live in canada as of 2023?\")" + ] + }, + { + "cell_type": "markdown", + "id": "1335f0c6", + "metadata": {}, + "source": [ + "## Runtime\n", + "\n", + "The `AgentExecutor` class is the main agent runtime supported by LangChain. \n", + "\n", + "However, there are other, more experimental runtimes for `autonomous_agents`:\n", + " \n", + "* Plan-and-execute Agent\n", + "* Baby AGI\n", + "* Auto GPT\n", + "\n", + "Explore more about:\n", + "\n", + "* [`Simulation agents`](/docs/modules/agents/agent_use_cases/agent_simulations): Designed for role-play often in simulated enviorment (e.g., Generative Agents, CAMEL).\n", + "* [`Autonomous agents`](/docs/modules/agents/agent_use_cases/autonomous_agents): Designed for indepdent execution towards long term goals (e.g., BabyAGI, Auto-GPT).\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/use_cases/agents/camel_role_playing.ipynb b/docs/extras/use_cases/more/agents/agents/camel_role_playing.ipynb similarity index 100% rename from docs/extras/use_cases/agents/camel_role_playing.ipynb rename to docs/extras/use_cases/more/agents/agents/camel_role_playing.ipynb diff --git a/docs/extras/use_cases/agents/custom_agent_with_plugin_retrieval.ipynb b/docs/extras/use_cases/more/agents/agents/custom_agent_with_plugin_retrieval.ipynb similarity index 100% rename from docs/extras/use_cases/agents/custom_agent_with_plugin_retrieval.ipynb rename to docs/extras/use_cases/more/agents/agents/custom_agent_with_plugin_retrieval.ipynb diff --git a/docs/extras/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai.ipynb b/docs/extras/use_cases/more/agents/agents/custom_agent_with_plugin_retrieval_using_plugnplai.ipynb similarity index 100% rename from docs/extras/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai.ipynb rename to docs/extras/use_cases/more/agents/agents/custom_agent_with_plugin_retrieval_using_plugnplai.ipynb diff --git a/docs/extras/use_cases/agents/index.mdx b/docs/extras/use_cases/more/agents/agents/index.mdx similarity index 100% rename from docs/extras/use_cases/agents/index.mdx rename to docs/extras/use_cases/more/agents/agents/index.mdx diff --git a/docs/extras/use_cases/more/agents/agents/multi_modal_output_agent.ipynb b/docs/extras/use_cases/more/agents/agents/multi_modal_output_agent.ipynb new file mode 100644 index 000000000..de67f1f43 --- /dev/null +++ b/docs/extras/use_cases/more/agents/agents/multi_modal_output_agent.ipynb @@ -0,0 +1,298 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "cd835d40", + "metadata": {}, + "source": [ + "# Multi-modal outputs: Image & Text" + ] + }, + { + "cell_type": "markdown", + "id": "fa88e03a", + "metadata": {}, + "source": [ + "This notebook shows how non-text producing tools can be used to create multi-modal agents.\n", + "\n", + "This example is limited to text and image outputs and uses UUIDs to transfer content across tools and agents. \n", + "\n", + "This example uses Steamship to generate and store generated images. Generated are auth protected by default. \n", + "\n", + "You can get your Steamship api key here: https://steamship.com/account/api" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0653da01", + "metadata": {}, + "outputs": [], + "source": [ + "from steamship import Block, Steamship\n", + "import re\n", + "from IPython.display import Image" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f6933033", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain import OpenAI\n", + "from langchain.agents import initialize_agent\n", + "from langchain.agents import AgentType\n", + "from langchain.tools import SteamshipImageGenerationTool" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "71e51e53", + "metadata": {}, + "outputs": [], + "source": [ + "llm = OpenAI(temperature=0)" + ] + }, + { + "cell_type": "markdown", + "id": "a9fc769d", + "metadata": {}, + "source": [ + "## Dall-E " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "cd177dfe", + "metadata": {}, + "outputs": [], + "source": [ + "tools = [SteamshipImageGenerationTool(model_name=\"dall-e\")]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c71b1e46", + "metadata": {}, + "outputs": [], + "source": [ + "mrkl = initialize_agent(\n", + " tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "603aeb9a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I need to generate an image of a parrot playing soccer.\n", + "Action: GenerateImage\n", + "Action Input: A parrot wearing a soccer uniform, kicking a soccer ball.\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3mE28BE7C7-D105-41E0-8A5B-2CE21424DFEC\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now have the UUID of the generated image.\n", + "Final Answer: The UUID of the generated image is E28BE7C7-D105-41E0-8A5B-2CE21424DFEC.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + } + ], + "source": [ + "output = mrkl.run(\"How would you visualize a parot playing soccer?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "25eb4efe", + "metadata": {}, + "outputs": [], + "source": [ + "def show_output(output):\n", + " \"\"\"Display the multi-modal output from the agent.\"\"\"\n", + " UUID_PATTERN = re.compile(\n", + " r\"([0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[0-9A-Za-z]{12})\"\n", + " )\n", + "\n", + " outputs = UUID_PATTERN.split(output)\n", + " outputs = [\n", + " re.sub(r\"^\\W+\", \"\", el) for el in outputs\n", + " ] # Clean trailing and leading non-word characters\n", + "\n", + " for output in outputs:\n", + " maybe_block_id = UUID_PATTERN.search(output)\n", + " if maybe_block_id:\n", + " display(Image(Block.get(Steamship(), _id=maybe_block_id.group()).raw()))\n", + " else:\n", + " print(output, end=\"\\n\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "082792a0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The UUID of the generated image is \n", + "\n" + ] + }, + { + "data": { + "image/png": "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AQEB/wAA/wEAAf8AAAEAAQD//wD/AQEAAAAAAAEAAAABAgD/AAEAAAABAQAA/wD/AAEAAAEA//8A/wEBAf8BAf8BAAEAAP8BAAEAAAABAAAAAf//AQAAAAEAAAD/AQAB/wEBAf8A//8AAAD/AQEBAQEAAQD/AAABAAD/Af8A/wD/AAEBAQIA/wEBAP8AAAABAAD/AAAAAAABAQIBAQEAAQABAAEAAP/+/v8A////AAAAAP8B//8A/wH/AQD//wABAAABAf//AQAB/////wD/AAABAQD/AQAAAAEBAQEBAAD//wAAAP8BAAABAQD//wD//wD/AAH/AAD//wD+AAAA/wD/AAEA/wABAAECAP8AAAABAgEAAQAAAAH//gD/AAEBAP8B/wEBAP8AAAABAAD//wD/AP//AAEAAQEBAgECAP8AAP8AAAD/AAD/AAAA//8BAAIBAQAAAgEBAAEB/wEBAAD/AAD//wH//wD/AAAA/wH//wD///8BAP7+/wD///8AAAAA////AAEB/wD//gD/AP8A////AAAAAP8AAf8AAAEBAQEAAAAAAQD//wD/AP7/Af8A////AAEBAQEAAAH/AAD/AP///wD//wH/AP8B/wEB/wAAAf8BAAAA/wEA/wH//wAB/wEBAQEA//8AAAABAAD/AQAAAAABAAD/AP8AAP8BAQAA/wEAAAD+AAEAAAAAAf8AAAD/AQAAAP///wAA/wAAAQD/AAD//wAAAAAAAAD//wD+AAABAAEB//8BAAAAAAAAAAABAAABAAAAAAD+AP8BAP///////gAAAP//AQAAAQABAP8AAAEAAAAA/wAB//8AAAH/AAAAAAEAAQIAAP8B/wEAAAEA/wABAAEA//4BAAD/AP///wABAQAAAgEBAQEAAAAAAQEAAAH/AAEAAAD/AP///wEAAQIAAAEAAAEBAAEBAAD/AQD/AAECAP///wEAAQAA/wEAAAEAAAAB////AQAAAAEAAAEAAP8AAAABAAAAAAD/AAAAAAD//wAB/wEAAAEB//8BAAACAQD/AP///gABAf8AAAAA/wEBAAH/AAH/AAAB/wAAAAAAAAAC/wEAAAEAAAEBAP8A/wAAAAEAAAEB/wEAAAEBAAEBAAIAAAD/AAECAAEBAgABAAABAP8CAAAB/wAAAP8BAQD/AP8AAP8AAAD/AAAAAAD//gAAAAAA/wEA/wEB/gAAAAH/AQAAAP//AAAAAQEAAAEAAAH/AQEAAAIAAAAAAAEAAQAAAAAA/wD+/wD//gAAAAAAAQACAf8BAQIA/wAA/wAAAP8AAQD/AAD/Af//AAAAAP8A/wEAAAEBAf8AAAAAAAAAAQIBAAIAAP///wEAAAIBAAEAAAAA/wH//wAB/wD+AP8AAAEAAP//AAAA//////8A/wD//gD/AP4AAP8BAAEBAAABAAAAAAD/AAAAAP8BAP8AAAAAAQEA//8AAAAAAAH/AQAAAAAA/wABAAAAAgAAAQEB/wH/AAD//wAAAAEBAP//AAAAAAAAAP8AAAD/AQEBAQEBAAEBAAEA/wABAQEAAAABAQAAAP8AAQAAAAAAAAAAAQEAAQEAAf8BAAEAAAD/Af8AAAD/AAAA/wABAAAAAQAC/wEAAAEAAQAA//8BAAAAAP8BAAABAP//AQABAAABAbKztPj19QAAAQAAAAAA/hIJAFQxAgD/AP8BAQD///8AAP8A//8AAAD1BAD5APf5+/r//f//AAAA/v8A/gEGBQEAAQEAAQH/AP8BAAABAAAAAAL/AAD/AQAAAAH/AAEBAv8AAQABAQAAAAEAAQEBAP/+AAABAAAAAAEBAAAAAf8BAQAAAAAA/wAAAP8AAAAB/wABAAEAAAAAAP8AAQABAAEA//8BAAAA////AQAAAQAAAAAAAAAAAAAAAAH/AAIAAQAA/wABAAH/AP//AAD/AAH+AP8AAf8AAP//AP8B/wEAAP8BAgEAAAL/AAACAQD//v8AAQAAAAEA/v4AAP8AAP8AAAAAAAABAQAAAP4BAQEAAAEAAAD/AAEAAQAA//8BAf8AAAEBAAAA/wAAAP//AP4AAf8AAf8AAAAAAAAAAAAAAP8AAQD/AgEBAAAAAQABAAEAAQD/AAAAAAD+/wAB/wAAAAEAAAAA/wD/AAD//wD//wEAAf8AAAAAAQAAAQAAAAD///4AAQEBAAEAAQAAAAAAAAAAAAAA//8BAP8AAAD/AQD/////AQEAAAAAAQABAQAAAP8AAQABAP/+AAAA//8C//8AAv//AQAAAAAAAf//AAABAQEAAAEAAP8AAf8C/gD/AAAAAQD//wAAAQAAAAABAP//AP8AAAH/AP///v//AQEAAAAAAP8A//7/AQABAAAA////AQAAAAL/AAABAAIAAAH/AP8BAP///v8BAf8A/wAAAP8AAAD/AAEBAAD//wAA/wH///4B/wABAAEAAQEAAQAAAgD/Af8A//8A/wACAQEAAAEAAAABAQEAAgEAAQH///4BAP8A/wD9AAD//wAAAQAAAgEBAQEAAQD/AAAAAQEAAQAAAQEAAQEAAQEBAAEBAAEAAgD//wD/AQAAAf8A/wABAQEA//8AAAAAAf8A//8AAAAAAP8A/wAAAv4BAP8BAP8CAAEAAAAAAAAAAQAAAQABAQH/AQD/AAABAP8AAAAAAP8A/wAAAAD/AAD/AQAA/wH/AP//AAEAAAEAAAAAAAD+/wAAAP8BAgAAAAAAAP8AAQEAAP8B/wH/AP7/AAAAAf8AAgD/AAAAAQEAAAAA////Af//AAAA//8AAf8AAQABAQAAAP//Af////8AAAAAAAD///////8AAQAAAQAAAAAA/wABAQEA/wEBAf//Af//AP8AAAD//wAAAAAA/wABAAD/Af//AP8AAAD+AAAAAAH/AAIAAQIAAQD/AAEBAP8AAQAAAQAA//4AAP4A/wH/AAAA/wD///8AAAEAAQIBAQH/AgD/AAD/AP8AAf8AAAD/AAEBAAAAAP8AAAAAAQD//wAAAAAAAAAAAP//AAACAgEAAAEA/wD/AAAA/wAAAAAB//8AAP8A//8AAQEAAAH/AAD//wAA/v8A/wAAAQAAAAABAf8BAAD//wH//wAAAf//AAAAAAAAAP8AAP8A/v//AP8AAAAA/wAAAAEAAQAAAAEAAAIAAAEA/wEA/gD/AgD/AAAA/wAA/wAAAAH/AP8A/v///gD/AAEAAP8AAgAAAQABAP//Af8AAAD/AQIAAQABAQH/AQH/AAL/AAAAAQAAAAAAAf//AAD//wEAAAAAAf//AAD/AQABAgEAAf8AAQAAAAH/AgAAAQD//wABAAD///8A/wAAAQH/AAL/AAAA/wAAAAAAAQAAAf8AAAEBAAAAAAAAAf8BAAD/AAAAAf//AQAAAAEBAAEAAAD/AQAAAQH/AAAAAAAAAAEAAf8B/wIAAP8BAQABAQABAv8BAAABAgIAAAABAP8BAAD//v//AAAAAAABAQABAQAAAQAB/wD/AQD/AAAAAAAAAP/+Af8AAf//AAAA/wAA//8BAQD+AAAAAQEAAAAAAQAA//8AAQAAAAAA/wAAAAEAAP8AAQAA////AP//AAEA//8AAP4BAAAA/wABAQD/AQAAAQAA///+///+//8BAAD/AQAA////AAAAAQAAAAAA/wAB//8A/wAAAAD/AAAAAAAA////AP8BAAAAAAABAAAAAQDo6OmnpqcAAP8AAP8AAAAAAAFmOwYsGP0BAv0CAP8BAf8BAgABAQH/AP//9QMA/wHv+Pzx/QAAAAAAAgMAAAEJBwoAAP8BAP8BAQAAAf8B/wAA/wD/AAD///4AAAAAAAD+//4BAP//AP//AP7/AP//AAEAAf8A/v8AAQD//wEAAQAB//8BAQAAAAABAAEBAAH/AAAAAQD/AP8BAAEBAAAA//8AAAEA/wAAAAEBAP8AAf8AAAABAQAAAAAAAAAAAQACAP8BAAD/AP8BAAEBAAAAAQD/AgEAAP8BAAIAAQAB//8AAP8B//8AAAD/AQAA/wABAQEB/gD/AQAAAwECAAABAAAAAQAA/gD/AAAAAQAAAAABAAAAAAH/AAAAAAAAAAEAAAD/AP//AAAAAAAAAAAB/wEA/wAAAQAAAQAB//8AAAAA//8A////AAD//wAA//8AAQAAAP4AAQEAAP8AAgEAAQAAAP8AAP8AAQD/AAD/AQEAAQH/AQABAQEAAP8AAQH/AP//AQIBAAAB/wD/AAAAAAAAAAEAAAAAAAEA/wEAAQEBAAAAAQEAAAAAAQAAAQAA////AP8A//8A/wABAP8AAAEA/gAB/v4BAQAAAAAAAP8BAAAB//4AAP///wH/AP8B/wEAAv8AAAD/AQD/AAAAAAH//wABAAABAQD+AP8BAQEBAAAAAP8AAf8BAQEBAgAB/wIBAQIAAP8AAAD/AQAB/wD/AAEA/gAA/wABAQEAAAAAAAAAAAABAAAAAAAA/wH/AQAAAgIBAAAB/wH/AAD/AQAAAAAAAP4AAf8A/wEA//8A//8BAQD/AQAA/wD/AP//Af8A/wAAAAEBAAEAAgABAQEAAf8AAP///v//AP8AAAABAAAAAAAAAf7/AAH/AAAAAP///wD/Af8BAAEAAQABAAABAAAAAP8AAAAAAAAAAQAAAAEAAAD//wAA/wAAAAAB/wAAAAEB/gH/AAAA/wAB/wD/AAEAAAD/AP8AAAD//wEBAP8BAQEBAAEBAP//AQD/AAD/AAH/AAACAf//AAD/AQAAAAAAAAH+AQAA//4AAAD/AP8A//8AAAACAAL/AQACAf//AP8B/////wL/AP8AAQAAAAEBAAAAAgICAAEAAAACAAAB/wH/AAABAf8AAQABAQABAAABAP8AAAABAAAAAP8AAAH/AQEC//8AAQAAAP8AAQABAQABAQIAAQEB/wAA/wAA/wD/AQABAQABAAEAAQD/AAAAAAH/////Af8AAQAA//8AAAAAAf8BAQEBAAAB/wD+AP8AAAH/AAIA/wD/AAD/AP7/AQD/AAEAAAAC//8B//8AAAAA/wD//wEAAP8AAgAAAQD/AAABAAAAAAABAQAAAP//AQAAAAIAAQAAAf8AAAD//wAAAQEB/wEAAP8AAAAAAAAAAAEBAAEC/wEAAAD/AQAAAP8A/wD/AQIAAQIC/wABAAAAAAAAAAEAAQEAAAEBAQAC//8A/wAAAQAAAAAB///+/wD//////wD//wEAAP8AAQAAAAEA/wAAAAD/AQACAAECAQEAAf/+AQAAAP8A////AAACAQACAP//AQH/AAABAAD//wAAAQAAAAAB/wEAAAEBAAABAP8AAAH/AAAA//8BAAABAP8AAAD/AP8BAAAA/wEAAQAAAQEBAQH//wAAAQABAQAAAP8AAQD/AAEAAQABAAD/AQD/Af8BAQEAAAEA/wD//wABAAAAAQH/AP8A//8BAAD/AAAAAAAAAQAA////AAD/AQEBAP8AAAEB/wEAAAABAQEAAAAAAAABAQD/AP//AAD/AAABAAEAAQIBAQEAAQAAAAAA/wAAAQAB/wIAAAAAAQABAQAAAQAAAgAB//8AAgEAAAAA/wAAAf8BAQABAP8A/wEBAf8A/wABAAABAAAB/wEAAAEAAAAAAP8AAAAAAf8BAAABAQEAAQEB/wAAAAEAAAD/AP8B/wABAAEBAQEBAAABAP8AAP8AAAEBAQAAAP8AAAEAAAAA/wEAAAEB/wH/AAAAAAAAAAEAAAAAAAD/AAABAAAAAAAAkZWW4uHfAP//AAD/AAD/GQ8DZDcA/wL9AAAB/gIA/gABAAAA/wD/AQEC/fIEAQEA6/8C9wAAAAABAP7+AAD/ERERAQAB/v8A/wABAf8B/wAAAAEA/gAAAgECAAAA/wAAAQABAAABAQAAAAEBAAEBAP8AAQECAAEBAf8BAAD/Af8BAQAAAAAAAAAB////AAEAAAAAAP8AAQEAAAEAAQD/AAEBAQEAAQEBAAD/AAAAAQAAAAEAAP8AAAEA/wAAAP8AAgAB/wABAQAA/////wD/AP8AAf//AgAAAP//Af8AAAAAAAAA//8AAP8A////AAD//wEAAAEAAAAAAP8BAAAAAAAA//8A/wEAAQAAAQAAAAAA/gAAAAEAAf///wD/AAD/Af8AAf8BAAAAAP8BAAEA/wH/AAEAAf8A//8B/gABAQAAAAEAAAEAAAH//wEAAAEAAP8A//8BAAAAAQEAAAAA//8A/wH/AAABAP4AAQH/AQAAAAAAAP///wAAAAABAP7+//8A/wD//wD//gH/AAEA////AP8BAP//AAH/AAAAAP8AAAEAAAH/AAAA/wAAAf8A/wH/AQAAAQEA/wAAAAAAAP//AAAA/wAB////AQECAQABAAAA/wAAAAEBAAD/AAACAAAA//8AAAH/Af8AAQD/AQAAAQD/AAEBAP8AAQAAAAAB/wEA/wAAAP8CAAD/Af8AAAD/AAAAAAEBAAABAQEBAAD//wAAAAEAAQH/AP8AAQAA/wEBAAAA/wEAAAAAAAAAAf8BAf///wABAQEAAgD/Af8AAAAAAP8AAAAAAAAAAAABAP8A////AQEB/wH/AAD/AAAAAAEAAf/+AAD//wEA/wAAAAAAAAEBAAEBAAEAAAAAAP8A/wEAAAABAAH/AP////4AAAAAAAD//wEAAP7/AAAA/wACAAAC/wEBAQEB/wAAAf//AAAAAQH/AQEBAQD/AAD/Af/+/wH///8AAAEAAAEAAQAB/wAAAQEAAAAAAAH/AAAA////AAAA/wEBAf8AAQAAAQEAAAAA//8AAAAAAP8AAAAAAAIAAgABAQAB/wEAAAAAAQIBAAAA////Af4A//8AAAEB/wIAAQL+AAABAAAAAgABAAEAAf/+/gAAAAEA/gEBAAD/AQEAAP8AAQABAAAA/wAA/wEAAAEA/wH//wEB/wH/Af///QAAAP8A//8A///+AP8AAAD/AP///wEAAAD/AAAAAP8AAAD//wAAAP8AAQAAAAD/AAAAAP//AP8A/wAAAQH//wAB////AAAA/wAAAAAB/wH/AQAAAgAAAf8AAAABAAAAAQH/AAAA/wEAAAABAAAAAAAAAQIAAv8AAP8AAgAAAf8A//8BAP///wAAAAAAAAAA////AAD/AAAC/wEA/wAAAQD/AAEAAf8B/wH/AAEAAAH//wEAAAEA/wEAAf8AAQEAAAEAAf8AAQD/AAAAAQAAAQAAAAAAAf8AAAEBAP8B/wEBAAAA/gABAQH//wEBAQAAAAEBAQEAAAABAAEAAQABAAAAAAEA/wIBAQEAAAAB//8BAQABAgAAAQEBAQEAAf8A/wD//gABAQD/AAD///8AAAH//v8A/wEA/wH/AAD//wH/AAABAAABAAAAAQD/AAEAAAAAAAD/AQAA////AAAA////AQD/AP8BAgEBAAAB/////wAA//8AAAEAAAAA/wABAv////8B/////////wEAAAD//wAAAP//AP8BAAEA//8AAAAAAAAAAQD+AAABAQD/Af///wEBAP8AAAEA/wAB//7/AAAAAAD/Af8BAQAAAAEAAQEBAf//AP//AAD/AQAAAf//AAH/AQAA/wD/AAAA/wAA/wAAAAAAAQAA/wEBAQD/AAAAAAEBAP8B/wAAAQACAAEA//8AAQAA/wD//wAB/gEBAf//AAABAf8AAAAAAQAAAf8B////AAAAAQD//wD/AP8AAQEAAAH/AAD//wD/AAABAP8BAAABAQEA/wAA/wEBAAD/AQAAAAAAAAD/AAD/AQEAAAABAQAAAQH/AQD/AQAAAP8B/87Q0JeVmAD+/gAAAAAAAgEBAWg5BCES+wEA/wAC/wEAAQEAAQD/AQAAAQH7AwHvAwL7/9j4/foA/wAA/wAA/gAAAAUFA////wEBAAAAAP8BAAABAP//AAIAAP8B////AAABAP8B/wAAAAAB/wD/AAD//wAAAP//AAABAAAAAAAAAAAAAP8AAAAAAQAA/wEBAQH//wL/AQEBAAD//wH//v4BAAAA//8A/wD//wAAAAABAf4AAAD/Af8BAQD//wEAAAAAAAL/AAD/AAH/AQAAAAEAAQAAAP8AAP8AAP8AAP8BAAAAAf8A/wEBAAACAAEAAQD/AAAAAQD/AAABAAEA/v8A/wEAAQEAAAEAAAAAAP//AAAAAAEAAAAAAP8BAQEAAQAAAQAAAP8AAAD/AQABAQAA/wEBAAEAAQAAAAAA/wEBAf7/AQD/AgD//wEA/wEAAAAAAQAA/wEBAf8AAP4AAQAAAAEAAAEAAQABAf8B/wEBAgD+AQH/AP8AAQEA/gAAAQABAQAAAAMAAAEBAQEAAAD/AP8BAAAA//8BAAAAAQEAAAAAAP8AAP/+AQAB/wEAAP8B/wD/AQABAQAAAQH/AP8BAQABAAEBAQAAAAABAAD//wAAAP8A//8AAAAAAAEAAQH//gD//wAAAAD/Af8BAAEAAQD//wABAAD//wAAAP8BAQD/AAEAAAEAAQAA/wEAAf///wABAP4AAAD/AAH/AAAA/wAAAf8AAAAAAQAAAQABAP///wL/AP///wD+AAAAAAEAAAAB//8AAP8B/wD/AP7/Af8AAP8BAP8BAf//AAAB//8BAP8B//8BAAD+/wD/AAABAQD/AAAAAP8AAf8AAQD/AAAAAAD/AQAAAAAAAAD/AQABAQABAAABAAH/AP8AAQEBAQACAQEA/wD/AAH/AAEBAP8A/wAB/wEA/wH+/wAA/wL/AAAAAQH/AAD/AP//AP//AQAAAf8AAAD/AQEBAAD/AP4A/wAB/wEBAP//AQAAAAH/AAEA//8BAAABAAD///8BAP8BAAD/AAAAAAABAgEAAAAA/wABAQD/AAAA/wAA/wH//wAAAQD//wD/AAAAAf8CAAEBAP8A/wH//wAAAQAAAAD///4A/gAAAP8BAQABAAH//wH//wAAAf//AP8BAQEAAAD/AP8AAAD/AQAAAAD/AgH/AAD/AP8AAQMAAQABAAABAAEBAQABAAEAAAAAAAD//wABAQEBAAABAAAAAgL/AAAAAAEBAAABAAACAAABAQABAAEAAAD/AQH/AAIAAf8AAAAAAAIA/wEAAP8B/gAAAAAB/wD/AP8A////AAABAP8BAP////8AAAAAAAD+AP8AAP8A//8AAAABAAAA/gABAAD/AAD/AAAAAAEAAP8BAgEAAAH//wIAAAH//wD+/wABAAEAAAD/AAD/AAEAAAD//wAAAP8AAAD+AP8AAQAAAP8AAP4AAP8BAP8A/wAB//8B/wEA/gAA/wAAAQABAAEA/wD/AQH/AP8BAAAAAf7/AAEA/wD/AAAA/wD/AAAAAAD+////Af8A/wAB//7/AP4AAf8A/wD/AP8BAAAAAQEAAAAAAQAAAQAAAAEBAQEBAP//AAAAAAEAAP//AQAA//8A/wAAAAAAAf//AP//AP8AAP/+/wABAf8BAAAA//7/AAAA/wD/AAEA/wEAAQH//wABAAAAAAEAAAECAQABAQAAAAABAgABAAIAAAAAAAD/AQAAAAAA/wD///8BAAD/AAD///8AAQEB/wABAQD/AQAAAQEB/wH/AAD//gEAAP//AAH/AP///wD//wD/AAAA/wAAAAABAAAAAAAAAf8BAP8AAP8A/wAB/wABAQAAAAEA/wEAAP8AAAH/AAABAAAAAQEAAAEA/wD/AAAA/wAA/gAAAAABAAIBAAAA/wIB//8AAP////8AAf8AAf4BAf8A/wAAAAAAAAD/AQD/AQAB//8AAP8AAf//AAD+Af8B//8AAAD/AAD/AQEA/wH/AAABAP8AAAABAAEAAAAAAQD/AQAA/wABAAD///8AAP//AAD//v+Oj5Hy8O0AAAAAAAEAAAAmFQRmOvwAAf8AAAH//gD/AP8AAf8AAQD/AAH/8gYC8QX+/f7q+f4A/wEAAAEAAAAAAP8ZGRn/AAABAQAA//8BAP8A/wABAQH/AQAAAAEBAQAB/wEBAAEAAAEAAAIAAAAAAQH/AP8BAf//AP//Af4AAAD/AP8AAQD/Af8BAQEAAf//AQD/Af/+////AQL//wEAAAAA/wAAAAEAAQABAQEA//8A//8AAP4AAAD/AAEAAAAAAQACAQAAAf/+AAABAQAAAP//AP8AAAAAAAABAQAAAQAAAAAB/wEAAAAA/wAAAAAAAAAAAAABAf8B////AAABAAH///8BAQD/AQEAAAEAAQEAAAH/AAAA/wAB/wAAAP8AAAEAAAAAAQABAP8BAP//AAD//wD/AP8AAQEB/wEAAP8CAP8AAP4AAAEAAAEB/wEA/////wEA/wABAQABAAABAQEA////AP8A//8CAQD//v8AAf8AAQAAAQAAAAAAAP4AAAAAAAD/AAAA/gAA/wD/AAAB/wAAAf8C/wD/////AP//AAAB/wAAAf8A/wD/Af//AAEAAQD/AQEAAQAAAf8A//8A/wEA//8AAf8B/wAAAAD/AP8BAAH/AAH//wAAAQAAAAH/AQAAAQH/AQAA/wH/AQABAAAA/wAAAQD/AAAAAP8AAAD///8A/wAAAAD+//8AAQH/AAABAAABAAD/Af///wEAAQECAf//AQAAAAH//wAAAAH/Af4BAgABAv8AAAAAAQAAAAABAP8B/wEAAQAB//8A/wAA//8AAAABAP///wEBAP8BAAAA/wD//wAAAAEBAP8AAP8A/wEAAQAA/wABAAAA/wAA/wD/AAD/AAAAAAD//wD///8A/v8AAQABAP8AAP8BAAD/AAEAAQEAAf8BAAEBAQEAAP8A/wAAAQEA/wD/AQD/Af///wAAAQEAAf8AAQACAQAAAQEAAAD/AAABAQABAAH/AP8AAAAAAQAAAAH/AAH//wD//wEA/wD/AQEB/wAAAAD/AAAAAQAAAP4AAAAAAAL/AP8AAQAA////AAEAAAECAP8BAP8AAQD/AP8B//8AAQEBAAAAAQEAAAACAf8AAAEBAQAA//8A/gABAAD/AQD/AAD/AQEBAAABAP//AP//AP8AAf8BAQABAAABAP7/AAAB/wAAAgH/AP8A/wABAP8A/wD////+AP//AQEAAAEA/wAAAP8A/wAA////AP8AAP/+/wAA/wAA/wAB//8A/wH/AAEAAAAAAQD+AP8BAAABAAD/AAIAAAEB/wH+AgEAAAD/AQEAAAACAQABAAAB/v8AAAAB/wEA/wAAAAD/AAAA/wH///8AAAACAQEBAAIBAAABAAD//wAAAQEB///+AP8AAQH/AAH/AAIAAQAA/wABAAH/AAAAAQH////+AQABAAABAP//AAAB//8AAf8BAAEBAQAB/wEAAQD//wEAAAD//wH/AAH//////wAA/wD/AP//Af8B/wD///8BAAD/AAD/AQD/AAABAP8AAAEA/wAA//8AAP8AAAECAQAC//8AAAD+AQAB/wAAAAAAAQAAAP8AAP8AAAH/AP8BAAABAAABAAAA/wABAAAAAAEAAAAA/wAAAAAAAAAAAAAB//8AAwAAAQABAP8AAQEBAAD/AAD+Af//AAEAAAAAAAEA/wAAAQH//wD//v/+/wAAAQABAP8B/wD//wAAAAD/AP8AAQEAAQAAAQIBAQEBAQAAAAEA/wD/AAEAAAAAAf//////AAD+AAAAAAEAAQABAQD/AQAAAQEBAAEAAQAAAQD/AAABAAAAAAH/AQAAAAABAAAAAAAA/wL///8A/wAAAAH+AAAAAQH/AQD//wEAAP7/AP//AAAAAQD//wAA/wABAAAAAAAA/gAAAAAA/wABAQAAAQAAAAAA/wAB/v8BAQAB/wAA////AP8BAgAAAAABAAAA//8AAAAAAv8B/wEAAP8AAQD/AQD/AAEAAP4A/wEAAAD/AAD/AAEAAAD/AAAAAAD//wAAAAEBAAEBAAAAs7S2qamrAAABAAABAAAAAQAAckEBFw7/Av8AAAD/AQAAAf8AAP8B//8AAP//AO4GAPz/AP//5/r+AQABAAEAAAACAAABGBgYAQAA//8AAAEA/wABAQAA//7/AP8BAP8AAQAA/wD/AAAAAAD/AP8A/wEBAQD/AAAA//8BAAACAP4B/wAAAAABAP8AAf8A/////wAA//4AAAAAAAABAf//AAEAAf8B/wEBAAAA/wAA/gAAAAABAQABAAABAAD/AQAAAAEAAP8AAgEAAQABAQH//wAA/wAAAQEBAQEAAAAAAAD/Af8AAAD/AAEAAf8AAAD/AAH/AAEAAf/+/wEB/wABAAABAAAAAQD//wAAAQD+AAAAAQD/Av//Af//AAAAAAEAAQAA/wD/AAEAAf8A/wEAAAD/Af8BAQEBAf8A//8A/wD/AP8A/gEAAQABAAD/AAAAAAEAAAEAAAD/AAH/AP//AAAA//8AAQEBAQAB/wD//wABAAEAAAEA/wABAf8AAf8AAP//AAD/AQEBAAD/AAEAAAEBAQEAAAEBAAAB/wEBAQAAAQEBAQD//wAAAQAAAAABAP8AAAAAAf////7//wAA/wEBAQAAAAEAAAAAAf8A/wABAAEAAP8A/wH+AQD/AP//AAAAAAH/AP4A////AP7/AAEAAf7//gABAAAA//8AAQAAAP8A/wD/AAAA/wH/AAD/AQEBAAEAAf//AAD/////AQAAAQEAAP//AP4AAQAAAAD/AAD/AAD/AQAA//8B/wAAAAD/AP8A//8AAAAAAAEAAf8AAAIAAAIAAAABAQAA/wEBAQD/AP8AAAABAQECAAIBAf///wABAAAB/wD+AAD/AAAA/wAAAQEA/wEAAAAAAgAAAQEAAQEAAQABAAEBAP4A//8A/wAAAAAAAAAAAQAAAP8B/wD///8AAAAB/wAA/wH//wEAAAABAf8BAQIAAAAAAQACAAAA//8AAf//AQEAAP8A//8AAAABAf8AAP8BAP8AAAAAAQD//wAAAgAAAAAAAP8A/wEAAf8AAQABAAAAAAAB/wD/AAD/Af////8AAf8BAQD//wD//gEB/wEBAP8AAQEBAAEBAAD/AP8A//8AAP8A/QAA/wAA/wAA/wECAQIAAP8AAAACAAAAAP/+AAD/AP8AAAABAgAAAf8BAAAAAAAA//8BAQABAQEBAP//AAABAAAA//8B/wAAAAEBAAABAP7/AAAA/wH/AP8BAAEA/wEA/wAAAAACAQAAAQD/AP////8BAAH/AQABAAABAP8AAQEBAAAAAAD//wH////+/wABAP///wAAAQAAAv8A//8A/v4A/wABAQAA///+/wABAAABAQEAAgD/AQEBAAAA/wABAAAAAAEA/wEBAf//AAD+AAAAAP4AAP//AQH//wH//wIBAAD//gD/Af8A///+/wABAv8A/v8AAAABAgEA/wAAAAAA////AAAA/wD/////AQAAAP8BAQEBAQD/AQAAAQAAAQEAAAAAAP8AAAABAAEB/wEAAAEAAf//AAAAAAEBAQD+AAEAAAEAAQEAAP//AP8A/wEBAAAAAf8AAAAAAAABAP4AAQABAAAAAQD/AAAAAAAAAAAA//8AAAEBAAABAQAAAP//AAAA/gEAAQEBAAABAAEBAP8BAP///wAAAAAAAAAAAQAAAQAAAP///wEAAQEAAAEAAP//AAEBAAAAAQEBAf8A//8A/wAAAAEAAQEAAgEAAAAAAf8AAP//AP7+//8A/wEAAAABAf8A/gAAAP4AAQEAAP//AQH/AAEAAP8AAAEAAP8AAQD//wEAAQABAP4AAQEA/wAAAQAAAf//AP8B//8A/wAAAAD/AQEAAQEA/wD/Af8A//8AAAD/Af//AAACAAAAAQAAAAABAAAA/wAAAAAAAAD//wIAAQAB//8AAP8BAAABAQEAAAEAAQEAAAAA/wABAAAAAAEA////AAAA/wABAAEBAAEAAAAAAAH/AAAAAQAAAf8AAQAAAAACAAEAAQAAAf//AQD/AAAAAQD/AAEAAQEA/wEBAP8AAO7u74KFh/z5+QAAAAAAAAAAAUQnBVkz/gEA/wABAAEAAQEBAv8AAP7///7//wABAAHvAwH+AAD6/uj7/AAA/wH/AAAAAAQGBxMREQAAAf8B/wD/AAD/AP8BAAEBAAAB/wAAAP4BAQAAAAD/AP8A/wAA/gEA/wD/AAAAAAEA/gIA/gEB/wAAAAEBAAD/AP8AAP8AAAH/AAECAAAAAAH/AAAAAAD//wD//gH/AAH/AAEAAAD+/wAA/wAAAQABAAEAAf8A/wD/AAABAAL/AAAAAAAAAQAA/wAAAAD//wH/AAAAAP8BAQAAAAD/AQAAAP4BAQAAAQAAAQAAAP8BAAD+AAH/AAAAAAAA//8AAQAAAAD/AQAA/wAAAP8BAAAAAQABAAD/AP//AAH//wAAAP4BAQD/AAAAAQABAQABAP8B/wEB/wIBAAAA/wD/AAABAQECAQAAAf8A/wAA/wEAAQD/AAAA////AP///v7/AAAAAAEAAv8AAQAA/wAA/wAA/gABAP4AAQAAAf8BAAAA/wD/AQAAAP//AAD//wD/AAD/AP////4AAQAA//8AAAAA////Af8BAAH/AAEAAf8BAQECAAEAAAH///8AAP//AP8AAP8BAAEBAAD+AAEAAAAAAQEBAAECAQD///8AAQABAAEAAQEBAAD///8BAQAAAP8AAAEAAAAAAQAAAAEAAQAAAAAAAQAAAP8AAAAAAAABAQH/AAEBAAD/AP////8B/wACAAAAAP///wEBAAEBAgAAAAAAAAAAAQABAv8BAAEAAQABAQD///4AAAAAAQAA/wAAAAAAAAD//wABAAAAAQAAAAAA/wH/AP8AAAD/AQEB/wAAAQH/AQEA/wAAAAAAAAEA/wD/AP//AAAAAf//AP8AAAD/AQABAAAAAAEAAP8A/wAA//7/Af8B//8AAQACAAH//wABAAAAAQD/AAD///8BAAD//wAAAP///wD//gAAAP8AAf///wAAAAABAAAA/wAAAf8A/wAAAP8A//8B/wAAAf8AAP8BAAAA/wD+AQAAAQAB/wAA/wAAAQEAAQEAAAAAAAAAAP8BAAABAQEBAAH/AQD///8AAAAAAAD/AP//Af8BAQEA//8AAAEAAAABAQH/AQAA//////8B/wEAAAEBAAAAAQABAQABAP8BAP8AAAAA/wD/AAAB/wACAAAB//8B/wH/AAAAAAAAAQEAAAIBAAH/AAEA/wEC/wABAAEAAf8B/wD/AAH/AAEAAAAB/wAAAQAAAQAAAQAB/wEAAQAB/wD/AAAAAAAA/wD/AAAAAQD/AQEAAgAB/gAAAAD/AP8A//8BAf8BAAECAAEBAP8BAAECAQEB/wAA////Af8B////AAD/AP///v///wH/AAD///8BAQAAAv//AAEBAP8AAAD/AAD/AQH///8AAAAAAAAC/wEAAQEAAf8BAAEBAAAAAf4AAAEAAP//AQABAP8AAf8AAAEAAQEAAAABAP///gAAAQAAAAD/AAAAAP8BAAEBAQAC/wEAAAH/AP//AAAAAQAAAAAA/wAAAQEAAAAAAP8AAQECAP8B/wD//wH/AAAA//8AAP8A/wABAP///wAAAP8AAQD/Af//AQAAAAABAP8A/gAB/wABAAEAAQABAAIAAP8A/wAB/wAAAAAAAAEAAAEAAAD/AP8CAP8BAAAAAAABAQD/AP8AAAEAAAAAAAAA/wABAAH//wABAP8AAAABAf//Af//AP///wAA/wABAAEB/wEBAAABAAEAAQAA//8B/wEBAAEB/wAAAQAAAQD/Af8AAAAB/wD/AAEBAQD/AQAAAAD//wABAP8AAAD/AQAA//8AAAAB/wIAAQEAAAECAAAB//7/AAD/AQEAAQL//wEAAP8AAAEAAAH/Af//AAAA/wABAQEBAf8AAAAAAQAAAf8AAAABAP8A/wEAAAD//wH/AP8AAP8AAAEB/wAAAAEA/wH/AQD/AAAA/wEA/v8AAAEAAf8AAAD/AP8A/wAA/wAA/wAAAAD+//8AAQAAAQAAAP8A/wABAAD/AQD//wAAAAAAAP6EhYfOyssAAP8AAAAAAAELCAJ6Rf4MBv/+/wAA/wD/AAH/AP8AAAABAAEBAQAA/AMB7QUA/wL+/gPk9/wAAAAAAAAAAAAmJCcdHh4AAQAAAAEAAQAAAQAA/wAAAQAB/wH/AAEBAP8AAAEAAAAAAAL/AQEAAAD/AQAAAQAAAQEAAAIAAQIAAQD/AAAAAQABAf8BAAD/AQAAAAEAAAEAAQABAQAAAgH/AQEAAP//AP8A/wABAgH/AAAAAP8A/wD///4AAQEAAAAA/wACAAAAAAAAAAD/AAEAAAD/AAD/AAAAAf8BAAD/AAD/AAD/AAABAAABAP8BAP8AAAAAAAEAAAAAAQEAAAAAAAAAAAD/AP8AAQAA//8AAQAAAAEBAAAAAAD/AQD/AQD/AQIA/wAB//8AAQAA/gD//////wACAAAB/wD/AAEBAQECAQD///8A/gAA//8AAQAAAAIAAAAAAQD/AAEBAAABAAEAAQAAAf8AAP8AAP//AAABAAAAAAEA/wABAP8AAQECAAL//wD/AQD/AAEBAf8AAQEAAP8AAP8AAAABAQH/AAAAAAIBAQEBAAAB////AAL///8B/wAB/wAB/wABAQEBAQAAAgABAAEB/wEAAP//Af///wAB/wEAAAEAAP//AAAB//8AAAEA////AAAAAAAAAAAAAAAAAQEAAAH/Af8BAAEAAgABAQAA/wEAAAABAP8AAAD//wD/AQH/AQEAAAAAAQEAAAD//wEAAAAAAQD/AAEAAP8AAAEB//8AAP8AAP4B//8AAAAAAP8AAAEAAQAAAP8BAAEBAP///wABAAD/AAH/AAD/AAD///8AAgACAQEAAP///wABAgAAAAEAAAABAAEA/wAAAQEAAAABAf8AAP4BAQACAgAAAP//AAAAAQH/AAEAAAEAAQECAf4A/wEAAQAB/wAAAQEB/wAA//8AAAD//wAA/wAAAAEA//8A////AAH/AQABAQABAAAAAQAA/gAAAAAA//8BAAD/AAAAAAAA/wD/AAAAAAAB/wAAAAEBAQD/AP//AAD//wH/AP//AQD/AAAAAQABAAAAAf//AAAAAAABAP//AAEBAP8AAAAAAQAAAQAA//8AAQEBAf8BAAEB//8AAQAB/wABAAEAAQIA////AAAAAAAA/wAAAAAB/wAAAAAAAQEAAQEB/wEAAP8AAAAA/wD/AQD/AAH/AAABAAD/AAABAgEAAAEAAAH///8A//8AAAEAAQAAAQEAAAEA/wAAAP7/AAAAAQAAAQH+AP///wH/Af8AAAAA/wD/AQAAAQABAf//Af8B/wEB/wAAAQEB//8AAP4B/wAAAP8AAP8BAAAA//8AAAAAAAAAAf8AAAIBAAABAQABAAEBAQD/AAABAAABAQH/AP8BAQAAAAAAAQAAAQABAP8A/gEBAf8BAAAAAAEA/wD/AP8A/wAA/wAAAP8BAAAAAf8BAAAA/wABAAABAQAAAQAAAP4B/wAAAAEAAP7//wAAAgEAAAAB/wD/Af8A/wAAAAAAAQABAf8AAQAB/wAA/wD+/wH/AgAB//8AAAH//f8AAAIBAQD/AQAAAAEBAQABAAABAAAAAAH//wD/AP8AAP8AAP8BAQAAAP8BAAIAAAAA/wH/AP8AAAAAAAAAAAAAAAAAAf8BAAD/AAD//wAAAAEB/wEBAAAB/wAAAAAAAAAAAAAA/wD/AAAAAAAB/wD+AQAAAAABAAD/AP8BAf//AQD/AAEB//8A/wH/AAH//wEA/wAB/v8AAQD//wD//wD+AQEBAAABAQEAAP8BAP8A/wEAAAAAAf//Af8A/wAAAQABAAAAAAD/Af7/AAD/AQAAAAAAAf8BAAD//gD//gEAAQABAAD/AP//AQD//wABAQH/////AP8AAQAAAAAAAP///wAAAAAAAAAAAAAAAP8BAAEBAQD/AP/+AQAAAf8AAAAB/wD+/wAB/wD/AAEAAP8AAQEB/wH/AAIAAAEAAP//AAAAAQEAAAH/AAD/AAD/AP8AAQEBAP8AAAD/AAEAAQEA/wEAAf//AAEB//8As7O2lZWXAAD/AAAAAAAAAQAAdkIDPyX/AQD+AgEA/wIAAP//AP//AAAAAAH/AAABAOsHAO4EAP3/1fT62/j9AAAA/wAAAAAAHh8eBgYE////AQABAQAB/wAAAAEAAAAAAP//AAD/AAAAAAD//wEAAQH/AAAA//8AAAABAAD/AAAAAP////7+AQAAAf8AAAEA//8B/wAAAf8AAAAAAAH//wAA/wAAAP8AAAAAAAEA/wAA/wAA/wD/AQAB/wAAAAABAAECAP8AAAAAAAAAAgAA/wAAAAD/Af8AAAAAAgAB/wH/AP8BAP7/AP8AAAEAAAAA/wD//gEB/v8BAAAAAAAAAQAA/wD/AAAAAAABAAAAAP8BAAAAAAEBAP4AAP///gEA/wD/Af8AAP8BAQD+AAD/AAD/Af8AAAEAAgAAAAD//wAB/wAAAAD//wD//wAAAAEA/wEA/wEAAP8AAAAA/wEA/wD/AAD//wEAAAAAAQABAP4A//8BAAAAAQAAAAAB//8AAAH//wEAAQAA/gD+AQEBAP8BAQD+AP8BAP///wABAAACAAAAAAD/AP8BAAD+////AP8AAAABAAL/AQD//wAA/wAA/wAA/v////8AAP8AAAAAAAEAAAD/AAEBAQEB/wD//wAA//8AAQAAAAAAAQH/AgEBAQABAAEAAf//AAAAAAAAAQD/Af8AAAD///8AAP8AAQD//wEBAQABAAAAAQD/AAAAAv///wEAAf8AAAABAAAAAAD/AP8A//8A/wAAAAAA/wABAf8AAP8CAAEB/wAA//8BAAH/AAAAAP8A/wD/AAABAAD//wABAf//AAAAAAAAAQEBAP8A/wAAAQEAAAABAP4AAAD/AAABAAD+AAEAAP8AAQAAAAEB/wABAAAA/v4AAAAAAAAAAv//AAAAAAD/AAEA//8BAQABAAAA/wD/AAD//wD/AAEBAAD/AAEAAQEAAAAA/wEBAQEBAgAAAf8A//8A/wAAAQABAAEA//8BAAEA/wAAAAAAAQECAgAAAQAAAQD//wAAAQEAAAAAAQH/AP8BAQEAAQAAAQAAAAABAAAC/wD///8BAP8AAP8B/gAAAQD/AAABAAD/AAD/AP8AAAEB/wEAAf8BAP8AAP8AAP8A/wAA/wAAAv7/AAAAAQD/AQEAAAD/AP8AAAAAAAECAAAB/wD//gD/Af8B/wAAAAH/AP//AQH/AQH//wEAAAEA////AAABAP8AAQEBAAABAf8AAf8AAP//AAD//wAAAAEBAQD/AAD/AP4AAQAAAQD/AAAA/wEBAAAAAQD/AAAAAAABAQAAAAAAAAEAAQD+AAIBAP4BAAEAAP8AAP8BAQABAQABAP8AAQEAAf8AAP/+AAEA/gAAAAEBAQAAAAD//wAA////Af8AAP8B/wAAAP8A//8AAAAA/wH/AP8B//8A//8A/wIBAQAAAAAAAAAAAP8A//4A//8B/wEA/wAAAP///wAAAQAA/wAC/gAAAAAAAAABAQIAAP/+//8AAAAA//8AAQAA/wH/AAAAAAABAf8A/wAA/wAAAQH+AP8B/wEBAAD//wEBAP//AAABAAAAAAAB/wABAAAA/wAAAQH/AQAAAQEA/wEAAAEA/wAA//8B/gD/AP8A/wD/AAABAAAA/gAAAAAAAQAAAQAA/wD//wH/AAEAAQD/AP//AP8A/gEAAAAAAQAAAQEBAQEAAQAAAAAB/wEAAf8AAAAAAAAAAQAAAAAAAf8AAAAA/wAC/wH/AP4AAAEAAAAA/wIBAAABAQEAAQABAQAA/wAA/wD//wEB/wAB/wEBAAAB//8BAP8A/wAA//8A/wD/AAABAQABAQAAAv//AP8A//8A/wAAAAEAAQABAQABAAAAAAEAAAAAAAAA////AAEAAAH/AP8BAAAAAQAA/wEAAAAA//8AAAEAAAH//wEA/wAAAAD/AQAA/wAAAQEA/wABAQEBAAAAAQAA/wAAAAH//wL/AQAAAQAAAAAAAgAAAQAAAAAAAQD/Af8BAQD//wD/AAAB/wEAAQAAAf8AAAAAAAABAf8AANLU1G9wdfv5+AAAAAAAAAAAADcgBGs9/AH//wAAAv8A/wAA/wD/AAD/AAD/AAD/AQD/AQLoBf/8AgD+Adr1/fQAAP8AAQAAAAAAADQ0MgAAAgEBAP///v8A/wH/AQD/Af8AAAAC/wAAAf//AAAAAAH/AQAAAAAAAAEBAAH//wEAAQD/AAAB/wACAgAAAP8B/wD/AQEAAAEBAAABAAD//wD/AAIAAAAA/wABAQABAP8AAAAAAQEB/wD/AAEAAAD/AAAA/wEA/wEAAAAAAQAAAAIA/wABAAABAAAB/wAAAP8AAAD/Af8AAQABAQEAAAEAAQAAAAEBAAH//wIBAP8B//8A//8A/wD/AAD/AAH///8BAQECAAD/AAAAAf8AAQABAAEAAAD/AP8AAAEAAAD/AQAAAAEAAAEAAP8B//8BAAAAAgAAAP8AAAD/AAD/AQD///8A//8BAAH/AAAAAAH//wH/AAEBAQEAAQEAAP8BAP8AAAABAQEB/wH/////Af8AAAEA/wAAAQH/Af8AAAD/AAD/AAEB/f8BAQAAAQABAQEAAP8A/wABAQAAAAEB/wEAAQEAAf8B/wAAAAD/AAD/AAACAAH/AP8B/wH/AQABAAEA/wAA/wD///8AAgEBAAABAAAAAQEAAAEAAf8AAQABAQD/Af4A//8AAP//AP8BAQAA/wAAAP4AAQAAAAAAAQD/AP8AAf8B/wH/AP8A/wD/AAABAAH///4BAQEAAQAB/wAAAAAAAf//AQEBAQEBAAD/AAD/AAEB/wABAQAA/gD//wEAAAECAAD/AQEAAP8BAAD/AP8B/wABAQAA//8BAP8BAAABAAD//wD/AAAA//8AAAABAAAAAAAAAQAAAP8AAP8AAAEAAP8AAAAA/wH//wD///8A/wAAAAAAAP8BAAEAAAD/AQD/AAAA/wAA/gEA/wAAAf4AAQEBAQAAAAECAAH/AAAAAAAAAQD//wABAAAA//8BAAABAAEBAf8AAAAB/wAA/wABAQH//wABAP///v4AAQAAAAAAAQEBAP//AP8A///+AQEB////AQD/AP8A/wAB/v8A/gABAQEBAAAAAQABAQEBAP8AAQAAAQH/AQH/AgABAQH/AAH9AP8B/wAB//8C/wABAAEBAAEBAQAAAAAAAP//AQH/AQABAQABAAAAAAAAAAAA/wH+AAABAv8AAQAAAP8AAQEBAgEAAAD+//8AAAD/AAAAAAAAAAABAAAAAAABAAAAAAAAAP8A/wABAQAAAf//AP8BAgH/AAAAAAAAAAAAAAEAAQEA/wAAAP8AAAD/AQAAAP//AQD/AAD/AAAAAQD+AAABAf8A/wABAgABAf8AAP8BAP//////AP8A/wAAAQD/AAEBAP8AAP//AAAAAAAAAAEAAAAAAQAA/wABAAABAAEBAP8A/wAAAAABAQEA/wAAAAH/AAAAAf8AAP8AAP8BAQEBAAEAAAH+/wEBAAAAAQH/AQAA/////wAB/wAAAQAAAQEA/wEAAQEBAAAAAAD/AAD/AQH+AAAAAAD+AP8B/wAAAAAA/wAAAQAA/wD/AP8AAAH/AP8AAP8A/wAAAAEB/wH//gD/Af8AAf4A/wABAAAAAAIAAAAB/wAA/wEAAAH/AP8BAAACAQAAAAAAAAEAAAAAAAD/AP//AQAAAgH/AQD///8BAAAAAAAB/wH/AAAA//8BAP/+//8AAQAAAQABAAAA/wAAAAABAAABAAAAAAH/AAAA/wABAQAA/wIAAQABAAD/AAAAAAD/AP8A/wAAAAAA/wAAAAD/AAAAAAD//wEA/wABAAEA/wD//wABAAEBAAAAAf8AAQAB/wABAAAAAf//AgABAAEBAAAAAAD/AQAB/wEA//8BAAAAAAEAAAABAAEBAAD/AP//Af8AAAD///8AAAEAAQEAAAAB/wD//wD+AQD//wD/AQD/AQD+Af/+Af7/AAABAAAA//8BAf8AAAABAQH/AAD/Af///wEAAAAAAAD/AAD//gAA/wABAgAB//8AAQAAAf8BAAEAAAAA//8AAP8BAP8AAP/08vN1dHbg3toAAAAAAP8AAAAJBQF6SP8SCQD+AP////8AAAAB/wEBAf8BAQEAAQEBAAAB8QQB5AkBAAAAAADZ+vwAAP4BAP8AAAAAAAApKSkBAQAAAAECAAEA////Af8AAQAB/wD//wEBAP8BAQEAAP8AAAD//wEA/wAAAAAAAAD/AAEAAQEA/wEBAP8A/wAB//8AAP8AAQAA/wAA/wD/AAEAAQD/AAAA/wEAAAAAAAAAAAAAAP///wEBAQD+AP8AAgH/AAAAAAD/AAAAAP8BAAACAAAAAAAA/gEAAAEAAP8AAAAB/wAAAP8AAP8AAQAAAP8A/gD+/wAA/wH+/wAA/wAAAAAAAQAAAf//AQD/AQEBAP8A/wAAAf8A//8BAP8A//8A/wACAAEAAP//AAAAAAAAAAAAAAH/AAABAAEA/wAAAP8AAQAAAAD/AP8AAAAAAAEAAAEB//8AAQAAAP//AQEAAAD//gD//wD/AAAAAAAAAP7/AP8AAP//AAEBAP8A/wAAAAEAAAAAAAAA/wAAAQEAAAAAAAIBAAD/Af7//wAAAP8AAAAA/wAB/wAAAAH/AQD/AAABAQH/AAABAP8AAQEB/wAAAf8BAAH+AQAB/wH//wH/AAH/AAAA/wD//wD/AP8BAQAA/wD///8AAQD+AAD/AAABAAAAAQAAAQEAAAAAAP8A//8BAQAAAAAAAAABAP8BAP8B/wEA/wAAAAEAAAD/AAH/AQEA/wD/AAH/AAEB//8AAAAAAAH//wABAAEBAQD/AAAA/wEAAAABAAEAAAEAAAAA/gD/AAAA/wAB/wAB/wAAAAEBAAABAQEBAAECAAAAAAH/AAD/AQD/AQAAAP8AAAAAAAAAAf7/AQABAAEAAAD+AAEAAAD//wAAAAH/AQEBAAEBAAAAAP///wD+//8AAf8A/wAAAAEAAQEA/gABAP8C/wAA//8BAP///gH+AgAAAQD/Af4BAQAAAAD/AQEAAAAAAAD/AAAAAAAA/wEBAAD//v/+AQAA/wABAAEBAP4BAAAAAQAA//8AAAABAAEBAf8AAP8BAf8AAf8BAAD/AAAB/wL/AAD/AP8AAP//AP//AAAAAQD/AP/+AQD+Af8B//4AAQEBAQAA/wH/AAAB/wH/AAAA/gAA//8AAQAAAAABAAD/AP///wD//wD/AAD/AAD/AQD/AQAAAP8BAP8CAAEBAP8AAP////8AAwEBAAAAAAH/AAH/AP8A/wAA/wAAAAAAAQD/AQAAAAD//wABAf8A/wD/////AQABAgAA/wAAAf8A//7/AAH/AQAAAAEAAP7+AP8AAf8AAQD/AP8AAP8BAAAAAP4AAAEA//8A/wAAAP8B/wEAAgEAAQABAQH/AAD/AP///wAB//8A/wD/AAD/AAAAAAEAAf8AAAEB/wABAAD///8AAQEAAv//AP7/AQIBAQAAAf//AP8BAQABAQAAAP8AAQAAAAEAAQAB//8AAP8AAgD/AAAAAgEAAAAAAf8AAf7/AAD/AAAB/wAAAAAB////Af8AAf8B/wAAAgAAAAIAAQAAAAEA/wAAAAEAAf8C////Af8BAP//AAABAAD/AAAAAQEAAP8CAP8C/wEAAAAAAAD/AAAA/wAAAAEAAQABAQABAAAB/v8AAf8BAAAAAAAAAAD/Af8AAAAAAP8A/wAAAQIAAAD/AAAAAAEAAQAAAAAAAQAAAQAAAAAAAP8A////AAEAAQD//wAAAP//AAH+AQEAAAECAP8AAQH/AP8BAQAAAQEAAQAAAf8B/wAAAAH//wEAAAD/Af//AAAAAQEAAAEA////AAAAAgAAAAAA/wH/Af4BAAAA/wD//wD///8AAAAAAAH/AQEAAAABAf8A////AAAAAAAB/wD+AAAAAAEA/wABAQAAAP8BAP8BAQIAAQEAAP//AAEA/wL//wAAAAD/AAAAAQAAAQAAAv8BAgABAQEAAAAAAAH///8AAQAAAP//AQEAAAAAAgAAAP//AQAAAQD/AQEBAAAA/v8A/wAAAAAB//8A/wD///8AAQEAAAAB/wAA//8Al5eZu7q5AAABAAAAAAACAAABaj0CSyf8AQD/AQABAQEAAP8B/wEA/wEB/wAAAP4A//4AAOUHAO8F/wAC/Pz/wvH3AQAB/wAAAAAADg8QMTIw/wD/AAAA/wAB/wACAf8B/wD/AAAAAAEA/wAAAP//AAAB/wH/AQH/AQAAAAAAAAEAAP8AAAAAAAD/AAAB/wEAAAEC/wAA/wAAAAAB/wAAAAH/AP8AAAEBAAAB/wD/Af8AAQABAQAAAQEAAAAAAAAAAAD/AQEAAAAAAAEAAAAA/wABAgAB//8AAAEAAAAAAAACAAAA/wAAAQEAAAAAAAAAAAAAAgIAAgAAAAAAAgAAAQABAgABAP8BAP8BAQAAAAAAAAAAAP8BAAAAAQABAAD//wEBAAEA/wAAAQABAQD//wD/AAAAAAEAAAEAAP8A/wEBAQD/AP8AAAAAAAABAAAA/wEAAP///wAA/wAAAAABAP///wEAAQEAAQAAAAEAAQAAAf8AAP8BAAAAAAAAAAAAAP8A/wH/AAD/////AAEAAf8AAAAA/wAAAP8AAQABAQH//wABAAEAAQH//wH/////AAD/AQAAAAABAf8A//8BAAAAAAAA/wAB//8AAQH//wEAAAAAAf///wAAAAD/AP8A//8B/wAAAAH/AQIBAf8AAgEAAAAA/wABAP//Af//AAD/AQEBAQEAAP//AAEA/wAAAAAAAAAAAAEAAAL/////AAAAAAAAAf8AAAAAAP/+Af///wEAAP/+AAD/AQEBAf8AAP8AAQAA/wAA/wAA////AAEAAAEA/wEAAAAA/wEAAAAAAAIBAf8AAAH/AP8BAAAAAP//AP/+AAAAAf8AAQAAAf8B/wAAAAEA/wAAAQAAAAH/AAAAAQH/Af8AAAECAP4AAP//AQAA////AQABAgABAgEBAf8BAAEAAQEB/wAB/gIBAP8B/wD//wEB/wABAAEAAf8A//7///8BAAABAAAAAQAAAP8AAQAAAQAAAQD/AAD//gAAAQEBAQABAAEA/wEAAAAB/wEAAP8A/wEAAgEAAAD//wEAAAABAAABAAAA/wABAQABAAL+AQAAAQABAQEAAf8AAAAAAAAAAAH/AAAAAQAA/wEA////AAEAAAEAAP8CAAH/AQAAAAEAAAABAAAA/wAAAP///wAAAgAAAQAAAQAAAf//AP4AAQAAAf8BAAEA////AP8CAAAAAQAA//4B/wAAAP//AAD/AQAAAAAB/wEA//8BAAD/AAEAAQACAAH///8AAQEBAQEAAQAB//8AAAEBAP8B/wEAAQD/Av//AQAA/wEBAv8AAAAAAAAAAQEBAAAB/wD/AAAA/wAAAAAAAAH///8A/gEAAQAA/wD/AAAAAQEAAQABAgAAAAABAAIAAgAAAQABAAD/AQAAAAAAAAEBAP8AAQAAAAD/AP8BAf4AAAD/AP8AAAAAAQAAAAD///8BAAEAAAAAAAD/AAD//wAAAAAAAP//AP8BAP//Af8A/wAAAP8C/wABAAEAAAD/AQEAAAEAAP8AAAAB/wAAAAABAAAA/wAAAAEAAAEAAP//AAAB/wEBAQEBAAEBAf4A/wAAAQAAAAAA/wEAAP8A/gAAAQABAAAAAP8AAP8BAP8A//8A/wABAAAA/gAA/wAB/v8BAP8A/wAAAAABAAD/AAAAAAIBAQAAAf//AQD/AAD/AP8AAAAAAP8AAP8BAAAAAf8AAP8AAQABAP8AAAAAAAAAAgD/AgAAAAEA/wAAAP8AAP///v8AAP////8AAAABAAEBAAD/AQH/AQAAAP8AAf8AAAEAAAAAAAABAf8AAAABAAAAAQH/AQAC/wABAAEAAQAAAAAAAAH/AQD/AP//AP8A//8AAAEBAAAAAAAA/wEAAgAAAAAA/wAB/wAAAQAB/wEA/wEAAP//AAABAP8AAAH/AgEBAAIAAQABAQAAAAABAAABAAAAAf//AAAAAP//AQIAAP8BAAAAAQAAAAD/Af8B/wAAAP8B/wD/AAAB/wABAAEB/wEAAAAAAAEBAQAAAQABAAD/AAAAAAH/Ab6/v4iKiwAAAQAAAAABAQABAT8jBHxF/gIDAv8AAAAAAQAAAAAA/wD//wAAAQAAAAEBAAH7AgHhCgD+AQEAAOT5/NT6/P4AAAAAAAAAATc1NicmJgIAAQD//wAA/wEAAP8BAAD+/wABAAH/AQEAAAAAAQAAAAH/AAAAAQABAAD/AP8AAAAB/wAA/wEAAQAA/wEAAP///wAAAAEAAAAA/wEAAAH/AP8AAAD/AAABAAIAAP8AAAD//wABAAD/AQAAAAEAAQEAAAAAAAAAAAEAAAAAAAAA/gIAAAD/AP8AAQEB//8B/wAA/wEBAAD/AAAAAQEBAAAAAf//AQEAAAAAAP4CAP8AAP4A/wAB/wIBAAAA/wAAAAAAAP8B//8AAf8AAAAAAQEAAAAAAAAAAAABAP8BAAABAQABAQAAAAD/AAAA/wH//v8AAgAAAAEAAAEAAAEAAAD/AAEBAgEAAQH/Af8AAQAAAQIAAQAAAAABAAH/AP8AAAABAQEAAP//AAEA/wABAQACAQH/AQD/AQECAQD/AAAAAP8AAAEAAP8AAAAAAP8AAgEAAAAAAP8AAAH/AQEBAQEAAP8B/////gABAAEBAAAB/wAA/wH/AAABAAD/AQD//wEBAAACAQIBAQAAAAAB/wH/AAAA//8AAAAA//8A///+/wAAAAEA/wEAAgAAAAAAAP8AAQAAAAAAAf//Af8A/wABAQAAAP//AAD/AAEAAAEAAQEAAP8BAAEA/wAAAQAAAgD/AgECAQEB///+/v8AAAABAAAA/wAAAAD//wACAgD///7/AAH/AAABAAH/AAAAAQD/AP8BAf//Af8A/wAA//8BAAEAAgABAQABAAAAAP8BAAEA////AP//AQAAAQAAAQEA//8BAP8B/wAA//8CAAEBAAAB/wABAQABAP8B/wAAAP8BAAH/AP4A/wH//wEA/wABAAIBAQEAAAAAAAAA/wEBAQEBAQIAAAEAAP//AP8AAAEA/wAAAP8AAP8AAP8BAAEA/wAAAAABAAD/AAEA/wAAAQIAAAABAAAAAf8A/wABAQH/Af8A/wH//gD/AQEA//4AAAAAAQAAAAD/AAAA//8BAAH/AAEAAAEAAQAAAP8AAAAAAQEA//4AAAAA/wAB/wAAAAD/AAAAAAEA//8AAQEA/wABAQEAAP4AAP8AAQABAQABAQEBAAABAAABAAD/AAAAAAEB/wEAAP8BAQABAAEA/wAAAAEAAAAAAP8B/wEAAAAB//4BAQH/AP8B/wEA/wEBAf8A//////8AAAEAAAD//gAAAAIAAAEAAP4BAv8BAAEAAAAA/wH/AAAAAQAAAf//AP8AAAAAAQEA//8BAAD/AAAAAAH/AAD/AAEAAQAAAAD/AP8AAP8AAAABAAAAAP8BAQABAAAAAP8AAAAB/////wD///8BAQH/AQD/AAADAgH/Af8BAAD///8AAP//AgEB/wEAAAAAAQEB//8AAQABAQACAf/+/wEBAAAB/wABAQH/AAAB/wEAAf8AAP4BAf8AAAAAAQAAAAD/AAABAAAA/gD+/wH/AAD/AAD/AQAAAAAAAAEAAAEAAQAAAP8BAP//AAD/AAD//wEAAAABAAEB//4AAAD/AAABAAAAAf8CAQEBAQAA/wAAAAAB/wAAAAEB/wAAAAEBAAAAAAAAAAH/AAD+//////8BAQABAAAAAQABAAD/AAAAAAABAAEA//8AAAD/AAD//v8AAQAAAAD/Af//////AAEAAAH/AAAA/gABAQEBAAABAAECAQD/AAABAAEAAAH/Af8BAAEAAAABAQEAAQAAAAAA//8BAAD+/wD/AAAAAAAA/wEA/wD/AAD/AAAA////AP//AAAAAQEB/wEAAAD/AAAAAAAAAQAAAAAAAAD/AAEBAAAAAQEA/wAAAQD+AAAAAQEA/wAA/gD/AP8BAAD/AP//////AAD//wEA/wEB////AQH///8AAQD/AAAA/wAAAf///wAAAP8BAAAAAAAAAAAAAgAAAAAA/wAA/wEAAAEAAAAB/wAA/wABAAD/AAAAAADR09NoaW7w7u4AAAAAAAEA/wAYDgCHTPwPCf////4BAAAAAQD/AP8A/wAAAAAA//4AAP8AAP7/6wYA8QMAAv7//f/D8/jr/v4AAQABAAABAP86PDsBAAD///8AAQEAAQAAAAD///4BAgL/AAH///8AAAH/AQABAQAAAAEB/wD//wD//wAB/wAAAAAA/wD+AQAA/wAAAAACAAABAAAAAAAAAAD/AAD/AQEBAAAAAP//AP///wEBAAD/AQAA/wAAAAD//wD///8AAAAB/wEA/wEBAAAAAAAAAAICAAABAQAA///+/wAB/wEAAAEB//8AAP8AAAD//wABAP//Af7+AP8AAQAB//8BAAAB/wEBAAEAAAAA/wH/AAD/AAABAP8BAAAAAf8AAQABAAAAAAAAAQAAAAECAAEBAAAA/wD//wABAQAAAAEAAAEB//8A//8AAAAAAAD/AAABAP//////AAD/Af8CAP8AAf////8AAAAAAAAAAAEBAQAB/wAAAAABAQH/AQH/AP//AAD/AQAAAQEA/wD/AAD/AQABAQD/AAABAAD/AAEA////AAAAAQABAAD/AP//AAD//gEA/wEBAAH/AQAAAAD//wEAAQEBAQAB////AAABAAH//wD//gD///8AAAAAAAEAAQABAAIA/wAAAAEAAAAAAQABAAD/AgIAAAAAAQEAAQEB/wH//wD/Af8AAP8BAAD///8AAAEBAQAAAgEAAQH/AP7/AAAAAAD/AAEBAAD/Af8AAP7//wD//wAAAQEBAQAA/wD/AQEA/wAAAAEBAP4AAQABAP//AAAAAAAAAQAAAAAAAQEAAP8AAAAAAAD//wAAAAH/AP8B/wD+/wAAAAAB/wAB/gAAAP8AAAD/AAAAAAAAAAEB/wABAQEB/wAAAf8AAAAA/wAAAAAAAP8AAP8A/wAAAAAAAAABAAD/Af8A/wL//wD+/wD/AAEAAP8BAAL/AQD/////AQD//wAAAAAA//8AAQEAAAAA/wAB/wEB/wEAAQEAAAD/AP8AAAD/AAEAAAD+AAAA/wAAAAD//wL//wAAAQAA/wH/AAEAAQD//wICAAD//wAB/wH/AAD/AAEBAQAAAQAAAQD/AAAAAAABAAABAAD/AQEAAAAA//8BAAAB/gH/Af8AAQD/AQD/AP8AAQH/AP8AAP8BAQABAf8AAAD/AP8A/wD/AAAA////AAD/AQD//wD//wAAAAAB//4AAAEAAAD/AQH/AAABAAEAAAAAAAEC/wEAAAAAAAD/AAIA//8AAQEBAAEA////AQAAAAEAAP/+/wH/AAAB//8B/wAAAAAAAQEAAQEBAf8A//8BAAABAQH/AAAA/wEB/wD/AAABAAAA/wAAAQD/AP8A//8AAAABAAH///8AAAAAAf8A/wAA//8AAQAAAAEA/wABAP//AQEBAAEAAAABAAAA//4BAP4BAAD/AQABAQEBAP//AAAA/wH//wD/AAEBAAAAAAEA/gABAQEA/wABAAEA//8AAQEAAAAAAP8BAAAC/wD/AAEAAAABAf8AAQAA/wAA/wH/Av8A/wAAAf8AAP8AAAAA/wH+AAD/AP8AAP8BAQABAAD/AAAAAQAAAAAAAAABAAECAP8BAQEAAQAAAP8A/v8A//8AAAAAAAEBAAEBAP8B/wAAAQAB/gABAP8AAAD/AQABAf8AAQAAAAABAAEA//8AAAAAAf8AAQEA///+AAEAAQAAAQD/AAEBAf4B/wAAAQAAAQABAf8AAAEAAP8BAAAAAAD/AQAAAQAA/v8AAP8B////AP//Af4B/wAAAAAB//8A/v8B/wABAQAAAAAAAQABAQAAAAEAAAABAAAA/wAAAQEAAQECAQEAAQEBAP8AAAH/AQEAAQAAAAD///8AAAH/AAAAAP//AAAAAAAAAQEA/wAAAgAA////AAEBAgEAAgAB//8BAAEBAQAAAP8AAQD/AAD+/wABAP//AQABAgABAAEAAAEAAP4BAAABAAAA////AQEAAQABAP8AAP8AAAAAAAEAAAEAAAH/AAH/AAH//wD//wEA7e7sbW5y3NraAAABAAABAAAABwYAjU4BNyAAAf//AP8A/wABAP//AP8BAAEAAAEBAAABAAAB/vkEANgMAfoBAP4BAP//v/b4/wAB/v8A/wAABgkKTExKAQEBAAEA/v8AAAAA/wEAAgECAAD/Af/+AQIB/wH/////AAAA/wEA/wH/AAAAAAIA/wAAAP8A/wEAAf8AAAEA//8A/wEAAAAAAP8AAAABAQEAAf//AAEAAAAAAQAAAAD/AAAAAQAA/wEBAAH/AAAAAQEA/wAA/wD+AQH//wABAQEB/wH/AgD//wAAAQEAAQABAP//AAAAAAABAf8AAAAAAAAA/v8AAP8AAP8BAAAAAAABAQAAAAEA/v///gAAAQIBAQAAAAAA//8BAP8A/wAAAP8B//8AAAAAAAAAAP////8AAP8A/wABAQD/////AAEBAAEBAAAAAAEBAP//AAEAAAH//wEBAQAAAQAAAP8A/gAAAAAAAQEAAQAB/wAAAAD/AP8B/gEA/wEAAP8AAQABAf8BAf//AAD/AAAAAAD/AAABAAD//wABAP8AAAEAAf//AAAAAQAAAP4A/wABAQABAQAAAQEAAQEA/wH/Af/////+AAEAAP////8A/wABAQAAAAH/AQEAAAEAAAEBAQABAAAAAAH/////AAAA//8AAQEBAQAB/wEAAf/+AAAAAQAAAP///wD/AQEBAAAAAQAAAAEBAQAB/wAAAP8A//7//v//AAACAP8AAQAAAQAA/wAAAP8BAAAA/wEAAQACAQD/////AAH///8AAAIAAAAAAP8BAAABAAABAAEAAAAA/wAAAAEA/wD/Af8AAQAAAAEAAQAAAAD/AQD/AAEAAgAA/wEC/wEA/wEAAQAAAQEAAf//AP8A/wABAAAAAAD/AAAAAv8AAAABAAABAgAAAP8BAP4A/wD/AP//AAH/AP8AAP8CAQD+AQEAAAEAAQAAAP8B////AP//AQEBAf8AAAEBAQAAAAAA/wD/AAAAAQEAAAH//wAAAAAB/wEAAP8BAQAAAQAA/wEAAAD//wABAQAAAAH/AQABAP8AAAAAAAAA/wAAAAH/AAAAAAAAAAH/AAEAAQAAAP8BAAAAAAAAAf8AAQAB//8B/wAAAAAAAf8AAAAC/wAA/wIAAP8B//8BAP8AAf8AAP8AAgABAAAA//8AAAAAAAD/Af///wD/AP8AAAAAAQAAAf8AAAEAAQEA//8AAAEB/wAA/wAAAf7/Af8AAAD/AP8AAf//////AP8AAQAAAQD/AAAAAAD/AAAAAAABAf///wD//wEBAQEAAP8BAAEAAAH/AAAAAP///wD//wAAAAEAAQAAAP8BAAEAAQEAAAAAAf8AAAAAAAIAAAAAAAABAQIC/wAAAAEAAQABAAD///4BAAH//wAA/wAAAf//AAD/AAEAAAAAAAD/AAAAAAEAAQABAAEAAAD/AQABAP//AAAAAP8AAAH/Af//AAABAAEBAAD//wH/AAEA/wAAAP8AAQEAAAEAAP8A/wAAAAABAAAAAQAAAQEA//4BAP8AAAAA/wEAAQABAAIAAAAAAAH/AAEBAQH/AQEAAAD/AAABAAAAAAEAAAEAAP8BAf////8A//8A/wAA/wD+AP4B/wABAQH/AAEB/wAAAP////8AAf8CAAAAAf8A/gAA/wEAAP8AAAAAAP8AAAD/AP8A/wAAAQEBAf8BAf8BAf//AQEAAQD/AAAAAAABAQH/AP8BAAAAAP//AAAAAAAA/wD/AAEB/wABAQAAAv8AAP8AAQEAAAH///8BAAABAAACAAABAAAAAAEAAAABAAEAAP8AAP8AAAAAAAAA/wD/AP8A//8AAQEAAP//AAAA/wEAAAD//wAA//8AAP8AAAABAf8AAgEAAAD/AAAAAQEAAQD//wD/////AQEAAP/+/wEBAP/+//8AAf8A//8A/wD/AAAAAAEAAAAAAAH/AQEB/wEAAP8AAP///wD/AAEAAQAB/wD//wAAAAAAAf7/AP//AAABAQAAAAAAAAEA/wAAAAAAAQD/AQD/AP//APz8/Xd2e8PCwgAAAAAA/wAAAQAAAGg5AVkx/AEA/gABAAAAAAD//wEAAAEBAAEAAf//AP//////AALcCwLoBQAAAQD/AOP5+7ny9/8AAAAAAQAA/zc2ODIzMf8A/wD/AQIB/v8AAAH/////AAAAAQAAAQD//wD/AAIBAAD/AAH///8AAAEAAAEAAAEA/wAAAAAAAAAAAP8AAAH/AQD/AP8AAAABAf8B/wD//wH/Af8AAAABAAD/Af8A/wAAAf//AAAA/wAAAAEAAQEAAQH/AQEBAf//AAD//wD/AAEAAQL/AQAAAAAAAQEAAP8CAAAAAP8BAP8BAAAAAQAAAAABAAACAQEBAAAAAAAAAAD/AAABAAEAAQIAAP///wEAAQAAAAEAAP8BAAH/AAABAAAAAAAAAAAAAAAB/wABAf8CAAAB//4BAf8AAQD//////v8B////AAABAgD/AP//AAH/AAAA/////wAB/wH//wH/AAAAAP8A/wAAAAAAAP8A/wD/AAD///8BAAD///8BAP8BAAEAAQAA//8BAQEBAP8AAAAAAAEAAAAA/wABAAABAAABAAAAAAAA//8AAAH+//8AAP///wD/AQABAQEBAgEAAAAAAAAB/wAAAAACAAD/Af8A/wEAAAEAAP8A/wAA/wD/AQEBAAEAAQAAAP8AAP8A/wEAAAD/AP4A/v8AAAEBAAEBAP8AAP//AP8AAAEAAQAAAAIAAP8AAAABAAEAAQAB/gABAP8AAAABAAEBAAEA/wABAQIA//8B/v8AAQAA/wD/AAEB/wEAAAH/AAAAAAAA/wD/AAD//wD/AAAAAP///wAA//8BAAAAAAD///8AAQAAAQAAAf//AAABAAH//gD/AAABAQABAAEAAAEAAP8BAAD//wAAAP8AAf8A//8AAAEAAAAAAP8AAAD/AAACAQEBAQEAAQD/AP//AAAB////AP///wD///8A/wAAAQAB/wEAAP/+Af8AAAAAAAAAAAEBAQEAAQAAAAH/AAAAAQABAAD//wH//wIAAP8A//8AAQEAAAH/AQIB/wD/AAD/AAAB//8BAAAB//8BAAH/AAEAAQH//wH/AAAAAAEA/wD/AAD//gAA////AAAAAAD//wEB/wD/AAEAAAEBAAABAAEAAAD/AQAAAAAA//8BAAD/AP8AAP8AAP4BAAEAAAAAAAAAAAABAQIBAQEAAAAAAAAAAAAAAAAAAAAAAAACAAD/AAEAAAEC/wABAP8BAAAAAAAAAP8BAAABAQAAAQD/AP8AAAAAAAAA//8AAAAAAP8BAQEAAQAAAAAAAP8A/wAAAAAAAQD/AAABAQEA/wABAQAAAf8BAAAB/wH/AP//AQABAAAB/wABAAEA/wAAAAAAAP///wAAAP////8BAAD/AAAAAP8AAQEBAQAAAf8AAf8AAAD/AAIBAAH/AAABAAD/AP8AAP//Af//Af//AAEBAAAAAAAAAAD/AAACAAD//wAAAAAAAAL/AAAAAAEBAAAAAP//AAH/AAABAAH/AAD//wAAAP8A////AQACAf8BAQABAAD/AP8AAP//AAD/AgD/AgAB/v//AAD/AQD/AQAAAQEBAAAAAQD/AQAAAP8AAQAAAAACAAAAAf//AgAA/wIB/wAAAQD//gEAAQAA/wEAAAABAAABAQABAAEAAAD+AQABAQD/AAAAAQD/Af8BAAAAAP//Af8AAAABAQAAAAAAAQD/AAAAAAAC/wH/AQABAQABAAAAAf/+Af4AAAAAAP8AAQAA//4AAP8AAAAAAQAAAQH/AAAB/gEAAf8B//8A/gABAP7+AAEA//8A//4AAAAAAAAA//8AAQABAAECAAAB//8AAAABAAAAAQD/AAEBAQD//wAA//8BAAAAAP8BAP//AAH/AQH/AP8A//8AAAIAAQEBAAEA////AQEA/wEAAQAAAP8BAAABAAAAAAEAAAEAAAAAAAH/AQH/AAH/AAEBAAEAAAEAAQD+AP8AAQH/AQEAAAH/AAEBAQAAAP8AAAD/AAEAAAD//wABAP8A/wD/Af8AAAEBAAGOjpCfnqAA//0AAAAAAAAAAP5SLgJ8Rf0AAf4BAAD//wAA/wEB/wD///8A/wD/AgEBAAAAAQEB8AYB3QoA/wP//wH+///G8ffo/v/+AAEAAQAAAAJAQD0BAAAAAAABAf8A/wIA//8AAAAAAP////8AAQD/AAABAQD//wAAAQAAAQAB/wH/AAD///8AAAEBAAAA////AAABAP//Af4BAAABAQEAAP8BAAAAAAH/AQABAAH/AP//AP8BAQH/AP8BAQAAAAEA/wAAAf//AAAAAf//AAAAAAD/AQH/AQAA//4CAAABAQAAAP////8B/wAAAQAA/wD//wAAAP4AAAAB/wEB/gD//wAAAP8BAAD/AQD//wD/AAH//wAAAP//AP8BAAAAAAABAAAAAQAAAP8AAAAAAP8A/wAA/wAA//4A/gABAP8CAAACAf8AAAABAAAA/wEAAQAAAf8AAQABAAH/AAD/AQAAAAEB/wD/AQH+AP/+//8AAAAA/wD//wAAAAAAAAAAAQIBAAH/AAAB/////wD/AAAAAAABAAAAAP4CAAAB////AAEAAAAAAAABAP8AAP//AQAB/wAB////AQEBAP8AAQABAAD/AP8AAP8B////AAEBAAABAQAA/gD/AAAB/wD/AP//AP8BAQAA/wABAP8A/wD/AAAAAQAAAAEBAAH/AAD/AQEBAAEBAAD/AAD//wAA/wABAQEAAAEBAP4AAAD/AAAAAAAA/wIBAQAB/wD///8AAAAA/wAA/wAAAQAA/wD//wAA/wEBAf//AQH/AQEBAAH/////AQEAAAD//wEAAQABAQEBAQABAAAAAQEA/wEB/v//AP8BAQAAAP8BAAAAAAABAAAAAAAA/wABAQAAAP8A/wH//wD/AQAA//8AAAAA/wAA/wAAAQD/AAH/AAD/AP8AAP//AQD//wD//wAAAf//AQABAgEAAAAAAQECAQABAQEB/wAAAP8BAAL///8AAf//AQD/AP4AAAEA////AAD/AAD+AAH/Af8BAAAAAgD/AQEAAAABAQEBAP8A//8AAP//AAD/AP8AAQD/AAABAAAAAAEA/wH/AAAAAP3+AAEAAf8AAP8B/wH/AQABAQD/AAIBAAAAAAD/AAAAAP8BAAD/AAAAAP8AAAAAAAAAAf8BAAABAf8BAAEAAf8BAP8AAQAC/wH/Af8B////AP8A///+//8AAAEAAAAAAP8AAQAA/wD+AAEC/wAA//8AAAAB/gIAAAEBAAAA/wD/AAAA/wAA//8BAP8AAP8BAAAAAAAA/wEAAQD//wD//wH/AQAB/wAA//8BAAABAAAAAAAAAQAAAP//AQEA/////wAAAAAAAAAAAAAAAf//AAEAAAEA/wD//wAAAAEB/wAA/wEAAAEBAQEBAAEAAP8AAQABAAD///8B/wAAAAABAAIAAAH/AAEAAAAA/wAAAQEA/wAAAAD/AQAAAf//AAAAAAABAAAAAAAA/gD/AQAA/wD/AAEAAAAA/wD+Af8AAQAAAAD///4AAAEAAQAAAAH+AAEA/wEAAf8AAP8B//4AAAABAQABAAABAAAAAP8AAP8A/wEAAQD/AAAAAQABAP7//wAAAf4AAf8AAAABAf8AAQEA/wAAAAABAQAAAAH/AAEB/wAAAQEAAP8AAQIAAf///wAA//8AAAEAAAD/AQAB/wD/AQD/AQAAAQAC/wAA//8AAP//Af/////+/wD///8AAAEAAAAB/gEAAAAAAAAAAAD/AQAAAQABAAAAAQEB/wAAAAEBAAAAAAEA////////AgIAAAIAAP8B/v8AAAEAAAABAgD/AAAAAAIBAAAAAQABAAAAAAAA/gD//wAAAAL//wAA/wAAAf8BAP8AAP8AAQEAAQEC//8BAP8AAQEAAQH/AAD/AQEAAQAAAAD+AAD/AAD/AAABAQABAAH/AAAAAAAA/wEB/wAAAAH//wH/AAAA/wD/AAEA//8AAQD/AAD/AQD///8AAf8AAQAAAQEAAAD/AQD/////AAEAAP//AQD/AAEAAAAB/wABAAEAAf8BAP//qamrgoKF///+AAABAAD+AAD/RyYEm1n8Egr/AAAAAAAAAQEAAAH//wEAAAAB//8AAP7//wAAAP0BANcLAO8EAAAAAQAAAf3/t/X3AAABAAAAAP8AAAAAREVD/wAAAAAA/v8A/wH/AQAC/wEBAQAAAAEA//8AAQEAAP4AAQABAP8A//8BAAD+AQAAAQAB/gAAAAAAAAABAQAB//8BAf8C/v8B/wD/AP8AAAAAAAEBAAH/AAAAAf8CAQAAAAABAQEAAP8AAP//AAAAAP8A/wD+AP8BAAABAAAAAf//AP8AAAECAgEAAf8AAAAAAAEBAQABAP4A/wEAAQEBAAABAAAAAAAAAAAAAQIAAP8C/wABAAAAAgABAgEA/wAA//8BAP8AAP8AAAEAAP8AAAAAAAD//wH///8B/wAAAAEBAAEBAQEAAP8BAP8A/gAB/wEAAAABAAH/Af8B/wAAAAD//wEAAAEAAP8BAQD//wEBAP8AAQAAAQAA//8AAAIAAQH/Af8AAQAAAf//AP//AAD///8AAQEAAP8A////AAD/AAAAAAABAAEAAgIAAAAA/wAA//8B/wABAf//AAEA/wEAAAAAAAICAQABAAAAAP8B//4A/wEAAAD//wAA/wABAQEAAAD+/wEBAQIBAf8BAAABAQEB/wAA/wH/AQEAAf8AAQD+AP8A//4AAP8BAQEA////AP8AAAEAAQEAAAEAAQAA//8B/wEAAAH/AQEBAQH//gAA/wEAAgACAv8AAAH//wAA/wAAAAAAAP8AAQEB//8BAQAAAAAA//7/AQEAAQD///8AAAAAAAEA//8A/wAAAAH/AQD/AQEA/wIBAQEB//8AAP8A/wAA/wAAAAH/AP8AAQEA/wD/AQABAP//AAEAAP//AAAAAAD//wEAAQEAAP8BAAD///4AAAAAAAEAAQEAAQEAAQEA/wABAQABAP//AP//AP8B//8BAAAAAAH/AAEA/wD+AQAAAAEAAv8BAf8BAAD+AAAAAP8AAAD/AAD/Av7/AP8AAf8AAAD//wEA/wAAAAAAAAAA/wEBAP//AQAAAP8AAf8A/wEAAQAAAQD/AQEBAf8CAQD/AAABAQAB/wAAAAAA/wAAAP///wAAAAD/AAAAAP8CAAEBAQAA/wAB/wD/AAD/AAAA/wAAAAABAP/+/wEBAAEB/wD/AAEBAQAA/wAAAAAB/wECAAEAAAH/AAEAAAAAAP8AAAH/AQD///8A/wEB//8B/wH/AAD/AAAA/wEAAAD/AQEAAQH//wD/AAABAQAAAQEAAAAAAP//AQEAAAEAAQABAQEAAAABAAAA/wAAAAAAAQAAAP8BAP7/AAEBAQH/AAAAAP8AAQAAAf8AAf//AAAAAAAA/wEAAP//AAAA/wD/AQH///8AAAAAAQEBAQABAAABAgD//wD/AAD//wD/AQAAAf/+/wEAAAEBAP//AAEAAAEAAv8AAP8BAAAAAAAAAAEBAAEA/gEAAP8AAP//Af//AAAAAAAAAf8BAAD/AQH/AAEC/wD/AAEBAAEAAQEAAQD/AQAAAAAAAQAB//8BAAAAAAAAAAEAAAEAAAEAAP8A/wAAAgD//wAA//8BAAAAAP4CAAAAAAEBAP8BAAAAAP8AAQD/AAAAAQEAAQD/AAEAAAAAAAAAAP//AP8BAAD///8AAAD/AAH/AQAA/wAAAQAAAf8BAQD//wAAAAABAAAAAf8AAAAAAgEBAAAAAAEA/wAA/wH//wAAAf//AAAAAgABAQH///8BAP///wEAAAAAAAAAAAAAAAEAAQEAAP4AAAD//wAAAAECAAABAAEAAAABAAH/AAD/AAAAAf8A/gABAAD/AAEAAAAAAQD/AgEAAAEAAP8A//8A//8A/wD/AAAA/wEAAAAAAP8AAQD/AAD/AAAAAP8CAAABAQAAAQABAAABAQAA/wD/AQEAAQAAAAD/AAEA/wAAAQD/AP8AAAEAAAD//wEAAAAB/wABAf7/AQEBAAAAAP//AP//AAAAAAAAAAIAAgH/AQAAAAAAAAEAAAABAAAAAAEAAP///7GytmZnavf19AAA/wAAAAAAAR8PBI1S/REI/gAB/wABAf8AAAD/AQD/AAAAAAABAAAAAAD/AAH9AgHoCQHmCf8CAAD///8A/+T7+7v1+v4AAAAAAAAAATY2NzMyMgEAAAH/AQEBAAAAAAABAAD/////AAD/Af8AAP//AP8BAAAAAAAAAAH//wAAAP8AAP8AAAEBAP8AAAEB/wAA/wIBAAAC/wEB/gH/AAEAAAAAAQD//wH/AAD//wAB/wABAAAA/wAAAP8BAAAAAAAAAQABAAEAAAAB/wD//wABAP8AAQAA/wAAAAIAAP8AAAH//wEAAP8BAAAAAAEAAQAAAAD/AAAA/wEB/gAAAP/+AAAB/wAA/wD/AP////8AAAEAAAEBAP8AAAABAAABAAABAAAA//8AAQEBAQEBAAEBAP///wAAAP8AAP8BAAABAAIAAQH/AP8A/wD/AQAA/wD/AAD/AQEAAAAAAAEBAAAAAQH//wEBAAABAQAAAQAA/wH/AAAAAQACAAAB/wAAAP8AAAABAQEBAgH/AAECAAABAQAAAQAAAgAAAQD/AP7//wAAAAEAAAAA/wD//wAAAf//AAABAgABAQD+/gD///8A/wABAAABAf8AAAEAAf//AQH//v4AAAABAQAAAP/+/wAB////AP8AAAAAAAEAAf//AQABAAD/AP8BAAEBAAEB//8A/wAAAQAAAQEA/wAA/wD+//8BAAABAAAA//8AAQD/////AAIAAAD/AAAA//8AAP8AAAEBAAH/AAEBAAACAf///wEBAP//AAEAAAABAv8AAQAAAAECAQEB/wD/AAAAAAH/Af/+Af//AP//AAD/AAD/AAEBAQEBAAAA/wAAAAD/AQAB////AAAAAQD//wABAAH/AP8AAAEAAAEAAgH/AP//AQEBAQABAQECAAEAAP//Af8AAAAAAAAAAAAAAAEAAAEBAAAAAQAB//8AAAAAAP8AAQAAAAAAAf8AAAH//wAA/wAAAP8AAAABAAAB/wH/AQABAP4CAQABAf8AAAEAAQAAAAH+AAD/AAAAAQEAAAABAQABAQEA/wAAAQH/AP//AP8BAAD///8BAP8BAQD/AP8AAAAAAAAAAAAAAQEAAAH/AP8BAQAAAP8AAAD/AAAAAQAA/wAAAQAAAf//AAABAP8AAP8BAAIAAP8A/wAAAf8A/wD+AQABAQEAAAEA/gL/AQEAAAD//wEBAgEBAP//AgAAAf8AAAAA/wEA/wD/AP8AAAAB/wH/AAAAAQAA/wD+AQABAQEAAP//AP8BAQAAAAEBAQAAAQEBAAEA//8AAAAAAP8A/wAAAAEAAP8AAAEA/wABAf/+/v//AAD/AAABAAABAQABAQABAAABAP8BAAEAAAABAQEBAAEBAAAAAQIA/wAA//8AAAEAAAD//wAAAQEBAQABAQEBAQABAAAAAgABAAD//wABAP8AAP8AAP8BAQIBAAAAAP4B/wD/////AAEAAAEBAAACAQAAAQAAAP8BAAAA/wEAAf//AQD//gAAAAD+/wEA/wAA//8AAP//////AP4AAQEB/wAAAQD/Af8AAAAAAQD/AAEAAAH/AAAAAQIAAAACAAAAAAAB/wD+//////8AAAAB/wABAQAAAAAA/gAA////AP8AAP8AAQH/AP8AAAAAAAABAAACAP//AAAAAQD/AAAA/wAB//8A//8AAv8AAAACAQAAAP8BAQAAAQD//wABAQEA/wH/AAD/AQABAAAAAP8AAf8A/wD/AgIB/wD/AAABAAEBAQAAAAAA/wEAAP/+AAAA/wAAAQD/AP8A/wD//wD+AAEA/wEBAgH/AAAAAP8A/wEAAQEAAAAAAAAAAAAAAQAAAAEAAQAAAQAAAQEAAAH/AQD/AAAAAAAAAAAA//////8BAAAAAAEA/wAA/wAAAAAAAAH/AP8AAAAAAAAAAf8AAAAAAf//AQEAAAABAAEBAQABAAAAAAAAAP8AAAH//wAAAf8A/wAAAQD/Af8BAf/+AAAAAAAAAf//AQAAAAEAAAH///8A//8BAP/+/wC3uLptbnDz8vAAAP8AAAEAAP8cEASfWv8pFv8BAAEBAAEBAAABAAH+AAAAAAAAAAEA/v8AAP8A/gAB7QUB0w0A9wEBAQH/AAEB/v+z8fXo/v0AAAAAAAAAAP9YWFcJCQn/AAD+//8AAAECAAH///8BAAAAAQAAAQACAAAAAAAAAAD/AP8AAQD/AQD/AAECAAEBAQEA/wABAQAA/wEAAAD+AAEA/wAAAQEAAAD/AAAA//7/AAD/AAAAAQAA/wEAAAEAAAAA/wAB/wAAAQABAP4AAAEAAQEAAAAAAQAAAAACAQD/AQAA/wACAAEBAAD/AAH/AAAA//8AAQAAAQAAAAABAf8AAAH/AAAAAQEBAQEAAAAAAAAAAQEBAQAAAP8AAAAAAAABAf8BAAAA/wAA/wAAAAEBAAEA////AAAAAAAAAQEAAP8A//8CAP8AAAEA//8AAAAAAAH/AAAAAQEBAAABAAAA/wABAAAA//8AAAD/AAEAAP8B//8BAAABAAD/AAAAAP8A//8A/wIAAf8B/wAB/wD/Af//AAD//wABAAAAAf8A////AP//Af8B/wAA/wH/AAAAAAEAAQAA//8BAAAB/v////7/AQAAAQABAAAB/wAAAAAB/wH/AAABAAAAAQABAP8AAAAA/wABAAEA/wEAAQAAAAD/AAH//wD/Af8A/gAAAAEB//8BAAAA/wABAAD/AP8BAAAB/wAA/wEBAQEAAAAAAAEBAAEBAAD/AAABAP8A/wAAAAH/AQAAAQAA/wAA//8AAQAB//8B/wAAAP8A/wABAQAA//8BAf8B/wH/AQD//////gEAAQABAAEBAP8AAAABAAAAAAABAAAAAP8AAAD/AQEBAQEBAAD/AAH//wD/AQEBAP8AAAAAAQEBAf8AAQAAAQEAAP8AAAABAf//AP8AAAABAP8AAAABAP8BAAD/AAD/AP8A/wD//wD/AAAAAQAAAQAAAQAA/wABAAAB/wEA//8AAAEAAQEAAAAAAQACAAH//wIBAAD/AgABAAAA////AP8B/wAA/wAAAAEAAv8AAQEAAP8AAAAAAAD//wABAQEAAf///wABAAABAAAAAQD/AAAAAAAAAQD/AAD/AQAB/wAB//8AAP//AAAAAAAAAP8AAAD/AP//AAAAAAEB/wAAAAACAQABAAABAAAB/wD+AAABAAIBAP8BAP8AAgAAAAAAAP8AAAH/AQD/AAAAAQH/AP///wACAf8A/wABAQEBAQH/AAD/AAAAAAEA/wEAAAABAQEAAAAAAQD/AAH/AQEBAQAA/v8BAQAA/wAAAQAA///+AAD/AP8AAQAAAAEA/wD//wD/////AQEB/wABAAEAAAAAAQEA/wD//wAAAP8AAAAB/wAC/wAA/wEAAP7//wD//wEA////AAEB/wAB/wEAAP4AAP//AAAB/v8AAP8A//7//wD/Af8A/wEAAAAAAQECAAAA/wAA////AAEAAAABAAEAAAABAAABAAAAAAAA//7/AP7/AP8B/wAAAAEAAAAAAQAAAAABAAAAAP/+AAAA/wAAAQH/AAEAAAABAv8A////AAAAAP8BAAAAAAAAAf/+AQAAAQAA////AP8A/wAAAAAAAAAAAQEBAP8AAAAA/wEA//8AAAEAAAEAAAAAAAABAAABAP8AAAABAAAAAQAA/wEAAAEAAAABAAABAAABAQAB/gABAQAAAP4AAf8A/v8AAAAC//7/AP//AQEAAP//AAAAAQAAAQAAAAH/AQAAAP8A/wAAAf//AAAAAAAA//8AAAABAAAB/wD/AP8AAQEAAgEA//8AAAEBAAAAAQABAQD/AAD/////AQEB/wH/AQIBAP///wAB/wEAAAAAAP///wD/AP8BAP8BAP//AAEAAAAAAf8A/wD/AAAAAAEAAQEBAAEBAAAAAAAAAAEB/wD/AAD/AQAAAAEBAAH///8AAAEAAAD/AAAAAf//AAH/AQAA/v8AAAD//wAAAP8AAQAAAQABAAAAAf//AgAAAAAAAQEAAAAB/wABAQAA/wH/AAH/AAEBAQAB/v8Btra4W1xf5OPhAAD/AAAAAAD/BwUDgEf9QCT7AAAA/wABAQAA//8A////Av//AP8AAQAAAAEBAAAB//kE/9sMAO4E/wEA//8AAP8B7vr8pvD3/wACAAAAAAABHyAhXF5a////AP8AAAH/AP///gAAAAEA//8AAQAAAAD/AAAAAQD/AQH/AgAAAP8AAAH/AQEA/gD//wD/AQEB//8A/wEBAAAAAP///wAAAAABAAAAAAEB/wABAAEBAAAAAP//AAAAAAD/AAAAAAD//wAAAP8A/wABAP//AP8BAP8AAP8BAQAA/wAAAv8BAQAAABaE6XsC//7/////AQABAAAAAAD/AAAA//8B/wD/AAEBAP8A/wEB//8A//8AAAAAAAAAAP8AAAAA////AAAA/wEAAAH/AAD/AAAAAAD//wAAAP4AAQEBAAAA/wABAAAA/wABAQH//wAAAP//AAD/AAEAAgACAf8AAP8AAQD/AAD/AQEA/wAAAAEAAP8CAAAA/wH/AQD/AQAAAAEAAAAA/wEA/wEAAf7//wD/AgAAAQEB/wABAQAB/wD///8A/gEAAQABAAAB/wEAAP//AAAA//8BAf8BAAIAAQD/AAEAAgABAQEBAAL//wEAAAAAAP8AAf//AP8BAP8AAQD+AAAAAAAA/wAAAf8AAQABAQAAAAEA/wABAAH/AAABAP//AQAAAP//AAEAAAD/AQD/AQABAAEAAP/+AAEAAP8BAAAB/wAAAAAAAAD/AAAAAf8AAAEAAQAAAf8A/v/+AP8BAQH/AAEA/wD+AAEAAAAAAAEAAf///wAAAAEAAAD/AgAB/wAAAf8BAgAB/wAAAP7+AQAAAAD/AQACAAAAAP//AQH/AAAB//8A//8AAQAAAf8BAAAA/wAAAAD/AAD//wD+/wEA/wL/AAD/Af8AAQEA/wABAAABAP/+/wEAAAH/AAAA/wAB//8AAAEBAQEBAQEB/////wAAAP8A//8AAQAB/wD/AP8AAQH/AAAAAAD/AAD//wD/AQAAAf8AAAEB/wAAAAABAAEB/wD+AAD/AQAAAQAA/wD/AP8BAQH//wD//gABAP//AAAAAP8BAQD/AQD/////AAAAAP8AAAAAAQABAQAAAAD/AQAAAAEAAQECAAAB/wEBAQEBAP8BAQAC//8A//8AAAAAAQD//wD/AAEBAAABAQEB/wD/AP8AAAEAAAEA/wAAAAAAAAIA/wAAAQAAAP8AAAABAAAAAAD/AAEAAf//Af8AAAAAAgEBAQABAP8A/wAAAP////7/AAAAAAABAAABAQD//wEAAAAAAP8AAQAA//8AAAEB//8CAAEBAP8CAAAAAAAAAQAAAgIAAAAAAAAAAAABAAAA//7/AQAAAQD//wD/AAD/AQD/AAD/Af8AAAH/AAEBAf8AAgEAAP//AQH/Af///wIAAAEBAQD+Av///wAAAAEAAQEAAAAAAP8BAQAA//8AAAABAAAAAf//AP8BAQABAAEAAQD//wAAAAAA/gAAAAICAQEAAQEAAAAA///+AAAAAAAAAAEB//8BAQIB////AQABAQABAQABAQEA/gD/AQEAAP8BAf8AAAAA//8B/wEB/wABAAD/AAAA/wEBAAAA/wEAAAEBAQABAAEAAQEBAAAAAQD/AP8AAP///wAAAAD/AAAA/wD/AQEBAQAAAAEAAP8A/v8AAAAAAAEAAQD/AAH/AAL//wH/AAEBAAIBAAAAAAD/AAEBAAAAAP8A/wEBAAAA/wH///8BAP8AAAABAAAAAAAA//8A/wABAQAA/wH/AP//AAD+AQABAAIAAP8A/wD/AQEAAf8AAAD/AAEAAAEBAAEA/wAA/wD/Af8BAP/+AP8BAQAAAf8BAAAAAAEAAQAAAQD+AAEAAQEA/wAAAQEA/wH/AQEAAQAAAf8A/wAAAAD/AAAAAAEBAAD/AP8AAAH/AAD/Af/+AP8AAQAAAP8AAAAAAf8A/wAAAP8A/wAAAQEAAAABAQAAAAAAAAEA/wD+AAAA/wAC//8AAAABAf8BAAEAAAAA/wD/AAABAAABAP///v//w8TEbWxv8O/tAAD/AAAAAAABBAMCdT/+Yjj9AAEBAgH/AAD/AAD/AQABAAAA//8AAAEAAP//AP8AAP4CAOAKAeYFAP4AAQAAAQEA//7+rfD1yPn9AAAAAAABAAAARkdFExMUAQEBAQAAAP8BAAEAAP/+AP8AAQEAAAAAAQABAAEA/wACAP8BAAEA/wEAAQAAAAAAAQAAAAAAAAAAAQEAAP//AAAAAQAAAAAA///+AAAAAP//AAABAP//AAAAAAABAAH///8A//8A/wABAQAAAQAAAAEA//8AAQH/AAD//wD//wABAP///wD//wD/AgACAAIBAgEA/wABAAEAAv8BAP/+/QH+/wAA/gAAAAEA/wH/AAEAAf//AP8A/wD//wAAAAEBAQAAAAH/AAH/AAAAAgEBAAEAAQEAAAABAf8AAAAAAAEAAP8AAAABAAAAAAEB/wD//wEAAQD+Af8AAP8BAAAB//8A/wAAAQD/AAIAAAEAAAABAAIAAAEAAP7/////AP//AP//AQEAAAD/AP8BAAAAAAAA////AAD//wD//wAAAAEBAAEAAP8A//8AAAAAAAABAQH/AQAB/wABAAH/AQEBAQAAAP8AAAAA/wD/AAD//wAAAAABAAEBAAAB/wAC//8AAQABAf8B//8AAAAA/wAA//8AAAD+AAEAAAH/AP8AAP8BAQEA/wABAAAB/wAAAf8AAP8BAQEB/wEBAQABAAAB//8AAAH/AAD/AAAAAf8AAv8B/wEBAAD/AP8BAAEBAf8BAAAAAQEA/wEAAQAAAAAAAAAA/wABAQH/AP8AAAAAAP7//wD/AQAB/wAB/wAB/wABAAAAAAEAAQAB/gAA/wABAAD/Af//AAEB//8AAQAAAP8AAAECAAEA/wAAAAEBAAAAAQEAAAAAAf8AAf8BAP/+/wIBAAABAP8BAAEAAAAAAQECAQEAAAEAAP8AAAAA/gEA/wEBAgEAAP8BAAEB/wAA/gAAAQABAP//AQEAAAAAAAAAAQEA/wAAAf8A//8AAP8AAAAAAP8B/wAAAgAAAAAAAP//AAEAAQAA//8AAAEBAAEA/wEBAAEBAAABAAAAAQAAAAAAAf8AAAABAf8A/////v7/Av8AAQD//wEBAAAB/gEAAAH/AAD//wEA//8AAAD/AAAAAAEAAf0AAAAAAAAA/wAB//8A/wEAAP8AAP8BAf8AAAAAAAD/AAD/AAEAAP8AAAABAP8AAAD/AAH/AAAA/wAAAf4AAP8AAP7//wAAAAABAQAA/wEBAQECAQABAAEA/wD+/v///wH/AAAA//8BAAEAAAH/AAEAAAAA/wAAAAAC/wAAAAAA////Af/+AP//AAAA/wEAAAEAAQABAP8AAP//AAEAAf8BAAABAAEBAgD/AAAAAgH/AAAAAP//AAEAAAAAAAABAAEAAAAA/gAAAf8BAAEBAAAAAAD/AAAAAAAA////AP//AAABAAEBAQECAf8B//8AAP/+AAABAAEAAQEAAAEB/wD/////AAAAAAAAAQEBAf8A/wABAQAA/gAA/gD+AQEBAf8AAP7/AP8BAP///wD/AAABAP///gAB/wAAAAD//wEAAQAA/wABAAD/AAAA//8BAQH/AP7//gAA/wEBAP/+/wD/AAAAAAABAQABAAAAAQEAAAAB/wEAAP////8AAf8AAAAAAAIAAAH///////8BAAAAAAEAAAH+AgAA/wH//wEAAAEAAQEAAAEAAAAAAAD//gAAAAH/AgAA/wABAAAA/wEB/wEB/wICAAEA/wAB/wH/AAABAP8AAQAAAAAAAAEAAP//AQD/AAAAAAAAAAD/AAD//wD/AQEAAAH/AP8AAP8BAP8B/wAA/wABAAAAAP//AAAAAQAAAQAAAAAA/wH/AAEAAQEBAgH+AQD/AP//AAEBAQD/Af//AAAAAAAAAAAAAAD/Av/+Av8AAgABAAABAP8A/wD/AgABAQABAAAAAAD//wABAAAAAP8AAAAAAQD//wEAAQAAAAABAAABAQAAAAAA/wEAAP8A/wAAAAEA/wAAAAEBAczNz1VUWuDg3gAA/wAA/wAAAQAAAGo5/3xH/wH//wEAAAAAAQEAAf//Af//AAAAAAABAAD/AP8AAAD/AADpBwLbCgD9A/8AAAABAAD9/9X394bs9f0AAAAAAgAAAQkLDlxcWwH///8A//8BAQECAAEAAAAAAQIAAf8AAP8AAP//////AP8B/wAAAP//AQH/AAAAAf8AAP8BAAD/AQEAAP//AQIAAAAAAAAB/wAAAQABAv8BAQAAAAAA/wEAAAABAAD/AAD/AAEBAQIAAQEB/wAA/wAAAf8AAP8CAP//AAAAAQEBAAD//wEBAAABAAAAAQIB/wD/AP//AQAB/wH/AAAC/wAAAQEAAgAAAAH/AAAAAAAAAgEAAf8BAQAAAAEAAQD//wAAAAEAAAAAAAD/AQAAAP7/AAAA//8AAP8AAP8AAQD/////AAABAAD///8AAAABAAABAAEAAP8CAQABAP8BAP8A/wABAAABAQAAAP//AAD/AAAB///+//8AAAABAgEAAQACAAEAAf4A//8BAQABAAEAAAH/AAEB/wABAQAAAAEB/wEAAAAA/wACAAEBAAABAP8BAAD/Av8A/wH////+AP//AP8BAAABAAAAAQEAAAEBAAEBAf8BAAH+AAEA/wAA/wEBAQD//v4AAAICAAH/AQD///8A/wEAAQEAAAH/AAEA/wABAf////8A/wAA/gABAAAAAAD/Af8A/gD/AAAA/wAA/wD/AP//AQD//wAA/wAA//8AAAH//wD/AAAAAAAA/wEBAAD/AP8AAAD/AQABAAAB/wEAAAH//wD/AQAB//8AAAAA//8AAQH/AAH//wAA/wEBAAH//wAAAQAAAAAB/wABAAD/AQABAAD/AQEAAf///wAAAP///wD/AAH/AQEA/wEA/wAAAAAA/wD///8AAP8AAQD//wD//wABAAH/AAAB/wD/AP8AAP8AAgAAAP8A/////gAAAAAAAAABAP//AAAAAAAA//8A/wAAAAAAAf8AAAEA/wD//wH/AAAAAQEBAAEB/wAA/wAA/wEBAAEBAAAAAAAA//8AAQAAAAAAAAAA/wABAAAAAP/+AP///wD/AQAAAAEAAQABAAD/AQEBAQEAAQIBAf8BAP8AAQD//gAA/gEAAAAAAAD/AAAA/wEB//4AAQABAf//AP8B/wABAAEAAAAA//8BAAL//wEBAAAA//4AAP8AAAD/Af4AAAAAAQAAAAAAAQABAAD/AP8AAP8A/wEAAQABAP8A/wEAAAEAAAAA//8AAAEAAP//AP//AP8AAAAAAQEAAAEAAP8AAAEBAAD/AAEAAAD///8BAQAAAAAA//8AAAEBAAEAAf8AAQAAAAAB/wIAAAAAAf8AAAAAAAAAAAEAAQAA/wAA/wEA////AQAAAf8AAQH+AP//AAAAAQAA/wD//wD///8AAAEAAAABAAEAAAAAAAAAAAAAAP8A/wABAQEBAQD//wD//wD/AP8B//8AAAAAAgD//wEAAP//AAAAAAEBAAD/AAAAAQABAAAAAAABAAAA//8B/wIBAQEAAv8AAP8BAQAAAAAAAAEBAAIAAQEAAAEAAQIAAAL/AQEAAQD/Af8BAAAAAAABAf8BAAABAP//AAECAAD/AAABAAEAAQD/AP//AAAA//8AAQEBAAAAAQAA/wEAAAABAQEBAf8A/wABAAAAAAAAAgABAP8B/wEAAQEA/wABAf8AAAH/AAAAAAAAAAAAAQAAAAAAAAEBAAH/AAAAAP4BAQEA/wAAAAL//wEAAAEA/wABAQAAAAIAAAAA/wACAQAAAAD//wD/AAABAQEAAAD/AAD//wEAAAAA/wEAAQAAAQEAAAH//wAAAAAAAAAAAP8AAAAAAAAAAAH/Af//AQAA//8A/wH/AAH///8A////Av7/Af8AAgEA/wAAAP8BAQABAAD/AP8AAQH/AQAAAf8AAP///wAA/gEAAAEA/wAA/wABAAABAAAAAAEBAAEAAQABAQABAf4AAQAAAAD/AAEBAAAA//8AAAAAAQH+//8B/wEAAAEA/wEAAADAwcRfYWPr6ugAAAIAAAAAAAIAAP9YMP+GTP8HA///AQH/AQD//////wAAAAABAP8AAAD//wAA/gH/////9gMB1gwA9QMA/gABAAEA/gH/AP6Y7vbg/AAAAAEAAAAAAAFdWlg9OzoBAQEB/wAA/wD/AAH//wAAAQD/AP8AAQAAAAABAAAAAAAB/wEAAQH/AAD/AAAA/wAB/wECAAAB//////8BAP//AAAAAAAA/wEA//8A//8AAAAAAAAAAQD/AAEAAAAAAQAAAAAA///+AAAAAAEAAQEAAf8B/wAB/wH/AAEAAAH//wEAAAD//wAB/wABAf8C/////wAA//8A/wD/AAD//wAAAgECAAABAAABAQEA/wEA////AAAAAAAAAAD/Af8AAQAAAAH/AQD/AAD/AAD/AAABAP8BAAEBAAEBAAD/////AAEBAAAAAAAAAgEC/wAA/wAB/wEAAQABAAAA/gD/AAAB/wEAAAEBAP///wAA/wD/AQAAAAAAAQEAAAABAf8AAf8A/wH/AQABAQEA//8AAP//AAAAAAD/AAH//wAB/wH//wH/AAAAAAAA/wABAP//AAAAAAEAAP8AAAD/AAEBAgABAv8BAQAA////AP7//wD//wH//wAA/wAAAAD/AAAA/wD///4AAAEBAP//AAEAAgAAAQEBAAEA/////wAAAQEAAQIB//8AAQEBAAAAAAABAAAAAAAAAf8B/wEAAf8AAAD/AAH/AgABAP8AAQAAAAAAAAD/AP//AAD/AAAAAAABAQH/AAD/AAAAAAABAv7/AAAAAAH/Af//AAEAAAD/AAEA/wAAAQECAQD/AQAA/wAAAAD/AAD/AQEA//8B/wAAAAEBAAABAP//AQEAAP8AAAAAAQEAAP8BAAABAf8AAQAAAAEA/wL//gAB/wD/AgAAAQAAAP8B/wAAAAAA////AQD/AAL/AP///wAAAf4AAQAA/wAB/wEAAAD/AP8AAAACAQAB/wABAAEAAQACAAEB//8B/wAAAQEAAQAAAAAAAP7/AAD+/wH/AAH/AAAAAAD+AAAA/wAAAAEB/wAAAAD/AQAB/wAAAAAAAAAAAf4BAAEAAf8AAP//AQD/AAABAf//AP4AAAD//gD/AP8BAAAAAAD/AAD///8B/wAAAAEA/wEAAAEBAQAA/gABAAAAAAEBAAH/////AAEB///9AQH/AAEAAf8BAQABAAAAAQACAAAAAP8A/wD/AP8AAAD/AAEBAAEBAAEAAP8A//8BAQIAAQD/AAEBAAAAAQAA/wEBAf8BAAABAAAA/wAA/wAAAAABAP8AAAD//wD+AAEAAAAB/wAA/wD//wAAAQAAAAAAAP8A/wAAAAEA/wEAAAAAAAD/AQABAQH/AAD/AP//AQAA/////wAB////AP8AAf//AgABAAD///8A/wAAAQAAAAABAQAAAP8AAAAAAP//AAD//wD//wAAAAEA/wD+AAD/AAAAAAAAAP8BAAAA/wD/AP8AAQH/AP//AAAAAP8B////AQAAAP4AAAD/AAEA/wAAAAAAAAH/AAAAAAAA/v8A/wAAAQD/AP//AAD/AAAB////AAH//gEAAAD+AQAAAf8BAAAA//4B/wABAP///v8AAAD//wABAAD//wD/AQAAAQABAQAAAAAAAP//AAEA//8AAAEA/////wD//wD/Af//AP8AAAAB//8B/wEBAAAAAP//AAD//wAAAf8A/wAAAAAB/wD/Af8AAAAA/wD/AAAAAAAAAAAA////AQEBAAD//wABAP8A/wD///8A/wD+AAD/AAAA//8AAAD+AQAAAf//AAAAAAEAAP8AAQEBAAH/AQIAAAAAAAD/AQH/AgIBAQABAQEAAAAB////AAAAAgD/Af8AAAABAAAAAP8AAQH/AAAAAQABAP8BAAEB//////////8AAP8AAP4AAv8BAf/+AP//AQABAQAAAP8AAAH/AQAAAAH/AAAA/wAB/wAAAAEAAP//AAAAAf8AAP8BAAAA/wAAAQEA/wD/AAAAAP//////AQEAAAEAAQAAAAEAo6KlUFBT2NXUAAD/AAD9AAABAAD/RSUCllX/CwcAAAEAAP//AP8AAP8BAAAAAAAA////AP8BAQAA/wEAAfgFAtYNAOkFAP8AAP4AAP8B//0BvPL4oe34AAAAAAAAAAAAHSEfc3Rx/wAA////AAAAAAH/Af//AAD/AP8AAAEAAQAAAQEA/wAAAAABAAAAAP//AAAAAAAA/wEA/gD+//8A/wIBAAEAAAAAAAAA/wAB//8BAQABAAABAP8A/wAAAP8AAAAAAAABAAAA/wEAAAABAQD/AAAA//8AAAABAAAAAQAAAQAAAAEAAQAAAAAAAQAB/wAAAP8BAgECAQEAAAIAAAAAAAAB/wABAAAB/v8A/wAA/wAAAAL/AAEAAQD+AAEAAQH/Af4BAAABAAD/AAAAAgABAQAAAAAAAAAA/QAAAAAA/wAAAQEAAAAAAAEA/wAAAAD//wEAAQAAAQEAAP8A////AAH/AgAAAAH/AQD/AP8AAAEAAQAAAP8AAP8A////AP////8BAP//AAABAP8A////AQABAAABAQABAAD/Af8AAAD//wH/AQEA//8A//8AAAAA//8AAQAAAf///wEBAQABAQIA//8A//4BAP8AAQECAQAAAAEAAQD/AAAAAQH/AQD/AQABAAAAAAABAAABAQABAQAAAP8AAf//AAD/AAEBAQAB////AAD//wAAAAAAAAEAAAEB//8A/wH/AP///wAAAP///wEAAAEAAAAA/wEAAAABAP8BAAEAAQAAAAAAAAEBAQD///8BAAAAAAEBAP//AP8BAAAA/wAAAf8BAAD//wD/AAEAAQEAAQAAAAAA/wD//wIAAQEAAQAAAAAAAQEA/wD/AP8BAP///wAA/////wAA/wAA/wD/AQEB/wEA/wAA//8A/wAAAAH/AAEAAAIAAf8BAQAAAAEAAAAA/wD/AAABAAAAAP/+AAAAAP//AP4BAQAAAQEAAQIAAf///wABAP8AAAD/AAEA/wEAAf///wAAAAEAAAH//wD/AP8BAP//AP8BAP///wEAAf8AAAAAAAAAAAEBAAAAAP8AAAAAAAD/Af8AAAABAAAAAQAAAQABAAAA//8AAAABAQAAAQAAAP8A/wABAAAAAQIAAQABAAAAAAEBAv8AAQEA/wEAAAEAAQD//wABAP8AAAEAAAAAAAEA/wAAAQEAAQD//wAAAv8A////AAABAAAAAAEBAP8A/wAAAAD//wEAAAABAP8AAAD/AQABAQD/AP8A/wEB/wAAAAD/Af8A/v8AAAAA/wD/AAABAAH/AAAAAQEAAAEA/wABAAAB//8AAQEAAQD/AP//AAEAAQH//wIAAQAA/wAAAQECAAAAAAEAAQAA//8AAAD+AQD/AAAAAQEAAQABAgABAQECAAEAAAIBAQAB//8AAAEAAAH/AQH/AAEAAAD/AAABAAABAAABAAAAAP8AAP8AAAEAAgAAAQABAAEAAQEBAAAA/wAAAQABAAD/AQH/AQEBAP8AAQABAQAAAAEA/gEBAgECAAABAAABAP///wEAAQAAAAAAAQABAAD/AQIBAgD/AAAAAQEA//8BAAEA/wD/AQD+/wL//gD/AQAAAf8AAP8AAAEB/wEAAAABAQEAAAEAAAEAAQEBAf//AP7/AQAAAf8AAf//Af8AAQD//wH/AAD+AAEBAQH/AAD/AQABAAACAP8A/wAA/wH//wAB/wEB/wEBAgABAP8BAAAAAP8A/wEAAf8AAP8AAAEAAP8AAAH/AQAAAQEAAP////8AAAIB/gABAAEBAP8AAQD/Af8AAQAAAAAAAAAAAQEAAP8CAQAAAAD/AAEAAP8A/wD/Af//AP///wD/AP//AQEA/wD/AAAAAP8A/wEA/wEB//8BAf8AAQD/AAAAAAABAAD/AAAAAf8AAAAAAQD/AAABAAEBAAIAAQAAAP8B//4AAAAAAQEAAQAA//8AAAIAAQAAAQAAAAD/AQAB/wAA/wAAAAD/AP8AAAAAAf8BAf8AAP8AAAEBAAAA/wD/AQAAAQAAAQIBAQAAAQAAAP//AKKipWprbfHw7QAA/wAAAAAAAQAAAD0hA6Jc/REJAAD//v///wABAAEAAAAA/wAAAAD//wABAAAB//8AAAD7AQHYCgDfCQACAQD//wAAAf4A/+X6+nfn8/UAAAAA/wAAAQAA/19cXCQlJAEBAAEBAP8AAAH/AAABAAABAgABAAAAAAD/AAAAAAEAAQAB/wAA//8BAAEAAAEAAQD/AAEBAf8BAAAA/wD/AAAAAP8AAQEA/wEB/wAC/wEAAAEB/wAAAAEBAAEB/wAA//7/AAH/AP8B/wAAAAD/AQEBAAD/AAAAAAAA/wAAAP8AAP8BAP//AAAAAAAAAf8BAAL//wAAAP//AAD/AQAA/wIAAAAA/wEAAAEAAQEAAAD/AAAAAP8AAQD/Af8AAQAAAAD/AAH/AQAAAAAAAAAAAAIAAAAAAAIAAAD/AAEAAf8A/wABAAD/AAIAAQAAAQD/AAAAAQD/////AAAAAf8AAf//AP8AAAAAAP8AAAD/AP4BAQAA//8BAQABAAABAQAB/wAAAv8A/gEBAAH/AAEA//8AAP8AAAAAAf8BAAEAAQH/Af7/AAEBAAEBAP8AAAEBAf8AAP8BAQH//gAAAP//AAH//wEA//////7+/v//AQAAAAAAAAAAAP//AP0BAf////8AAAABAAAAAP8A/v8AAAAAAAEAAQABAf8AAAAA/wEAAAEB/wABAAAAAAAAAQAAAAABAAD/AQEBAAEBAAAAAgH+/wH//wEAAAAAAf//AAAAAP//Av8AAQAAAAEA/wABAQEB/wD/AAAA/gAAAf4AAAD/AAEAAAAAAAEAAAAAAQAAAAAAAQAA//7//wEAAQAAAP//Af//AAAA/wD//wABAQEA/v8BAQABAQH/AQAAAQEBAQD/AQD/AAEAAAH/AQEAAAEAAAAAAAEAAf8A//8AAP8AAAD/AP8BAAAAAQAAAAAAAAEAAgEBAAEBAQACAP//AP8A/wD+AP8BAAL//wEC/wAAAQAAAAH///8BAQAAAAAA/wD/AAH/AQAB//8CAP8C/wABAgL///8AAAEBAP8AAAD+/wEAAP8AAAAB/wAAAQAAAAAA/QH/AQAAAP8AAAABAAEBAAAAAAD/AP8AAP8AAAD/AAAAAQH/AAAAAQAAAAAA//8CAf8AAQABAAD/AAEBAAH///8A/wAAAP8AAAD/AAD//wAAAQABAQABAQABAAIBAAAAAf8AAAAA/wABAQEAAf//AQABAAH//wABAQAAAf8A/wD+/wABAAH/AAEA//8AAP8B/wABAAH/AAAAAAEA/wD/AQD/AAAA/wD/AAIA/wAAAQABAAD//wEAAAEAAAD/AP4AAAH/AAH///8AAP8A/gEAAAD+//8BAAAB/wAAAf8AAgABAP//AAH///4A/gAA/wD/AP//AAD//wEAAAD/AAAAAQEBAf8AAAABAQAB/wAA/wEA//8AAAABAQEBAAD/AP8B/wD//wD/AAD//wAB/wEBAP8A/wH/AQEAAQD//wAA/wABAAABAAEAAQIAAP8AAAEAAAD//gAAAAEAAQEA/wAAAAAA/wAAAP7///8BAAAAAAAAAAEB/wAAAP8AAgABAAEA/wEBAAABAAAAAP8AAAEAAAEAAQH/AAAAAAD/AQD///8A/gAAAAACAf8AAP8BAAABAQABAQAAAQEAAQAAAgAAAAAAAP8BAAH/AAAA/wABAAABAAABAAAAAAAA/wH/AP8A//8AAAAB/wABAP8A//8AAAABAAAAAQABAAD/Av7//wAAAAAA/wABAAD//wEA/wD+AAAAAf8BAQAAAAAAAAAAAQAAAAH/AAABAAEAAAAAAQEAAQABAQEBAf//AAAAAAAB/wEAAf//AAH/AP8A/wABAAEA/wH/AAH/AP8AAQAAAf8AAQAAAAD/AQABAP8AAAABAf8BAQAB/wH/AAD/Af8AAQABAQEBAQD/AAAAAP//AAAAAAD+Af8AAQABAQEAAQD/AAH//wEAAAAAAAH/AQEA/wAA/wABAAAB/wH/AAEAAAEAAAAAAAABAAAAAAAAAAAB//+cnZ5oZ2v19PIAAAEAAAEAAAEAAAI9IAOdWvsYDQAAAAAAAAAAAQAA/wD///8AAf8B/wAAAQEB/gIAAAEA+wMB2gsA3woA/gMA/wAAAAL/AAAA/gCj7/TQ+PwAAP8AAAIAAAINDxBYWFUCAQAAAAH/AAAAAQD/AQH//wEAAAAB/gEA/wEAAAAA/wD/AP8BAAACAAAA/wD/AP8AAP8BAQAA/wABAAEAAAAAAAAAAQABAQAAAQEAAAAAAAH/AAAAAAEBAQAA/wAAAAAAAAEBAQD/AAAA/wAAAP8AAP///wH/AP8AAQD/AQAAAf8A//8B/wAAAgH/Af8AAQD//v8CAQAAAAAB/wAAAP8A/wH//wAA/wAAAP8AAP//AAAAAAEAAAD//wAAAf8A/wH/AQAAAQEAAP8A/wAAAP8AAAD/AAAA/wAA/wAAAQAA//8BAAIB/wD/Af////8A/wD/AQD/AP/+AAEBAAABAQEAAAD/AQEAAQAAAAABAAAAAQACAP4AAQIAAP8BAAABAP8AAAD/Af8AAQD//wAAAAD/AAEAAAABAQAAAAAC////AAAAAQACAf8A/wD//wAAAAD//wAB/wAAAP4AAAD/Af8BAP8A/wEAAQAAAQEBAQABAQEBAP8AAQEBAP8AAQAC/gAAAQABAAAAAAAAAAAAAAEBAAEA/wD/AQAA/wAB//8AAQD/AQEA/wEAAAEBAAEB/wAA//8A//8BAP8AAAEAAAABAP8AAgD//wH//wD/AAAAAAD/AQABAP4AAf8BAP//AAD/AAAAAAABAgAA/wEAAAAAAAABAQAAAAD/AQD/AAEAAAABAAD/AP7/AAICAQH/AAAA/gAAAf7/AQAB/wAAAAAAAAAAAAD/AAD/AAABAQAAAP8AAP8BAf8AAQAAAAAAAQAAAAAA/wD/AQAAAf4C/wEBAAAB/wAAAQABAAABAAD/Af8B/wD/AP//AAAAAAAB//8BAQECAAD/AgAAAQEAAQH+/gD/AAAAAP8AAAEB/wD/AP///wH/AAEAAf8AAAEB/wEAAAAB////AQIBAQAAAAEBAAABAAD/AAAAAQD/AAD//wEAAP8AAAH///4A/v8AAAAA/wEAAAD//wAAAQAB/wABAAAAAQAAAP//AAAA/v4A//8A/wEA/gAAAAAA/gAAAQD/AAH/AQACAQEAAP8AAQD/AAEAAQAA/////wAA/wD/AAABAAEA/wAAAAD/AQH///7/AP8AAgEA/wD/AQEA/wAAAP8AAAD+AgEA/wAAAQEA/wABAQEBAAEB/wD/AP8AAQEAAQAAAQABAQAAAP8B///+AAABAf4CAAAAAAH+/wH+/wH/AQAB/wEAAAH/AQABAAEAAAEAAAAAAQEAAAAAAAEAAAABAP8A//8BAAD/AQABAAH//wD/AQAAAQAAAQH/AAEBAAD/AAD+/wABAP8A/wAAAAAAAQH/AAEBAAEAAAD/AQECAQEBAAABAQABAgAAAAD//wH//wAB/wD/Af//AAABAQAAAAD/AAAAAP8A//8AAAAA/wD/AQAAAQEAAP///////wEB/wD/AAAAAAABAQEBAAABAAAAAf//AQAAAAABAf8B/wEA/wH//wAA/wD/AP8AAAD/AAAAAAAAAQAAAQAA//8AAAL/AAIAAQABAAAA/wAAAAEAAAAAAP8AAf///wAA/wABAAEBAAABAAH/AQECAAEBAAEB/wAA/wABAP8B/gAAAQAB/wABAAEAAAEB/wABAAEAAAAAAAAAAP8AAAEAAf8BAQEA/wAA/wEAAAAAAAEAAAAAAAABAP8A/wAAAQAAAAAAAP8AAAD/AAAA////AP//AP8AAAEBAP///v4BAQD/AQAB/wL///8AAP//AP8BAAAAAAEB/wEAAAAAAP8AAQAAAAAAAP8AAAAAAf8B/wEBAAH//wAA//8A/wH/AgAAAAEAAAD/////AAAAAf8AAAAAAf8AAAAAAAD/AP////8AAQAAAf7/AQEAAP8AAAD/AQAAAAD/AAAA/wEBAQEAAQD/AQD/AAH/AQH/AAAA/wAA////l5ibb25y+Pj1AAABAAAAAAABAAD/QCP/pV78JBQBAAEA/wH/AAAAAf8BAf8AAQACAP8C/wH/AAAB/gH/AP0BAtYNAdsMAPsDAP8AAAABAAH/AAAA0vf4m+z3/wD/AAABAAD/AAAAZWRkKioq/wAAAP7/AAAAAf8AAAD/AAD//////gH//wD///8B/wABAQEA//8AAAAAAQAAAQEA/wEA//8AAgD/////Af8AAAEA//8AAP//AP8A/wEA////AQH/AP8A//8B/wAAAP8AAP//AAAAAAAAAAEAAAABAAEAAgEAAQABAf8BAP8AAAAAAQABAAD/AP//AP8A////AQIBAgAAAAAAAAEBAQIBAAH/AAH/AP//AAEBAf8A/wAAAQD/AAAAAgEAAP8AAAD/AQAAAP///wEAAAEA/wAB/wAAAQABAQEAAAAAAP8AAAEBAQAAAQD/AP8BAAAAAAEAAf8A/wABAQAAAQAAAP7/Af8BAv//AP8A/wEA/wH/AAAAAP8BAP//AQABAAAB//8A/wABAQAAAf8BAQD/AAAAAAAAAf///wEAAAIA/gEAAQD//wAA//8BAAEAAAAAAP8A/wEA/wEAAP8A/wEBAP8A//8AAAL/AP4BAP8AAAAB/wD///8BAP8A/wEAAAAB/wIAAAEBAQEAAQAAAQAAAAEA/wD/AQEA//8A/wD//wEB/wAAAP///wAB/////wD/AAD/AQABAAAB/wAB//8AAf//AQAAAAABAQH/AAEAAP8AAAEAAAAA/wEAAP8B/wEBAf8AAv8A////AP4BAAIAAQD/AQAAAP/////+////AQEBAQEA/wABAAABAQD//wAAAAAAAQEAAAABAf//AAABAAAA/////wABAv8AAQAA/wAAAAAA/////gAB//8AAAAAAP8A/wEA/wEAAf8AAAAB/wH/AAH/AAEAAAAB/wD/AAH/Af4B////AQAAAAD//wAAAAABAP/+/wABAf7+Af8AAAAAAgAAAf8AAP4BAAAAAAAAAAABAAD/AQH/AAAA/wAAAAEAAP8B/wAAAQAAAP8AAAD/AP7//wAAAAEAAf8AAgABAgD/AAEBAAABAAECAAICAQAAAAH/AAABAQEAAP8AAAEAAAAAAf8B/wAA/wEA/wEA/wEBAAEA/wD/AQD/AAAAAAAB/wAAAAD//gD//wEAAQABAQH/AAEAAAEAAf//AAEAAP8A/gD+AAH/AQEBAf//AAABAAAAAf7/Af8AAf///wD/AAABAAEBAf//AAIBAAH+AQAAAP4A//7+AAH//wEAAAD///4AAAAA//8AAf8C/wECAf8A/wAB/wD/AAEBAQABAQEBAf8A/wEBAAAAAP8A/wD/AAAAAAEAAAD/AAEAAf8AAAAA//8AAP8AAAAA/wABAAAAAAEAAf8AAQAAAAD/Af/+/v8AAP8AAQAAAAABAAAA/wEB//7/AP8BAAD/AAD/AAD//wD//v8BAP8B//8AAAAAAQD/AAEAAAEAAAABAAD//wD/AAAAAP8AAP8B/wIB/wAAAAD+AP8B//8AAAECAQAA/wAB/wEAAf//AP8AAAD//////wAAAP8BAf8BAAAAAAAAAAAA/wEAAgEA/wAAAAACAQAAAQAA/gD//wAA/wAAAQL/AAIAAv7/AAD///8B/wAAAAD/AAAAAAABAP8AAQEAAAAA/wAA////AP//AP//AAD/////AAAAAQEAAAAB/wEBAP//AAEAAAD/AQAB/wEBAP8A/wAAAAD/AAAAAP//AQAAAAAAAAEBAAEAAAAAAAAAAAAAAAH/AAAAAAH/AP8A/wAAAAABAAEBAAABAAEAAQAAAAAB/wD//wEBAQAC/wABAAAAAAD/AAEAAAAAAAEBAP8BAQEA/wEAAAAA/wEBAAAA/wAAAQD/AAAAAAAAAAD//wAAAAD/AP8AAAH/AP8BAQH/AAH/AP8BAAD/AAAB/wAAAQABAAEAAAABAgAAAf8AAP8AAAAAAAH//wEBAf8AAAD//wABAQAAAAD//////wD/AP4AAAAAAP//Af4AAAEAAJCSlXFyd/f39gAAAQAAAAAAAgAAAD0fAqBa/hwQAAEAAAD/AQAAAQABAP7//wABAP///wAA/wD/AAD+/wD8AgDaCgDcCgD6BP//AAAAAf///wAAAfL8/Xvl7t/8/gAAAgAAAQAAACEjI2xtaAEAAP//AAABAP//AAAAAAAAAAEBAQAAAAEAAQAAAQEB/wEAAAAAAAEBAP4AAAAAAAD+AAEAAAEAAP8BAQIBAP8A/wAAAAEBAAAAAP8AAAEAAAD/AAD/AAAB/wAB/wEAAP8AAAAB/wABAAEAAQAAAQAB/wEAAAD//wEA//8AAAABAP7/AAABAP8AAQEAAAAAAAEBAAD+AAIAAAAAAAAA//8A/wAAAAABAAEBAgH/AP8A/wEAAf8AAAAAAQAAAAEAAP8BAP//AP8BAAEAAAD//wAAAAEAAAAA//8AAAAAAAAB/wAA/wAAAAABAQEBAAACAQAAAAAB/wH//wAAAQAAAAABAAAB/wABAAEAAAH+AAAAAAD///8AAAEBAAAAAf8AAAABAAEA/wD/AQABAAEBAQABAQAAAAAAAQL//wD/AAEAAf8BAAD/AAABAAH//wAAAAAA/wD/AAABAAEAAQH/AAD/AQEBAf//AQAAAAEBAAACAAIAAAIBAAD//wH/AQEAAAH//wEAAP8AAAAAAAEBAAH/AAD///4A/wAAAAAAAAH/AAD//wEBAAAB/gEAAAEAAAAAAAAAAAAA/wAAAAAB//4AAf4AAP/+AP8AAAD/AAEBAAD+////AAD/AQAAAQEAAAAAAf8AAAABAAEA/wD/AP8BAQEAAAAAAQEAAgEAAP///gAAAAIA//8AAP///wAA/wAA//8BAAD/AAEAAQAAAQABAAAAAAAAAP8BAAH/AAAA/wAAAAABAQIAAAEAAP8AAAABAAH/AAD/AAD/AP8AAf8AAf4AAf8BAQAA/wEAAQD/Af8CAAABAv8A/wD/AQABAP//AP8AAf///wAAAv8AAAH//wAAAP8A//8B//8BAAAAAAAA/wAAAQD/AP//AQAAAP8AAQEA/wABAAAA/wABAP//Af8BAAEAAAAAAAABAP8A//8C/wEA/wABAAEB/wD///8AAQAAAP8A/wAAAQAAAQAAAP8AAAD/AAD/AQAAAAEAAAH/AAD/AAABAQAAAQABAP8A/wD/AP8AAgEAAAAAAQAB//8AAAD/AAAB//8BAAAAAAAAAQAAAQAAAP//////AQABAAEAAf8BAAAAAAEBAAAAAAAB/wD//wABAf/+/wD+Av8AAAEBAQACAQAAAQIBAgEAAAABAAABAQD/AP4AAAAAAAABAAD//wAAAQH//wAB/v8A//8BAAEA/wH//wABAQEAAAAA//8A//8AAgD+AP8A/wEAAAH/AAAB//8B/wEA/wAAAAD/AAAAAP4AAQAAAP8AAQEBAAECAAAAAQD//wAAAQH//wEBAQAC/wAAAAD/AQEAAQAAAAABAAABAAAAAAAA//8AAAAAAP8A/wAAAAH/AQAAAQABAQIAAP8BAAAA/wD/AAABAQH/AAABAAD//wABAQIB/wAAAP8AAQAAAP//AgABAQD/AP8AAAAA/wAAAQABAQAAAAH/Af8AAAIAAQAA//8BAAAAAAEAAAAAAAEBAf8AAQD//v8CAAAAAQAA/wEB/wD/AAAA/wD///8B//8AAAABAP8AAAD/Af4A/wAAAf8AAAABAP8AAAD/AQD///8AAAAAAQAAAAH///4A/v8A/wAAAAAB/wAAAQEAAQAB//8A/wAA/wEA/wAA/wAAAQH//wAAAQEB/wEBAAAAAQEAAAL/AAD+/wD//wEAAAAAAAABAP8AAAAAAAEA/wABAAAA/wEBAf8BAAABAAAAAAD/AQEB////AAEAAQAA/wEAAAEA/wAA//8AAgAAAAD/AP8AAAAA/wH//wAAAf8AAAEAAAD+AAD/AQAB/wAAAAABAQEAAAAAAAAAAQAB//8AAAAAAP8AAQABAQH/AQD/AAABAAAAAQEAAAD/AP8BAQABAQAAAAAB/wABAAAAAAD08/N5en55eHv5+PUAAP8AAAAAAAIAAAA7IACZWP0eD/8A/wD///8AAP///wD//wAAAAH//wEAAQAA/wD/AAH//AIB2woB2gwA/gIAAP8B/wD/AP4AAAL+/v+U5/K59P8CAAABAP8AAP8AAQJ0dXEgHyD///8BAQEAAAH//wAAAAEBAAEAAAABAAEBAf8BAAD/AAH/AP8A/wD//wAB/wAAAAAAAgEAAAAAAQAA/gD+AAEBAQEAAAEA/wABAf8BAP///wABAQAAAQD//gABAAAAAAABAAAA/wEA/wAAAf4BAP8A/wH//wD/AAD/AQEAAAAB/wABAAD//v8BAP8AAAAAAAEAAAEBAf8EAAABAAD/AAAB/gD/AQAA/wH///4AAQEA/wEAAQAA/gAAAf/+AAABAP8B/wEBAQAAAAD/AAAAAAH///8BAf/+/wEBAQAAAAABAAD/AAD/AP8AAAAA/wD/AP8BAAAAAAEAAf8AAAD+AQABAAH/AP8BAAAAAQAAAAAAAAIBAP4AAQABAP/+AAAB//8AAAEAAQAAAQAA///+AAEBAAAAAP8AAAH/AAAAAAD/AQAA/gD/Af8B/wH/AAEAAP8AAQABAAAB/gD/AP/+AQACAAD//wEBAAAAAf//AP8B/wH+AAEB//8AAQD/AP8B/wH/AAEAAAAB/wAAAQD///8AAQAB/wD+/wABAQABAAIA//8AAAAAAAEA/wAAAQD//wAAAAEAAAD/AAECAQAA/wEAAQD/AAEBAAAAAAEAAAD//wAAAQABAAAAAAABAP8AAAAAAAAAAAAAAAH9AQABAAABAAD+AAACAAAAAP8BAAD/AAEAAAD//wACAAD/AAD//wABAQABAAAAAP//AAIAAAAB/wEAAAAAAAAA/wD/Af//AAACAAAA//8AAQH/AAAB////AAAAAQEB/wD/AQABAP//AAABAAAA/v4BAQH/AAAAAAAA//8AAf8BAAEA/wD/AAAAAQAAAP8A/wD/AAABAAD/AQEA/wAAAQABAAD//wD+AQABAAEB//8AAAEBAf8A/wL/AP8AAQEB/wAAAQAA/wH/AQACAAH//wABAAAAAAAAAAH//gH/AP4BAf//AAEBAP8BAAAAAAAAAAAAAQAA////AP8BAQIAAf8A/wAAAAAAAQD//wAAAQAAAAAAAAAAAAAA/wEAAf8BAP8A/wEAAQAA/gEBAf8AAAD//wEAAQEB////AAABAAD/AAABAAD/Af4A/wH/Af8BAAAAAQH+AP8CAQAA/wD+AQEC//4AAQIA//8BAAH///8BAQABAAH/AP8AAAAAAAEA/v8AAQACAQH+/wAA/wABAAEA/wAAAQAAAAEAAQABAAAAAAD/AAABAAEAAP//AQEB//8AAf8A/wAAAgH/AAAAAwAA/wEBAAAAAAD/AAEBAgD///8BAP4AAAEAAQEAAP8B/wEAAP//AQEAAf8A/wEAAf8AAAAAAQD/AP8BAAAA/wABAQD/AAABAAEAAAAAAf//AAEA////AQABAQAA/wAAAv8AAf8B/gEBAAD/AAAB/wD/Af8BAAAAAQABAP8AAAAA//8AAAEAAAABAf8A/wAAAAAC/wD+AAACAf7+/gEAAAABAP//////AAAAAP8AAAH//wEAAP8AAQAA/v4BAQH/AAAAAAAAAAAAAQEAAAAAAQD/AAEAAAAB/wH//wAAAAABAf//AgAC/wIAAP8AAAEBAP//AQAAAf8A/wABAP8AAQEA/gD/AAEBAAAB/gD+AgAB/wIAAP////8AAQEBAAAA/wD/AQEAAAAAAAD/AAEAAP///wH//wEBAQD/AgAA/wAAAQD/AAABAP8BAAD//wACAP//AAD//wAAAQAA/wD///8AAAEAAAAAAAAAAf//AAEAAP///wEAAQEA//7/AQEAAAAAAf8B/gAAAQH/AP8AAAEAAQAAAP8CAQH//v8AAAEA/wAAAAEAAQAA//8AAAH/AP8AAP8A/wAAAAD/AQEBAAAA/gEAAP8AAQD+/wEBAQAAAAAAAQEAAAAB/wD/AAAAAAAA/wAB5OPkaWtvtbS0AAD/AAAAAAAAAAD/AAAALhkBpFz+HhH///8BAgAAAAAA//8AAQH/Af8B//8AAAEAAAAAAAEAAPkDAtUNAOAJAP0DAP7//wABAAABAP/////+t+71ke33/QD+AQAC/wAAAAAATU1MW1hX////AQEBAAAA/wD/AgEAAAH/AAAB////AQAA/v8AAQH/Af8A/wAA/wABAf///wEAAAAAAQAA//8AAgAA/gEAAf//AAAB/wAAAQAA/wAA/wAAAQABAAD///8BAAH/AAAAAAEBAAAAAP//AQAAAP8BAAAA/wAAAAD/AQABAAD/AAAA/wABAAAAAgEA/wAAAAEAAP8AAAAA/wAAAf7+//8AAAEA//8A/wAAAQIBAP//AAAAAAD/AQABAAAA/wEAAAAAAAD///8BAQAAAP8AAAIAAf8AAAEA//8AAAABAAD/AQAB/wAA/wAAAQD/Af///gEBAQABAP8AAAD//wEAAQAAAAAAAQEB//4AAAD//wEAAAABAAD/AQAAAP8AAAAAAAEBAAD/AP8AAP8A/wIBAQAAAP//AAD//wABAAEAAQD/AAAA/wABAAD/AAACAP//AAH/AP8BAAEAAf///wABAAAAAAH/AP8BAQD//wABAgD//gABAAAAAQH/AP8AAAD//wACAQH///8AAAEBAP8AAQEAAQAA/wAAAAEAAAABAP7+AAABAQEA/wAA//8AAAEAAQAAAP///wAB/wEBAv/+/wEBAP8BAAH/AP8A/wH/Av8A/wABAAAAAQEA//8AAAAAAAEAAP8AAQEA/wAAAQD//wABAP8AAAD/AAABAQH/AP8AAAAA/wEBAP8AAQH//gACAgD//wD/AAABAP////8AAQEB/wAAAQAAAAAAAAEAAP///wIBAv////8BAAEAAP//AAAAAAABAAAAAAH/Af8BAAEAAP8A/wAAAAD/AQAB/gAAAQD/AAABAAEAAAAAAAAAAP8AAAAAAQEAAAAAAP8AAAD//wEBAQAAAAAAAAAAAP8AAAEAAAAAAP8AAAAA/wEA/wAAA/8A/wD/AAAB/wEAAQAA/wAAAP8AAQH/AAABAAAB/wEAAQAA////AQD/AP8B/wEBAQAAAAD/AP///wABAQABAP//AAH/AAACAAD/AAAA/wABAQD/AAEAAP8A/wAAAQEAAAAA//8AAAEBAP//AAABAgH//wABAAAA////AAEAAAEBAP//AQAB/wD/AAAAAAAAAAAAAQD//wABAgAA/wABAP//AAEBAAD/AAAAAAABAQD///8A/wEAAQABAAAAAQH///4BAQH//wEAAP8A/wAAAQABAQD/AAAA/gAAAQAAAAABAP8AAAH/AAAAAQD//gABAQAAAQABAAAA/wD/AAABAQD///8AAAEA/wABAQAAAAD/AAEBAP8AAAH/Af////8AAAABAAEA/wAAAQAAAQAA/wAA/wEAAf4AAQIB//4AAAH/AAAAAP8AAAAAAAEAAQAA/wAA/wAAAQABAQD+/wAB//8AAAAAAQAAAQEAAAAA////AQIBAP8A/wAAAP///wABAQEBAAAAAQEA//4AAAH/AP8AAQAA/wAAAAEAAP8AAAAAAQAA/wEAAP8AAQAA/wAA/wEAAgD///8BAAEBAAD/AP8AAAAAAAH/Af8B/wD/AAEBAAAAAAAAAAAAAAABAf//AAAA/wEBAf///wEAAAAB/wD/AQAAAAAAAP8AAAEAAAAAAAAAAAAAAAAAAQD//gACAgD//wABAAD/AAAAAAAAAQAAAAAA/wD/AAABAAABAAD/AAAAAAAAAAAAAAEB////Af8B/wH/AQABAAD/AP8AAQEA/wAAAAEBAP//AAAAAAD/AAABAQAA/gABAgD//wABAQEA////AAABAQD+/wAAAAABAAAAAAAAAQEBAP//AAAA/wABAP//AAEBAQAAAAAA/gD/AgAA/wABAf///gEBAgAA/wAAAAAAAAD/AAABAAAAAQAAAAD//wEAAQAB////AQAAAAABAAAAAP//AAEBAAAAAAD/AAEAAP8A/+np6l1dYr28vP8A/wAAAAAAAAAAAAAA/0Yj/pBSAScZ/wH/AAD//wEBAgAA/wAA//8AAgAA/wAAAAD/AAAB///3BQLRDgDlB//9AgAAAAD/AAEAAP/+///8AL/y+GDi8uT8/QAAAQABAAD/AC8zM62qqCIiHwAAAQAA//8AAAEAAAD/AP8BAQIA/////wAAAgAA/gAAAgAA//8AAAAAAAIBAP4AAQEAAAAA/////wAAAQABAAH/Af8A/gAAAQEBAP//AQAAAAAA/wIAAAAAAP8BAP8AAAEAAf8A/wEAAQD//wAAAQD//wACAAAAAQD//wAAAAAAAQAA/wABAP//AQAAAAAAAAEAAAEAAP4A/wH9/v4B/wD/AQABAf8BAAH+AP8A/wABAAD/AAEBAP8AAAAAAAAAAAEAAP8AAAH//wAAAf8BAAIAAf8A/wAAAAH/Af8BAP//AAEBAAAA/wAAAQAA/wAAAP//AAEB//8AAgEA/wD//wACAQD/AAAA/wD/AQECAP/+AAABAAAAAQD//wAAAAAAAAD/AQAB/v8AAQEBAAAA////AgAA/wAB/wAAAQEAAP8AAAAAAAD/AAABAAH/AP8BAAEA//4AAQEAAAEAAP8AAAD/AAABAAAAAAH//wAAAgAA/gAAAf8BAAH//wAAAQAAAAAC////AAD/AAEBAgEA/wAAAP/+AP8CAAEAAP8AAAEAAP//AAEBAP8A/wD/AQAA/wH/AP8BAQEBAAAAAP8AAAD/AAABAQEA/wD//wABAAD/AP8BAQAAAQH+/wABAAAAAP8BAAAAAAD/AP8A/wEBAgAB/wD+AAAA/wEBAAAAAQD/AAAAAAAA//8AAAEBAf///wAAAAABAQD/AAAB/wEAAv///wABAAAAAAAAAP8A/wEAAQAAAQAA/gD/AQAAAP8B/wH+AQEBAAAAAAAAAf8A/gAAAQAA/wABAAAAAQEAAQD//v8BAQAAAAAAAAAAAAD//wEAAQAAAP8AAAAAAAEBAAAAAAAAAQAB//8AAAH///8AAQH///8AAQAB/wAAAQH///8BAQAA/wAAAQAAAAABAAH/AP8BAQD//wAAAAAAAAH/AAABAP8AAAEAAP8AAQEA/wAAAQAA/wAAAP///wEBAP//AQIA/wABAf//AAAAAP8BAAAAAAH/AQD//wACAAAAAQD//gABAQD/AAAAAAABAAH/AP8AAAABAAAAAAAAAAAAAAAA/wAAAP8AAQAAAAEA//8AAQAAAQD//wIA//4AAAABAQL/AP8AAAAB/wAAAQABAAD/AP8AAAAAAAD//wABAQH//wAAAQACAf///wEAAQAA/wAAAAAAAAAAAAAAAAAAAQD//gABAQEAAP8A/wD/Av8A/wEBAAD/AAABAAAAAQD/AAAB/wAAAAAA/wAAAf//AAIAAP8BAAAAAAAAAAEBAf///wAAAP//AAACAAD/AAAAAQEA/wD/AAAB/wAAAQAAAAEAAP8AAQAA/gAAAf8BAAH/AAAAAAD//wABAQAAAQAA////AAAAAAAAAAAAAAEBAAAA/wAAAQEAAP8BAQH+/v8AAQABAQD//gABAgAAAAH///8BAAH/AP8BAAD/AAEBAP//AQAB/wH/AP8BAAAA/wD/AQECAAD+AP8BAAH/AP4AAAAAAAIBAAAAAAD/AP8AAAABAAD/AP8BAAEAAQEA/wAA////AQAA/wABAQAAAAD/AQAB/wD/AAAAAAAA/wAAAQABAAAAAAAB/wAAAgD//wAAAAD/AAAAAAABAP///wEBAQABAAH+AQAB//4AAAIBAf/+/wAAAAEAAP8BAAAAAAEAAP8A/wAAAQD/AQAB/wAAAAABAQD//wAAAQEAAP8BAAD//wAAAQD//wEAAf4B/wIAAP8AAAAAAQAAAP///gECAQH/AP8AAQEA////AAEBAAAAAQD/AAAA/wABAf8A/wAAAAAAAQAA/wEAAP8AAQAA/wEAAf4A/wEAAQAA/wEAAAAAAf8A/wD/AAABAAEAAAD/AAABAAAAAAAAAQAA/wAAAQD//wAAAQDKyMpwcXTJyMcAAAAAAAEAAAAAAAAAAP5bLwCUVv8QBwD/AQEAAP8BAAD/AP8BAQEA/wD/AP///wEAAP8B/wEA6wkB1A0A8AUA/wEA/v4AAAEAAAH//QAA///O9Pte3+7W+/4AAAAA/wEAAAAXGRm1tK8yMjEAAAD/AAAA/wAAAAABAQH/AP8AAAAA/wEBAAAA//8AAgAA/wD/AAAAAAABAQAA/wAAAAEA//8AAgAAAAAA/wEAAAAAAP8AAAAAAQH///8BAQEA/wAAAf8AAAD///8AAAEBAAD/AQAB/wAAAAD/Af4B/wMAAAAAAAD/AP8BAQAB/wAAAAH/AP8AAAAB/wD/AQEAAP//AAAAAQEB//8EAQAAAAL/AAAB//8B/wEAAf8BAf8B/gEAAAD+//8AAQEAAQEB/v7/AAECAf//AQEAAAAC/wEAAf8B/wD+AQAAAf8B/wABAQD/AAAAAAD/AAABAf8B/wEAAAAAAAEC////AAAAAAAA/gAAAAAAAQH/AQAA/wAAAQAAAAAA////AP8BAQEAAAD/Af8BAAEBAAAA//8AAAEBAf///wAB/wD/Af8A/wABAAEAAAAAAQH/AAAAAf8A/wAAAQAB/gAAAv//AAAA/gAAAQAB/wIAAP8AAAEAAP7/AQEA/wAB/wAAAAD/AQAB/wAA/gEAAQEAAf8A///+AAEAAf4AAgEAAAAAAAAAAAD/AAAAAAD///8AAQEBAQAA/wH/AgEA//7+/wEBAAABAQEAAf//AAD/AAAAAAEB//8AAAECAAD///8AAf//AQAA/wEBAAD/AAABAf8AAAIB////AAAAAQAB/wEA////AAAAAQAAAAABAAEAAAD/AAABAQEA////AAAAAAAAAAH+//8BAQAAAAAA/wAAAAECAQAA/wAAAP7/AQAAAf8A/wEAAAH/Af8AAAEAAP8AAQAAAAEB////AAAA/wEAAQD/AP8AAQH/AP8C/wEAAQAAAP//AAEAAQAAAAAAAP8B/wAB/wH/AP8AAAD/AAAAAP8AAQAB////AAIAAf8AAAL/AP4AAAAAAAAA/wABAf///wECAAD/Af8A/gAAAQABAAAAAAAAAQD+/wABAAEAAP8AAgAA/gAAAP4AAAEAAQAAAAH/AAABAQH///////8AAAEBAAAAAAEBAAAAAf8AAAH/AAABAP8AAAEAAAAAAQAAAAEA////AAAAAAABAAD+/wAAAAAAAAEBAQAA/wEBAQD/AP7/AAEAAAABAP//AQD+AAABAAIBAP//AQEA//7//wEBAQAAAAEBAf8A/wAAAAEAAQAB/gAAAgH/AAAA/v4AAQEA////AQAAAQEB////AAEBAAABAP//AQEAAP//AAAAAAEAAf8BAP8AAAEAAQABAAH/AP4AAQEAAP8AAAEA/wEAAQAAAAD/AQAAAAAAAAAA/wD///8AAQAAAAACAQD/AAAAAAAA//8BAAD/AQAAAAEAAP8BAAD/AAEB//8AAAL/AQAC/wD/AP8AAP8AAQABAAD/AP8AAAABAAAAAQD//wABAQH/AP8B/wH/AQEA/wAA////AQEBAAAA////AAEA//8AAP//AQIAAAD/AQAA//8AAQAA/wAAAf8A/wD/AQAB/wH/AAD/AAEA/v8AAQAA/wD/AQEC////AQD//wAAAAABAAAAAQABAAAAAQAB/wH/Af//AAEB/wABAAD+AQAA/wABAgAAAP8AAAEBAQD/AAAAAAEAAAAAAP4BAAEA/gH/AQAAAAAAAAD/AAEBAf8AAAABAAEA/wEAAP//Av8A/wACAAAA//8AAAABAQD/AQAB/wH/AAAA/wABAQH/AAABAv8A/gAAAQAA/wD/AAEAAAD/AP8A/gAAAQEB//8AAAD/Af8B/wD/AQEA/wAAAgAA//8BAQIA/wAAAP8BAAD/AAABAQH+//8BAf8AAQEAAAAAAP8BAQAA/wAAAP//AAD/AAEAAQAAAAH/AAAC/gAAAv///QD+AgACAAABAAAAAAEA////AQABAQAAAAEA//7/AQEBAQEA//8AAQEApqapbm9y7uzqAAABAAD/AAD/AAAAAAD/TSkAkVL+EAYBAAD/Af//AAEA/wAAAf8BAAD///8A/wAAAP//AP4CAOMLAdgMAPYCAP4AAAD+AAECAP4A//7///8Bv/L6Z+Pv3fr9AAABAAEAAAIBAP//enh4MjEyAQD//wAAAgAA/wEAAAAAAP//AAAAAQAAAAEAAP///gEAAv8A/wAAAgEB/wD/AP8BAAD/AQD//wEAAAAB/wD/AQD/AAD/AAEBAP8A/wD/AQAAAP///wABAf8B////AQEB/wAAAAABAQAAAAD/AAAAAQADAAD//wAAAAEBAQABAP///wD/AAAAAAAA//8AAAEAAAD/AAABAQH/AP8AAAAAAgH/////AAH/AQEA/wAAAQAAAP8C/wEA/wIAAAECAQEAAP//AAEBAQEA//8AAAAAAAAAAAH/AAD/AAEAAQAAAP8B/wEA/wAAAP8AAAAAAQH/AP8B/gAA/wEAAAAAAAAAAP8AAAAAAAAAAQEAAAAAAf8A//8AAP//AAAAAAAAAQECAAAAAAABAQAA/wAA/wABAAAAAAEAAP8AAQAA/wAAAP8BAAAB/wEAAAH/AAD/AQD///8AAAH/AP8B/wL/AAABAP8AAAEBAAEBAAD//wEAAAAAAAEBAQAAAQD//wEAAAAAAQAAAAD/AP//AP//Af8AAAEAAgH+AQAAAQAAAQAA/wABAf//AAAAAAAAAAABAAD//wAAAAAAAAD/AAECAQABAgD////+AP8AAf7+AP8AAgH/AAAAAAH//v8A/gEAAAACAAABAAEA/wAAAAAA/wEBAQH//wEAAAAAAP4A/wEAAAAAAAH/AAAAAQAAAP//AP///wAA/wAA/wABAP8BAAEAAAAAAQH/AQAAAAEAAAAA/wH//wAAAAD//gEAAQABAAAAAAD/AP//AQEAAAEAAAEBAAAAAQAAAAABAAABAAEBAAAAAAD/AP8AAf8B/wEAAAAAAP8BAQH//wAA/wD/AAECAAEB/wAAAAABAAEBAQD/AQAB//8BAAABAAAAAQABAf//AQABAQEBAQAAAgIC/wABAAH//wAA//7/AAABAQAA/wEAAP8A//8AAQEAAQH//wD/Af//AAEAAAEB/wEAAAD/AAEAAP8AAf/+/wABAQACAQEAAAAAAP//AAAAAAAAAAD/Af//AAAAAAAA/wAAAP8AAP8AAAEBAAABAAL//gAAAQAAAQEAAQH/AAAA/wH/AAD/AQEBAAEAAAAA/wAAAf8AAQABAf///wAAAAH/AAEBAQEAAAAAAP7//wD/AAAAAP/+AAAA/wP/AAAAAAAAAAEBAAAAAAAAAP8AAf//AP//AQD+AAD+/wAAAAAAAQAB//8B/wD/AP//AAABAP8A/wAA/gD/AP8BAQABAQABAP8AAAEAAAAAAgEAAP8AAAAAAQAAAAEAAAEAAQAAAP8B/wD/AP4BAAEAAQEA/wEBAAABAP8BAQACAP8BAP8A/wEA/wD/AAD//wD/AQD/AAEBAQABAAABAf//AQAB/wEBAP7/AQEAAAD/Af8BAAIAAQD/AAIAAAEAAAAAAP///wAAAQAAAAEBAQAAAP//AAAAAAD/AAEAAP4A/wH/AAAAAAEAAf8A/wD/AAH/AgH/AAAAAP8A/wAAAAD+/gEAAAABAAAAAQAA/wD/Af8A/wABAAABAAH/AQAAAAH//wH/AAEAAQABAQL/AP8AAAAAAAD//wAAAQAAAQD/AAD/AAEBAAABAAEBAP//AAAAAAEAAQH/AAAAAf8BAQEAAAH/AQABAf4AAQABAP8A/wAAAAH/AAAAAQAA/wH/AQEAAAH//wAAAAD///7//wEB//8B/wD/AAAAAQD//wABAAAAAAAAAAEA/wAAAAAAAAEBAAD/AAH/AAD/AQAAAQD/AP///wAAAAD+AQAA/wAAAAEAAQAAAAAAAP8BAAAB//8BAP8AAAAAAAAAAAD/AP8AAQD/AP///wIB//8BAQIAAQEBAAD/AAAB/wH//wL/AAAB/wAAAAH//wEBAP8AAP4AAAEB/5aWmWVmaO7s6gAA/wAA/wAAAAAAAQMAAHE7Aatf/hMLAf8C/wACAAABAP8AAAAAAQAB////Af8AAQEB/wH7AwLaDQHUDAD1AgD+AQAA/wD/AAD//////wD/AMn0+mvh8d34/QAB/wAAAAD/AAD+/WRlZWVmYQEBAAAAAAEAAP8AAP8AAQAAAAABAQEAAQAAAQD/AAABAQIAAf8BAAEAAAD//wAAAP4B/wABAf8BAAABAAD//wH/AP8AAP8AAQD//wAAAAH/AAABAQAAAAAB//8A/wEBAP8BAAEBAAAA//8A/wABAP8AAAD///8AAQAAAAH/AAD///8AAAAAAQAAAQABAQECAP8AAAAAAf8A//8AAAAAAAAAAQH+/v4AAAAAAAH/Af8B/wAAAf8A/wH///8AAgEBAAH/AAABAP///wABAAABAAD+AAAAAAEAAf8B/gEAAf8AAAEAAAAAAAAB//8AAQAAAAH/AP8B/wD+AQEAAP4BAAAA/wEAAgAAAAD//wAAAP8BAAAAAQEA/wAAAAD/AAAAAAAAAAABAQD///8BAAD//wABAgD+AAAB/wABAAEBAAD+AAABAAAA/wAAAAAAAf8AAAH/AP8B/wAAAAEAAP8AAQD/AAAAAAAB/wD/AQEAAAABAAD///8BAQEAAAAAAQAA/wD/AQAA/wABAAAA/wD/AAABAQAAAAAAAP//AAEBAAAAAAD/AAAAAP8BAQD+/wEBAAAAAP8AAAAB/wEAAQAAAP//AAAAAQAA/wABAAD/AP8AAAIAAP8AAAAB/wD/AgIA/v8AAQAAAQABAP8A/wEAAP8AAAEAAP8AAAEAAP8AAAAAAAEAAAD//wABAP//AQEB//8AAQAAAP//AAEBAP8AAAD/AAEBAAEA/wD/AP8BAQD/AAEA//8AAAAAAQEB//8AAQAAAAAAAAEA///+AQACAP///wEBAQAAAAD///8AAAIBAQD/AAAB////AQACAAD//wH/AQABAP8AAAH/AP8A/wAAAQEAAAABAAAAAAAA//8AAQAAAAH/AAABAAAA////AQAB/wD/AQABAAEAAAAA/wD/AP8AAAAAAQEBAAD/AAABAAEAAP7/AAEBAAAA/wD/AQABAAD/AP4B/wEAAQEA/wAAAQAAAAAAAAAAAQD//gABAQD/Af8B/wIAAP//Af8B/wEAAQAA////AAABAQD//wEA/wAAAQACAAD/AAD/AAAAAP8AAAH///8CAgEA/wABAAD//wAAAP8AAgEA/wD/AP8AAAABAAAA/wH/Af8B/wH/AQABAAAAAAAB/wD/AQAAAAAAAAD//wABAf8AAAD//wEAAQAAAP//AAAC/wEAAQAAAAAAAAEAAf8A/wAAAAAAAAAAAAEAAP4AAAEAAAD/AP8B/wEAAf8AAAEAAAAAAAAAAAAAAAD/AAAA/wECAP//AQEAAP8AAAAAAAH/Af8B//8AAAD/AAEBAAH/AP8BAAAA/wD/AQABAAEAAf8A/wD+AAABAAABAAEAAP8AAAAAAAH/AP8BAAH/AP8BAAAAAAAAAQAAAAD//wAAAAABAAAAAQAA/wEAAP8AAQD//wEAAP8A/wABAgAA/wAAAAD/AAACAQH+/wAAAAAAAP8AAQAAAAEB/wD///8AAQABAAEAAP8AAAAAAQAA/wEAAP8AAAEAAP8AAAH///8BAQD/AAEAAQABAP8A/wAAAAH/AP8BAQABAAAA/wAAAAD+AQEBAAAA////AAAAAAEAAP8BAAD/AAABAQEAAAAB////AAAAAAEAAf///wABAAAA/wAAAQEAAQD///8AAP8BAQEBAAH+//8CAAD+AAEBAQD//wABAQAA////AP8AAAEBAAAAAQD/AAEB/wAAAAAB//8AAQH/AAAAAAAAAAAAAf4AAAIB/wD/AAABAQD/AAD//wACAf//AAAAAAAA/wAAAQAA/wEAAQAAAP8A/wAAAQEA/wAAAf8A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//8BAQD/AQEA/wAAAP8AAAAAAAEB////AAAAAQAAAAEB////AQEB//8AAAAAAQAAAAH/AP//AAABAAAAAQAA/wH//wABAQAAAP8AAf7+/gAAAAEAAP4AAQEBAP8A/wH/AAAAAAAAAP//AQEB/wAAAQAB///+/wEAAQEBAP8A/wAAAQAA/wABAQD/AAABAP//AAAAAQH//wACAP//AAEAAP8A/wD/AQEBAf///wACAAH+AAABAAAAAAAAAP8BAAH/AP8AAAD/AAEBAf///wAAAAEAAAABAAAAAAAAAAAAAAAB//8AAAD+AQAAAAAC/wH/AQAAAP7//wEB/wEAAv4A/wIAAP///wEBAf//AQEAAAAB/wAAAP//AAABAAEAAP8AAAEAAQAAAAABAP///wD//wABAgD//wEAAQAB/wAAAAD/AP8BAAEAAP//AAEBAf///wEAAQAAAAEB//8AAf//AAEA//8AAQEA/wAAAf8B/wEAAAAAAP//AQEA//8BAAH/Af8AAAEBAAAA/wAAAP//AAEBAAEAAf4A/wEAAf///gEBAQABAQH/AP4A/wEAAf8AAAEAAAD//wACAP//AAAAAAEAAAAAAAAAAP8AAAEAAQAB///+AQAA/wEA//8AAQEAAAACAQD///8AAQAAAP8AAAIAAP8A/wEAAf///wEBAAD/AP8CAQD+/wEAAf8B/wEAAP//AQEAAAABAAAAAQD//f8BAQEAAP8BAAD/AQAA/wEAAQD/AAAB////AAEAAf8BAAAAAAAA/wEAAf8AAAH/AAABAAAA//8AAAAAAQEAAQAA////AAABAAH//v8BAQAAAAEAAQD/AP8B/wEAAAAAAAAAAP8AAAEAAgAA//8AAAH//wAAAAAAAf8BAAAA/wAAAAAAAQEA/wABAQD///8AAQEAAAAB////AAABAAH/AAAAAAAAAf8AAAAA/wAAAQIBAP7/AQAAAAAA/gEAAQAAAAD//wAAAP8BAAAAAAEAAf7//wIBAf///wABAQD/AAEBAAD//wAAAQEBAP4AAAH/AAABAAAAAAAAAAAAAQAA/wAA/wABAP//AAEAAgAAAAEA//4BAQEAAAD//gAAAQAAAP//AAABAAEAAAH/AAABAP8AAP8BAAAAAAH/AAAAAAEB//7/AQH/AAAAAAABAAAAAP8AAQEAAAAA//8AAAEBAAD/AP8BAAH/AQEAAP4AAAEB////AAH/Af8CAAH//wAAAAAA/wAAAAD/Af8BAAEAAAAAAP8A/wEAAQEAAP/+AAEDAf///gAAAQAA/wABAgD//v8AAQEAAP8AAAEAAAD/AAABAf///wACAAD/AAIAAP8AAP8AAQAAAAAAAAEA/wD/AP4BAAEAAAEBAAAAAP//AAEAAP8A//8AAQEAAAEAAf8AAAD//wABAAEAAAAAAP//AAICAP7/AAEB/wAAAgD///8AAAEAAf8AAAEA/wD/AQEB/v8AAQABAQAA/wD//v8AAQEAAgAA/wAAAQD/AAAB////AAEBAAEAAf8BAAD//wAAAQAA/wEAAP8AAQAAAAEA//8AAAAAAAAA/wAAAf8A/wEAAf8AAAEAAQABAAD//wABAf///wEAAAD/AQAB/wAAAAAAAAABAQEAAAD///8BAAAA/wH/Av8A/wABAAD/AAEBAf///wAAAQAB/wAAAQEAAP7//wEBAQAA/wAAAQD/AAABAP//AAEBAAEAAP//AAAAAP8A/wEBAQD/AAABAAD/AP8BAAH/AP8AANPU1F1cYNPS0AAAAQAAAAAA/wAAAgAA/xgNAKRa/EMlAgD//gAAAP8BAAD/AQAAAAAA//8AAQAAAAAAAAHwBgHYDADpBQD9AgABAgD//wAAAQD//wAAAv/+/wH+AcHy+2fj79n3/AAAAAABAAAA/wD/ASIlJrGvqisqKwEBAf8AAP8A/wD/AAEAAQABAP8A/wH/AAABAAD/AP8AAAEAAQAA/wAAAAAAAAAAAAAAAAAAAAAA/wABAgAAAAAA///+AAABAAEAAAABAf///wEAAAAAAAEBAf///wAAAAAAAAAAAAABAQAA/wD/AAAA//8AAQEAAAABAf8AAAH/AAAAAAAB////AQEBAAD/AP8AAAD//wECAAD/AAAAAAAAAAABAAAAAAL//wD//wD/AAEAAP//AP8A/wEBAAD/AAEAAAACAf8AAAAAAQAB/wAAAQEAAQD/AAEAAAEBAAAAAAL//wEAAAAA/gEBAAABAP8AAQD//wABAQD/AAEB/wEBAQAAAP4AAQAA/wAAAQAAAAAAAP//AAAA//8AAAAAAAAAAQD///8BAQABAQD/AAAA/wEAAP8A/wAA/wAA/gAA/wD/AAAAAAAA/wH///8AAP8BAQEAAAEAAP8CAAD/AAAAAQH/AAABAP//AQD/AAAAAAAAAQABAAD/AAEBAAAAAAAA//8A/wAA/wAAAAEBAP8BAQH+AP8A/wD/AAAAAAEAAAD//wABAQD/AP8BAQD/Af8AAf//AAAA//8BAf//AQAAAf/+AQAAAAABAAH/AAD//wEBAQH/AQABAQL/Af8CAQAAAP8AAAEAAAABAQD//wD///8A/wD///8BAQIBAQAA/wD///8A/wAAAAAA//8AAAABAQAA/wAAAAAAAAAAAAAAAAH/AAH//wD//////wAAAf8BAAIBAQIBAQH/AQEA/wAAAAABAAAA/wEBAP8AAP8BAAEAAf8CAQD/AAEAAQEA/v8AAQAAAf8BAAAAAAABAQAAAQAAAAAAAf8AAAIA/wAAAAAB/wEAAf8AAAEAAAAAAf8AAAEBAQEAAP8BAP8AAP8BAAD/AP8CAP8AAf8BAP8AAAEBAAEAAP7/AP8AAAEBAf8AAAAAAQIAAAEAAAEAAP//AQAAAAAA//8AAAEAAAEAAAH/AP//AQAAAAAAAQEAAAH/AP8BAAABAAAAAAEA/wAA/wEA/wAAAAEB/wAAAf///wAAAAAA/gAA/wABAAD/AAAAAAAA/wEBAQD+//8B/wAAAP8AAAD///8AAAAAAQEAAQEBAQABAAH///8CAQEAAAABAQEB/wABAQD/AQAAAQEAAQD//wAAAP8AAP8AAAAAAQAAAAAAAP4AAAAAAAEA/wEBAQL/AAD/AP//AAAB/v////8BAQEBAAAA/wABAf8CAQAAAP//AQD/AAD/AAABAAAA/wD/AQAAAAD//wEAAAD/AQAAAgAAAAEBAAABAP8AAf4BAAABAQAA/wAA/wAA/wEAAf//AP8A////AAAAAAD/Af8C/wABAQEAAQD/AAAAAAH/AQABAAEAAAD//wAAAQIAAAD/AAAAAQH///8AAAIAAAAAAAEA/wD/AAEBAAD/AAEAAAEAAAEAAAAAAf8BAQAA/wEBAAEA/wAAAAAAAAABAP8AAAAAAQAAAAACAAACAQD//wAA/wEBAQD//wABAAIBAAAAAAEAAQAAAP8AAQABAAH/AAEAAAABAQD+AAAAAAD//wD///8AAQABAAABAP8BAP8AAAD/AP0AAQABAAEA/wAA/wAA/wEAAAH///8AAAAAAAAAAf8BAQABAQAAAP//AAAAAAABAQEAAP8BAQD/AQEBAQAA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AAEAQEJCm5mXIyMjAQD//wAAAAAAAP8BAAH/AP8BAAH/AP8BAAEAAP//AAEA//8AAAD/AAABAAABAQAAAAD/AQAAAAEA//8AAAEA//8BAAEAAP//AQAB/wD/AQEBAAD/AAABAP//AAEBAf///gEBAf8A/wD/AQAAAAEAAP8AAAAB/wEAAf8A/wH/Af8BAAEA//8AAQD/AAD/AAABAAAAAAEBAAAAAAAAAP7/AQEB/gEAAf8AAAD//wEBAf7+/v8AAAEBAP//AAIAAP8AAAAAAAD/AAABAAEBAf///wAAAAABAAD/AP8AAAEAAAAAAAAAAAD/AAABAAAAAQH///8BAAABAAD+AQACAAD//v8AAQEAAP//AAEBAP8AAAAA/wD/AAIBAf//AAEBAf8A/wAAAAAA////AQEB/wAAAf////8AAQEBAAD//wABAQEAAAEAAP8AAAAAAAEAAP//AP8AAAEBAP/+AAECAAD//wABAQAA/wAAAP8A/wAAAQD/AAEAAP8AAAEBAP//AQEBAAAA//8AAQEA/wD/AP8AAAAAAgEA//4AAAEB/wEAAP8AAAD/AgAB//8A/wIAAv8A/gEAAv8A/wAAAAAAAQEA//8AAAEB//7/AAEAAQEAAAAAAAAA/wAAAAAAAQAA/wEAAv4A/wEAAAEA//8AAf4A/wIAAf8A/wEAAAD/AP8BAAIBAf//////AAABAQD//wABAAH/AAABAAD/AAAAAAABAQAA//8AAQEA//8AAQEA/wD/AP8CAAD+AAABAAIAAv8A/wAAAAAA//8AAAAAAAH/AP8BAAAAAQD/AAEB/wD/Af8CAAH//wAAAQAA/wABAAD/AQAA/wD/AP8AAQABAAH/AP8A/gIBAf8AAP8AAQD//wAAAAAAAAEBAQD//wABAP//AAABAAAAAAAAAAEBAQD/AAD/AAAAAP8BAAIAAP8A////AAEAAP8BAQEAAAABAP//AP8AAAIAAAAA/wAAAQEBAP7/AAABAAEAAf8A/wD+AAEB//8AAAAAAQEAAAAAAAAAAP8B/wD/AAD/AAIBAf8AAAABAAAA/wEAAf//AAAA/wABAf/+AAABAAAAAQEA/wAA//8AAAEAAQAA////Af8BAAEA/wEAAAEAAP8BAQD/////AAEBAQEA//8BAP//AQD/AAEAAP8A/wEBAQAAAAABAAD/AAAAAP8AAAEBAf///gEAAQD/AAEAAP8A/wABAQAAAP8AAQEAAAAA/wAAAAAAAAAAAAAAAAAAAQAAAAAA//8A/wAAAQAAAP8AAAIBAAAAAAD/AAAAAf8AAAEA/wAAAQAA/gAAAQAAAAAA/wABAf//AQD/AAEB/wAAAP//AQEBAP8A/wEAAQAB/wD/AQAAAP8A/wEBAAD+AAABAf8AAAEAAP8A/gAAAQAA/wEBAf/+/wABAgAAAAEA/wAB/wD/AQAAAAAAAP//AAEBAf8A/wH/AAABAf8A/gEAAgAAAAABAAAAAAEA//8AAP//AAABAAD/Af8A/wEAAAD/AAACAAH/Af///wACAAH/AQAAAP8B/wD/AAEAAP8AAQAAAAEA//8A/wEBAv8A/wH/AQAA/wABAAD/AQAA/wAAAAAAAQAB/wEAAf///wAAAAAAAQAB/wD/AAAA//8AAgAA/wEAAQAAAAAA/wD/AQABAAAB/wD/AQAA//8BAAD/AAAAAQIB////AQAB/wD+AAEBAP8B/wEAAv8AAAAA/wEAAP8AAP//AAIAAf8A/wAAAQEAAP8A/wABAAD/AAEBAf8AAP///wEBAAD/Af8A/wEAAAABAQAAAAAA/////wEAAgEBAAD///8AAAABAQD//wABAAEAAf7+AAEBAAABAAD//wEAAP8BAAAAAQD/AAABAAAAAP///+rp6XJxdqeopwAAAAAAAAAAAAAAAAAAAAYEAG46/n5IAA0G/wAAAAAA//8AAAAAAAD/Af8A/wH+AQDsBwHaCwDrBP/+AQEBAgD//wAAAAAAAgAAAf8AAAH+APv+ALrw+H7m9dD2+v8A//8BAQAAAAD/AAAAAU5SUpiWkhgXFwD/AAAB/wAAAAD/AAABAAD/AQAB//8AAAH/AAABAAH/AP8BAQAA/wD/AAAAAAAAAf///wABAQABAAEA/wD/AP8AAAH/AP8CAQEA/wD/AAABAQAA/wD+AQABAAABAAD//wAAAAAAAP8AAAEAAAABAAAAAAAAAAAAAAEAAP//AAABAQD//wAAAAAAAAAAAQEAAP8AAAAAAAAB/wD/AQAAAAAA//8AAQEB/wAAAQD//wAAAQH+/f0AAQD/AAAAAAABAAIBAP//AAAAAAEAAP8AAQAB/wD/AP8BAAH/Af8AAAAA/wH/AP8B/wH/AQABAAAAAP8A/wEAAQD/AAABAAABAAD/AAH///4BAQH/AP8B/wL/Af4B//8BAAD/AQL/AAABAAAAAAD/Af8B/wEAAP//AAAA/wEAAf8AAAEAAAAAAAEB/wAAAf4A/wEAAf8A/wAAAQH/AP8BAQH///8BAAEAAP8AAAH//wAAAf8BAAEA/wD///8BAgD/AAAB/wAAAQEAAAD/AAAB////AQABAAAAAAEB////AQEAAAAAAQD//v8AAQAB/wEAAf8AAAEAAAD/AAAAAAABAP//AAABAAAAAAEA//8AAQEBAQD+//8AAQEA/wAAAP8BAAEA////AQEBAAAAAAAAAAAAAAAAAQAA//8AAAAAAAD/AAEBAP8A/wAAAQAA/wH/AAABAQD+//8CAAD/AP8BAQIAAP///wEBAP8AAQAA/wD/AAABAAD/AAABAAH///4AAgEBAP//AAEAAAAAAAEBAP8AAAH/Af8B/gEAAP//AAABAQEAAP8AAAAAAAD/AAEBAf4A/wH//wABAQAAAAAAAAD//wEAAgAC/wD/AAD/AP8BAAAAAAAA/wH/Af8B/wD/AQECAAH+AP4BAAH/AAABAAD/AP//AAACAQEA/wD///8AAQEAAAEBAAAAAP4A/wAAAQD/AQAB/gEAAAAAAf8AAAEAAAAAAAAAAP8AAAAAAQH//gABAgAAAP8A/wH/AP8A/wEBAf8AAAH/Af8A/wEBAAAAAAD/AAAB/wEAAQAAAP//AAAA//8BAQEAAQD//wAA//8BAQH///8AAQAB/wABAQH+AAAAAAABAAD///8BAQEAAP8AAQD/AAAB/gAAAQAA/wEAAQAAAQAA/wD/AAABAAAAAQAA/gAAAQAAAP//AQEB/wAAAP8AAAIAAP8AAAAAAAD/AAABAAABAQH+/wABAAAA//8AAQAAAAD/AAEA//8CAAAAAQD/AAEAAAAAAQAA/v//Af8BAAIAAAD/AAABAP8AAP8A/wEAAf//AAEBAQAA/wEAAQAA/wAAAP8AAQD//wABAAAAAAD/AAEBAf8A/wAAAAEAAAAAAAAAAAAAAQD//v8BAgD/AAAB/wD/AQAA//8AAQEB/wD/AAEBAP///wABAgH///8BAAAAAAD/AAAAAAAAAAEBAAD/AAABAP8AAAAAAAD/AAEBAP8AAQH/AAACAP///wAAAAEAAAAAAAD/AP//AAABAAEAAf8B/wD//wABAQHmseYKAAEAAElEQVT/AAAAAAABAP8AAAAAAAH/AP8B/wH/Af8AAAAAAAABAQAA/wAAAQAA/wAAAAAAAAAAAQAA/wAAAAD/AQEAAP4B/wH/AP8B/wH/AgAAAAEB/v8AAQAAAAEAAQD///8AAAABAQD//wABAAEAAP//AAABAQEAAP8A/wAAAAD/AQEAAP8BAAAAAAABAAH/AAAAAAAB/wD/AAAAAP8BAAD/AAAAAAAAAQEA//8AAAH/Af4B/wIAAQAAAP8A/wABAQD+AAAB/wAAAQABAAD/AAEAAAABAAD///8B/wAAAQAAAQD//wEBAf/+AAEBAAAAAAAAAAAAAAABAAD/AP8AAAAAAAEAAP8AAAHOzM5qa27KysoAAP8AAAAAAP4AAQMA//4XDACKTwJdMv0B/v4AAgAA/wD/AAH///8AAQABAAIA7wQA3AkB5AcA/QL//wABAAAAAQEA/wD/AAEBAAAAAAH//wDr+f6L5vWc7/fw/vwBAAH//wAA/wEAAAAGBwdub29+fXoMCwz/AQAAAP8BAAEAAAAAAP8AAAH/AP8B/gH/Af4BAAH/AAACAQD/AAAAAAAA/wD/AAAAAAEAAQABAP///wEBAP//AP8BAAIAAAAAAP//AAABAAAAAQEA//8AAAEA//8AAf8BAQH/AAAAAAAAAAAA/wABAQD/AAEA////AQACAAD//wEAAP8AAQAAAAEA/wAAAf8AAAH/AAACAAD//wAAAP8BAQD/AAH/AAAB/wD/AQAB//8AAQEB/v/+AAD///8BAf8A/wEAAQEBAP//AAAAAAEAAP8AAAAAAAAAAAEAAP8A/wAAAQAAAP8A/wH/AAABAAEAAf4AAAH/AP8BAAEAAAEB//8AAQD/AAD//wABAAAAAAD/AQABAAAAAP//AAIB//7/AQEA/wAAAf8BAAL///8BAQD//wABAQAA////AQEBAAAAAP8A/wEAAP8AAQEA//8AAQD/AAEA/wABAf///wEAAf8AAAACAAH/AAD///8AAQEB//8AAAIAAv8A//8AAAIA/v8AAgD//wAAAAAAAQACAAD///8AAQIA//8AAQD+//8CAAEAAAD/Af8A/gEAAgAA//8AAAABAAD/AAEBAAABAQAA//8AAQH/AAAAAAAA/wD/AQAB/wAAAAABAAD/AP8AAQEB/wD/AQEAAP8AAAD//wABAQD/AAAA/wABAQAAAAD/AQEB//8AAP///wEBAAD/AP8AAAEAAAAAAf8BAAEAAAD/AAAB////AQAAAAEA//8BAQH//wAAAAAAAAABAAD/AAABAAH/Af8A/wABAQAAAAAAAAD//wAAAQAB/wD/AAABAQAA////AQAA/wAAAgEA/v8AAQEAAAAAAAAB/wD/Af8B/wEAAQD/AAAA//8AAQEA/wD/AQAC//8AAQAA/wAAAAL+AP8CAf//AAIB//8AAQD///8AAAEAAAABAP8AAQEAAAAAAQAA/v8AAQH/AAAAAAAB/wD/Af8A/wEBAP//AAEBAAD/AAABAQEBAP///wAAAP//AAEAAAAAAQAA/wAAAQAA//8AAQABAAH/AP8BAAH/AAABAAD/AAAB/wD/AQABAAD/AAABAAD/AP8BAAEA////AQEAAAAC////AQAA/wEAAP8AAQEAAAD/AAAAAAABAAAAAAD/AAABAAEBAf/+AAEB//8AAP8AAQEA/v//AQECAAH/AP8AAAAAAAAB/wD/AAEAAP//AAACAQEA//8AAAD/AQABAAAAAAD/AAAA/wAAAf8AAAEA/wAAAQEBAP//Af8B/wH//wAAAQAA/wABAQEA//8AAQEAAP8AAQD/AAEA//8BAAD//wABAQAAAAD//wD/AQECAf8A/wD/AAEBAP8AAAD/AAAAAAABAAD/AAABAAAAAAAAAAD//wEBAf8AAAEA////AAD/AAEBAf7/AAIC//8AAQEAAP8AAP//AAEAAAAAAAAA//8AAQEAAAEB////AQAAAAEBAAD/AAABAAAAAP4AAAH/AAH/AP8BAAAAAAAAAAAB////AAEBAQD/AAAAAAEAAP8A/wEBAf4A/wH/Af8AAAEBAAAAAAH/AP8BAAAAAAD/AAAAAAABAAD/AAABAAAAAAAAAAD/AAAAAAABAAD/AAAA/wH/AQAAAAABAP8AAAAAAAAAAAABAAD//wAAAQAAAQEB/////wAAAQAAAAEAAP8AAQAA/wAAAAAAAQAB/v//AQEBAAEAAQD//gAAAgAB/gAAAf8AAQD//wEBAAAAAAAAAAAAAAAAAP8AAAEAAP8AAAH/AAD/AAABAAAAAP8BAAH//wABAQD/AAAAAP8AAQEBAP8A/wD/AAEBAAD/AQAB//////8AAgIB/wAAAAAAAAD/AAAAAP8AAAABAQD/AAEB/wAAAf8A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AP8AAAEBAAAAAAEAAAAAAAAAAQAA/wAA/wABAQD/AP8AAAAAAQEBAAH/AAAAAAAAAQABAf79/gABAAAAAAEAAP8AAP8BAAH/AAEAAf8B/wD/AAAA//8AAQIAAP8BAAD/AAAAAAAAAP8AAAEBAP///wEAAf//AAEBAAD//wABAf8AAAEBAQD//wAAAAAAAQEA//8AAAAAAP///wEBAQD/AAABAP8AAAIA//4AAQEAAQAA/wABAP//AAEAAP8AAAEAAAAAAAAAAAAAAP8AAAEAAAAAAP8AAAH//wABAAD/AAABAAAAAQD//gABAQD/AgAA/wAA/wABAAAAAAD/AgABAAAA/wD/AP8A/wABAQAA/wAAAAEAAAABAQD/AAAAAP8AAAEAAf///gEBAf8A/wEAAP///wEBAv///wAAAAEBAQAA/wAAAAAAAAEAAf7//gAAAQECAf//AAAA/wEAAQD/Af8B/wEAAAAAAAD///8CAAEAAAD///8BAQH/AQAA/wEAAP8AAQAAAAAAAQAA/v8AAAAAAAH/AQAB/gD/AQAAAAABAP8AAQEAAAAA/wAA/wAAAf//AQEA/gABAf//AAEAAP8AAP8BAAH/AAAAAAEBAAEBAP//AAAAAP8AAQD/AAAB/wEAAP//AQABAAAA/wD/AAEBAAAAAQD/AP8B/wAAAAEBAQD+/wEBAf8A////AAEBAP8AAAH/AP8BAAH/AAABAf8A/gEAAf8A/wAAAQEAAQABAP//AAD//wEBAP8BAQD+/wEBAQAAAP8AAf8A/wEA/wD/AQEBAP8A/wEAAf8A/wEAAP8AAAAAAAEAAAABAf//AAEBAP///wEAAAD/AAABAQD//wABAf8A/wEAAP8AAAAAAQD/AAAAAAH///8BAQEA/wAAAf4BAAEA/wAAAQEAAP8A/wEAAAAAAf8AAQEA//8AAQIA//7/AQAA/gEBAf8AAAEAAAAAAP8BAAD/AAH///8BAQEAAP8A/wEAAQAAAAAAAAAAAP8B/wD/AQEAAAD/AP8B/wEAAP//AQEBAAAAAAAAAAAAAAAAAAAAAAAAAQAA/wD/AAABAQAB/wAAAAAAAQD//wABAAAAAAD/AAAAAAAAAP8AAQEAAAAB/wH/AAAAAQABAAD///8AAAAAAQAA/wEBAf8A/wD/AQEB////AP8AAAEBAAAAAAD/AAEBAf8A/wAAAQD/AAABAAD//wABAQAA/gAAAQAAAAAAAAAAAAAAAf///gAAAgAAAAEA////AAEBAAABAQD+/wABAQAA/wABAQAA/wD/AAEAAP8AAP8BAQH//wAAAf8A/wABAAH+Af8BAAAAAAEA/wEBAP8AAf8AAAH//wAAAP8BAQH//wAAAAAAAQABAAD+AP8C/wD/AAABAQAA/wD/AAIBAAD/AAAAAP4AAAEBAf///wIAAP8AAQAA/wAAAAEAAP8AAAAAAAABAQAAAP8A/wH/AAEAAf8A/gABAgD//wABAQD//wAAAAAAAP8AAAEAAQAA/wAAAQAA/wAAAAABAQAA/wD/AQAA/wABAf8AAAEAAAD//wEAAQAAAP8BAAEAAP8A////AAIBAQAA////AAABAQD/AAAA/wEBAf8AAP8AAAD/AAEB/wEAAf///wAAAAEBAP8AAQAAAAEAAAD/AP8AAAEBAP8A////AAIA//8AAgAAAAEAAP8A//X19oKChJOVlvj29gAA/wAAAAAA/wAAAQAAAEwp/5ZW/x0TAAD8//8BAAD/AP/4AQDuAwHfBgDpBgH9AgD/AgD/AgAAAf8AAAEAAf7//wL/AAABAQD+APv/A73x+nrl88/4+wH/AP8CAAD/AAAA/wD/AAAAAFZZWoyKiB0cGwD///8AAAABAAAAAAAAAAAAAQEAAP///wAAAAAAAAABAQD/AAAAAAAB/wAAAAAAAAAAAP//AAEAAAAAAQABAP///wEAAAEAAP//AAABAP8BAAEAAf4A/wIAAAAAAAD/AQAB/wAAAAAAAf///wEBAP//AQAB/wEAAQAA///+AAABAAEBAP7//wMBAf8AAQD/////AQAB/wEBAQAAAAH///8A/wABAgD//wAAAQEAAP8AAAABAAAAAAD/AAD/AAABAAH9/v4AAAABAAAAAAEAAP8AAAAAAAEAAP4AAQH//wABAf8A/wEAAAD/AAACAP//AQEA/wAAAAD/AAEA//4BAQAAAAEAAAAAAP8AAAEBAQH/AP8A/wD/AAABAAAAAAEA//8AAQD/AP8BAAEBAQD+/wABAAD/AAAAAAAAAf8A/wABAAAA/wEAAQAA/wD/AQAA////AQABAAEA//8BAgIA/wD/AAAAAP8AAAABAAAAAAEAAP4AAAAAAAL/AP4AAAEAAAAB/wAAAP//AQEAAAD/AP8B/gAAAQAAAAEBAQD//v8AAQEAAP8BAQD//wAAAQAAAAABAAD/AAAA/wEAAAAAAP8BAQEA//8AAAAAAQH/AAAAAAACAAD/AAABAP//AQAA/gH/AP8AAQABAAAA/wH/AAAAAQAAAP8A/gAAAQAAAQEBAP//AAEBAAEA//4AAQH///8BAQEAAP8A/wAAAQAAAAAAAAD//wAAAQIAAP8AAP8BAAH/AAABAP///wEBAf8BAAD+/wABAQH/AP8BAAH///8AAQABAAH///8BAQEA/wAAAAAAAQD///8AAAAAAQAB/wH+Af8CAAD/AAEAAP8A/wABAQAAAAAAAAD+/wADAgD+/wAA/wAAAQEBAP8BAAH/AAD///8AAQAAAAEAAAAAAQAA/wAAAAAAAf8B/gH/Af8BAAEA/wAAAf4AAAL///4BAAEAAQEAAQH///8A//8AAAAAAQEAAP8BAAH/AQAB////AAABAAAAAAAAAAEAAQAAAP///wEB////AgEB//8BAAH//wAAAf//AAAAAAAAAAAB/wEAAQAAAP8AAAH/AP8B/wEAAgD//wEAAP8A//8BAQEA/wD/AP8AAQEBAAD/AP8BAAIAAf8A/wAA/wAAAQAAAP8AAQAAAAH/AAAA/wABAAAA/wABAQD/Af8A/wIAAf7//wAB/wEBAQD/AAEAAP//AAACAP//AAIAAP8AAAAAAAEAAAABAP//AAEAAP8AAAAAAf8AAAIA//8AAAEAAAAAAP8AAAABAAD+AQEBAAAA/wAAAP8AAAEBAf//AAEA//8BAQAA/wAAAAH/AP//AQEB//8AAAH/AP8BAAEAAAAAAP8AAAH/AQAAAP8A/gEBAAD/Af8A/wAAAQAAAAAAAAABAQH/AAAAAP8A/wAA/wAAAgABAAAA/wAAAQEA/wAA/wAAAQD/AQAB/wABAP//AQEAAAAAAP///wABAAEAAQAAAAD/AAAB/wAAAP8AAAEAAP8AAAEAAf8AAAAA/wD/AAABAQEA////AAABAAAAAAEA////AgAB/wEAAP4AAAEAAAH/AP8BAQAB/gD+AQAAAAABAQABAAD//wD/AAEBAP8AAQD/AAAB/wAAAAD/AAECAf//AAEA/wAAAQAAAAAA//8AAQEAAAAA//8AAAH/AP8B/wABAgAA/wH/Af8AAAAA/wABAAH/AP8AAQEAAP8AAAAAAAAAAAEA//8A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AAAAAP8AAAEA////AQABAAABAAD//wEAAQAAAP8AAf8AAAEB/gD/AQABAAD/AAAB/wH/AP8AAAABAAAAAQEA////AQEBAAAAAAAAAAAAAf8A/wAAAAAA/wAAAQAA/wAAAP8A0NLSvr3Bw8XGwsHC8e/u///+GhwdtbSwMC4r/wEAAAABAP//AQEB/gD/AQABAP//AAEBAAAAAP//AAEBAAAAAf/9//8A/wABAAABAP///wAAAQEBAAEAAP8AAP///wEAAQAAAAAAAAD/AP8BAAEAAQAAAAAB/v//AAIAAf8AAAD//wAAAAEBAv8A/wD/AAABAP8AAAAAAAEAAAEBAQAA////AAAAAAAAAAAAAAABAAD//wAAAv8A/wAAAAEAAAAAAAABAAD//wAAAP8AAQH//wABAQAA/wAAAf8AAAAA/wAAAAAAAAAAAQD//wEBAf8A/wEAAf///wABAAEAAP8AAAAAAQD//wEAAAABAAAAAQAAAP///wEBAf//AQEBAAD///8B/wEAAAD/AAAAAAEBAf4AAAAAAQAA/wH///8BAAD/AAEBAQD/AP8BAAEA//8BAQH//wABAgD//wD/AP8B/wEAAAD/AP8BAQEAAP///wECAQD+//8CAAD+AAEAAP8AAAABAAH/AAAAAf8B/wEAAQAA//8BAAD+/wABAQAAAAAAAQEAAAD//wABAAAAAgD///8A/wABAAAAAAAAAQEAAP//AAAA/wECAf/+/wEAAP8BAgD//gEAAP8AAAAAAAEBAf///wEBAQAA/wAAAAD/AP8BAQH/AAABAP8AAAIA////AAABAAAAAAAA/wAAAgD//wACAAEAAP//AAD/AP8BAAEBAQD+AP8AAAABAAD//wABAAH/Af8B/wABAAH/AAD/AP8AAQEAAAABAf8A/gD/AQEBAP8A/wEBAf///wEAAP8AAAH/AAACAf//AAAAAAEB/wAAAQD/AAAAAP//AAEB/wAAAf8A/wEAAP//AQAAAAABAAAA/wEAAP8AAQEB/wAAAAD/AAAAAAAAAQAA/wAAAf8BAAD/AQAA/wD//wEBAQAA////AAABAQD/AAEBAAAA//8AAAEAAf//AAEBAQAAAAAA/gAAAQABAf/+/wECAQD///8AAAEA/wAAAQAAAf8A/wAA/wEBAgH///8AAAAAAAEAAf8A/wAAAQD/AP8BAAEB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AQEB//8CAgAAAAAB9v4AxfT/u/L7nfD67v3+AAAAAAABAP//AAIBAP8AAP//AAAAPUFDcnJuUExL/v//AQABAQEA/gAAAQAAAAAAAP8AAAEAAAABAAD/AAABAP8AAAAA/wH/AP8BAP//AAEBAAEAAv8A/wAA/wH/AQAAAP8A/wAAAAAAAAAAAAAAAQABAAEA/wD/Af8AAAEAAAABAAAAAP8AAAEAAAD/AAAAAP8BAAAA/wD+/wEB/vv9xsjKuLi8tLS11NLQAAACAAD+AAD/AAABAAD+AAABAAD/AAAAAAAAAAAAAAAAAAEBxsfDODc3//8AAQAAAAH/AAABAP//AQEA//8BAQEA//8AAAEA////Af7+/gEAAP8BAAD/AAABAAD/AP8AAAEAAAABAAD/AAEAAP8AAP8AAAAAAAAAAAEAAAAAAAABAAH/AP8AAAAAAAAAAP//AAEBAAAAAP///wAAAQECAP/+/wEBAQAAAAABAQD///8AAAAAAAAA/wEAAAAAAQAAAAEAAf8A/wAAAf8A/gEAAQAAAQAB/wAAAAD/AP8AAAEBAP///wAAAAH/Af8AAAAB/wEAAf8AAAAAAAAAAAAAAAH//wABAQD///8AAP8BAQEA/wD/AAEBAv///gEBAf//AQEA/wAAAAABAP8AAAEA//8AAQD/AQAB/gD/AAABAAAAAgEBAP///wEAAP///wEBAAAAAf4A/wEAAQAA/wAAAAD/AQAAAAEAAAABAAAAAP8AAAAA/gEAAv8AAAH//wAAAAABAf//AAEB/wAAAAAAAAAAAAAAAP//AAEAAP8BAQAAAP8A/wL/AAABAAAAAP8AAQEA/gAAAf8AAAD/AAEBAAABAQD/AAAA//8AAAEAAQAB/wD+//8AAQABAAD/AAAAAQEBAAD//wABAAAAAAAAAAD/AAABAf8AAAEAAP7//wIBAP8AAAD/AQEB/wD/AQABAAAAAAAA//8AAAEAAAD/AQABAP///wEBAP8AAP8AAAIAAP//AAEAAP8AAAEBAP8AAAEA/wAAAgAAAP8A/wAAAAH/AQAB/wAAAQAAAP8A/wH/AQAA/wABAQABAP8A/wH/AAD/AAABAQAA//8A/wEBAgAAAP//AAEAAAAAAAAAAP8BAAH+Af8B/wH//wABAQAAAAABAP///wH/AQACAAD/AAD/AP8C/wEAAP7/AAL/AP8AAAAAAQAB/wH/Af8B/wD/AAACAQD/AAAA/wAAAQEAAP8BAQH//wAAAAAA/wEAAf8AAAAA/wAAAQAAAAAAAAABAQH///4AAAIAAf4A/wEAAQAB/wD/AAAAAQABAAD//wABAQD//wEBAP//AAAAAQAAAAAAAAAA/gAAAgAB/wAAAAD/AQAB/wAA/wH/Af8BAO7u8L6+v7W1ubm4uOjo5QAAAgAAAAAAAAAA/wAAAQAA/wAAAAAAAQAA/wAAAAAAAAAAAgEAAP8AAAAAAAABAAAA/gD/AQAA/wADAQD+AQAA/wD/AAAA/wAAAQAAAQABAQAAAAD/AAAAAQAAAQAB/wAB/wD/AQAAAAD/AAAAAAABAQAA/wAAAAD/AAAAAAAAAQAA/wEAAQEBAQABATs7OkZIRE1OSS4rLAEBAf//////AQECAAAA/wAAAAAAAQAA////AAIBAAAAAf8A/wD/AAAAAAAAAP8A/wABAQD/AAEAAf///wACAQH/AAD/AAABAAAB/wD/AAABAAH/AP8AAP8AAQEB////AAEAAP8AAAEAAQAA/wEAAAABAP//AAABAAAAAf///wEBAAH/AAABAf///wABAfz7+qioqoqKi9TU0gAAAQAAAQAA/wAAAQAAAAABAQD//wAAAAABAgsPExcfJQ0OEgwREgICAv79/fHs7PXz7e7r6PHr5gAAAQAAAQABAQAAAAEAAAABAAD/AQAA/v8AAQD//wIBATQ0M1xbWFhYVxQUFP///s7O0GpqbMvLzQAB/wD//wAA/wAAAAIAAB0LA5Ix+04V/wDyAQDwAwD9Av//AQABAgH/AP//AAABAQD/AP39AQMC/wH/Af8BA+T9/6rw/63x+sr2/v3//gEB//8BAQAAAQAA/wD+AAABAAAAAQ4REXJxcnFxaw0LDv8AAAIAAP8AAP8AAAAA/wEAAAEAAAAAAP//AQAAAAAAAP8BAAD/AAAA/wAAAQEAAP8B/wD/AAABAAD+AAECAP//AQAAAAAA/wAAAAABAAEAAQD/AAAA//8BAAD/AQAB/wAAAAEA//8AAQD///8AAQEBAQEA/wD/AAAAAOnr7KiprKyssMbExP/+/AAAAQAAAAAAAAAA/wAA/gAAAAAA/wEAAAAA//8BAwD//wAA/wAAAQACALy8ukFAQAAAAQEAAAAB/wAAAQD/AP8AAAEAAAAAAAABAAAAAAAAAAH+/v4A/wAAAgAA/wAAAAAAAAAAAAD/AP8AAAABAQEA/wABAAAAAf///wH/AQEA/wABAQAA/wABAP//AP//AAEB//8AAQEAAAAAAQAAAAD//wEAAP7/AAECAAEAAP//AAAB/wD/AP8BAQEAAAD///8AAAAAAQEB////AAABAQEAAAD/AAAAAQAA/wAAAAACAAD/AQD//wAB/wD/Af8AAAEBAP8AAAEAAQAA/wAAAAH///8BAgAA/wAA//8AAQABAAH+AP8BAAIAAAD/AP8B/wD/Af8BAQH//gAAAP8AAQABAAEA/wAAAf8AAAH/AP8A/wAAAQEAAAAB//8AAQEA////AQABAAEAAP//AAABAAH///8BAAAAAQH+AQAB/v8BAQD/AAABAQD//wABAAL//v4AAQEAAQAA//8AAAEAAv8A/wAB/wEBAQD/AAAAAAD/AQAA/wABAP8AAAEAAP8AAAD/AAABAAD/AAABAQD//wEBAAAA/wD/AAAAAP8AAQAAAAABAQEAAP8A/wEAAQAAAP7//wIAAP8BAAEA//8AAQAAAAAAAQEA/wD/AAAB////AQAA/gEAAgAAAAAAAP8A/wEAAf8AAAABAQEA/////wEAAQAAAP8BAAEAAP8AAAD/AAABAAH/AP8AAAEAAAAAAP8BAAAAAAAAAAEAAP//AAEAAP8A/wD/AQAB/wAAAQIA//4BAQABAAH+AAACAAD/////AQABAAD//wEAAf8A/wAAAQABAQH///8AAQIB//8AAAD/AAABAAAAAAAAAAAAAAAAAAD/AAAAAP8A/wEAAP8BAQEA////Av8B/wH/AQAA/v8AAQIBAAAAAP8AAAAAAAAAAAD//wABAQD/AAEB/wD/AAABAgD//gAAAv8B//8AAAIAAAD//wAAAf8BAAH/AAAB/wAAAQAAAQAA/wD/AQAB/gAAAQAAAAABAQD+/wABAQEA////AQABAAH//wABAf8A/wEBAf8A/wH/AAABAP8AAAH/AQAAAAAA/wABAQDb292lpqerrK7W1NUAAQAA//8AAP8AAAEAAAEBAf///wABAP8AAAH/AgAA/v8AAAAAAAEAAQEBAAD/AAEAAAIGBgIaGwkWFgUGA/4KDQIIBgIJBwABAwMCAgICAQIBAAHq7/fn5vj/AAD9/QH8/ADv8Pvy9P759fwA//4AAAAA/wEBAAEBAf/+/wEAAP8AAAEAAAAAAQAA/wAAAgEA/wEBAP8AAQH/AP8TExNAQEBUU05OTU4ICAcAAgAB/wD/AP8AAQEA/wABAAAAAP4BAAL/AP8AAAAAAAD/AP8CAAL/Af///wEBAP8A/wAAAQEAAAAAAP8AAQEA//8AAAD/AAABAAAA/wEAAf8AAQAAAAAA/wH/AP8BAAH/AP8AAAABAQAAAAAA/wABAQH///8BAAD/AQEA/wABAADi4+OCgYKhoqL8/PsAAAEAAP8AAAAAAAAAAAAAAAEAAQIZIishKzUhKTEYISgRFRn9/v3+/v/+//7+/////wACAv/58/Ps5uDm3tji18/h2M/28/AAAAEAAQABAAEAAQD///8BAQH///8CAgEBAAAuLi55dHcCBgJsbG/o6OYAAAEAAP4AAAAAAP8CAgBADQKRJPsrBwEB+AAA/AIAAQIA/wH//wH//wEAAAEA/wEBAP//AQIA/gH6/wHG9v629P+v8frf/P4AAAD/AQAA/wAAAP8AAQEAAAEAAQAA//8NERJRU1JnZGI6Njf+/wAAAAAAAf8A/wAAAQEAAP8AAAEBAAD///8BAAD/AQAB/wD/AAAAAAAAAQAB/wH/AP8BAQH//wAAAP8BAQEAAP///wAAAAEAAQAAAAD///8BAAABAAD/AAABAQEA//8AAAAAAAD/AAAAAQAAAAAB/wH+AAACAAAAAADd3t+ho6Wop6rc2toAAAIAAP4AAAAAAAAAAAAAAP8AAAAAAP8AAP8AAP4YDAFfJP2g1wjp+f0AAP4AAAAAAAG4urdGRUQA////AQEBAAABAP8AAAD//wEAAf8AAAAAAAEAAAAAAAAB/v7/AAD/AAEAAP8AAAEAAP8AAAAAAAD/AAAAAAABAQAA/wAAAQAA/wAAAAAAAAABAAAA/wD/AQAAAAAAAAAB/wAAAQD/AAAAAAEBAAD/AP7/AAIAAAAAAAABAP8AAAD//wEAAf8B/wAAAP8AAQEAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAf8A/wEAAgAA/wAB/wD/AQD/AP8A/wEAAQEB//7/AQEBAAD/AAECAAD/AP8A//8AAAEAAQAB/wD/AP//AQIB//8B/wAAAgH/AAAA//4AAAH/AQAAAAAA/wAAAQABAAAA/wAAAQAA////AAEAAP8AAAEAAf8AAAAAAAEA//8AAAAAAQEBAP///wACAAD+AAH/AAABAf8A/wH/Af8BAQAA/gEBAAD/AAAAAQAAAAAB//8AAAH/AP8BAQD/AAAAAAAAAAAAAAAAAAAA/wAAAQEB/wAAAQH/AP8AAP8BAAEAAAD/AAAA/wAA/wAAAgABAP8A/wH/AAAAAQABAQAA/gD+AQEBAP4AAAIBAP//AQAB//8A/wH+Af8BAAAAAAAAAAH/AAAB/wABAQAAAAAA////AQAAAAEAAAABAQD//wAAAAAAAAAAAP8A/wEAAQABAAD/AQAA/wAAAP8A/wEBAAAAAQD/AAABAAAAAAAA/wD+AQABAP8AAAEB////AQABAAD//wIBAP8AAP7/AAIAAP8AAQABAAEAAAD//wABAQEA//8AAAAAAf8AAAEAAAAAAP8AAAH/AAABAAABAAD//wAAAAAAAgAA/wAA/wH/Af8AAAECAP///wD/Af8A/wABAQEAAP8A/wH/AAAAAP8AAQEBAAAA/wD/AAABAQEA//8AAAD/AAABAAAAAQAAAAAAAAAAAAAA//8AAAAAAQEAAAD/AAEAAP8BAAH/AP8BAP8AAAH/AAECAf///wAAAAD/AAACAAAAAAAAAAD//wEAAf8AAAABAAH/AP8AAQEA//8AAP8AAQEB/wD/AQAB/wEA////+fj4u7y9ra2xtbS17e3sAAEAAAAAAP8AAAEBAP/+AAEBAP//AAABAQAAAAEBAQIB/v//DQ0HHyAILSgMHBoGISEEGx0HCgwMExIBGRb/FBH+/v8AAP//AAEB/wACAP8DAAEBAAEAAAABAgEB/wABAAACAAH9+fr94+T26+v14OD24+X46ef83d783d764+X69/b9AP4AAAACAAEAAAABAAEBAP4BAQEB/wABAQEBAAAAAP//AAAABAUDNTQ0T09NUFFNJSQjAAEB//7+AQICAAD/AAABAP//AAEBAQAAAP/+/wABAAEB////AAD/AQACAAEAAP///wABAQAAAAEAAP//AAEAAAAAAP8BAAD/AAAAAAEAAP8A/wABAQAAAAEAAP//AAABAQH/AAAB////AAEAAAAAAP8AAAEAAAABrausent829vbAAD/AAAAAAABAAAAAAAAAAD/CQ0ULj1KKTQ/HyctAwUH/v3//v///gD/AAAA/f38/v7//f79/f7/AgIAAgEDAgICAgIDAgMC8Ojj3tDG2MzB4djP/v7+AAEAAAAAAAABAAAAAQEAAP8AAAABDg4OAP7+8fLxAAAAAAD9AAABAAABAgEAYBYBihn7EgABAP4AAAAAAf8CAP8C/v8BAAD/AP8BAP8CAAAA+f8A0vj/y/L/u/f8uff/+gD//wD/AAABAAEBAAABAAH/AP//AAABAAEBHCAhTU9OXllYNTAyAQQCAAEBAP8AAAAAAQAA/gD/AQABAAD/AQEBAP8AAAEA////AAAAAQEB/wD/Af8B/wAAAQD//gAAAgEAAAAA//8AAAEAAAAAAQAB/wD/AP8AAAEBAAAAAf//AAAB/wH/AAAAAf8AAAEAAAAAAAABAAAAAAAA/fz80NLUwL/BxMbIw8DC7u7uAAD/AAAAAAABAAD+AAAAAAAAAAD/AAD/AAAAAQEBMyL/VzX/TiIBFdL8NL0I3vj8AP/+AAD/AAACt7i2RkVEAQEBAAEBAQAA/gAAAQD/AP8AAAABAAH/Af8B/wD/AAABAf/9/v8BAAABAQD//wAAAP8BAAEAAAD//wAAAQAAAAAAAP8AAAEBAP8AAAH//wAAAQAAAP8AAQAB/gH/AQABAP//AAD/AAEAAf8BAAEAAP8A/wEAAAAAAAAAAP8AAAEAAAABAAD//wAAAQAAAP8AAAEAAP//AAEBAf8A/wAAAAEAAAAA/wAAAv4AAAIA/wAAAQAA/wAAAP8A/wAAAQEA//8AAQH/AP8B/wEAAQAAAAAAAAAAAP8BAAD/AQD//gEBAAAAAAAAAf8AAAAA/wAAAAD/AAABAQIAAAD///4BAQD/AAAAAAAA/wEBAf8A/wAAAQH//wABAAAAAP//AQAA/wAAAQEB/wAAAQAA//7/AQIBAP8A/wAAAAEBAP//AAEAAQD/AP8B/wAAAQEAAAAAAP4A/wEAAQAA/wH/AP8AAQAB/wEAAQAA/wAAAf8A/wD/AAABAAAAAQD/AAEAAP8CAQEA/wD//wAAAQAA//8AAQEAAP///wAAAQABAAEA/wAAAAAAAAAAAAAAAf//AAEA/wABAf8A/wEBAQD+/wABAAD/AAAAAP4BAAIAAf8AAAIA////AQAB/wAAAAEBAP//AQAA//8AAAAAAAD/AQAAAAABAAD/AAAA/wEBAQD///8BAQEAAAAAAAD/AAAB/wAAAAABAQD//wAAAQAA/wAAAf///wABAAAAAQAA/wEAAP8AAAD+AQICAP7/AAABAAAAAAIA////AQABAAAA/wAAAf8A/wAAAAAAAAEAAAAAAQAAAAAAAP8AAAD/AAAAAAABAf8A/gIAAQEAAP8BAAD/AP8BAAD/AAAA/wEAAf7//wIAAQABAQAA/wAAAAEBAP7//wEAAQAA/wAAAQAB////AAEAAQD//wEAAP8CAQD/AAABAP/+AAEBAP8AAAAA/wEAAQABAP//AAIAAP8AAQAA//8AAAAAAAIBAP7/AQAAAAEA/wEBAQAAAP8AAAD//wEBAAAAAAAAAP//AAAAAAAAAAAAAL/AwoiIi7y+vv/8/QAA/wAAAQAA/wEAAP8BAQD//wAAAAAB/wD//wAAARAPCDQ0ETIzCzMxBy4vAyIf/wYGBP8AAP7+Af///QD//wEAAwD+AwAAAf//Av8AAP7/AgAAAP//Af7/AgEBAwEAAAAAAgEAAgEAAAAB//8A/AAA/AMD/gEAAgACAv//APj6/+rr/uDi+dzf8d7d8tjY9tfX+N3d/P36AQAABAAAAQEBAf8BAAH/AAD/AP8BAQAA/wD//wEBABweHWxqaFpcWhoYFwECAAEA//8AAQEAAAD/AP8AAAAAAAABAAD/AP8BAAD//wIBAf//AAAAAAAAAAAB/wEAAf7+AAECAAEA//8AAAD/AAABAAD/AQAA//8AAQEAAAAAAAAA/wABAQD/AAAA/wAA/wABAgD//wAAAP///5SVlXp6ffX08gAAAAAAAAAAAAAAAQAAAQYJCy8/TjpJWhgeIv/+/v///gD/AQECAQEBAgIDAQICAQAA//7/Af39/vv9+/n7+/36+/3+/wEAAQEDAgMBAQQEAwUD/d3NwcO0qt7V0AAAAgABAAEBAAAA////AQECAAH///7+/wAA/wAA/wAA/wAAAQAA/2YVApUZ+gAAAQP8/wAAAwABAQH/A/79/wD8Af0AAer/Asv0/cz4/8P3/837//cA/v8AAf8A/QAAAQABAAD/AAAAAAAAAQABAgIFBTc5N1ZWVVZUUxgWFwD//wAAAP8AAAAAAAEAAf8BAAH/AAAAAAAA/wEAAQAAAP8BAAD//wABAAD/AAAAAAEBAAAAAQAAAP///wAAAQAA/wEAAf8B/wH/////AQABAQEA//4A/wEBAQD/AQAA/wABAQD/AAEBAAAAAP///wAAAQAB/9XT1b2/wbS0t8fFxvb28wEBAf///wAAAQAAAAAAAQAAAQAA/gAAAAAA/gAAAA4JAkgw/V8//j8oAAgIAPjdBMS5A2DHAej7/AAA/gAA/wAAAMzLzDI0MgAA/wD/AQEAAP8BAAD/AAAA/wABAAD/AAAAAQAA/wAAAAH+/v4AAAABAQD//wAAAP8AAAD/AAABAAAAAAAAAAAAAAEAAAABAQH+//8CAAAAAAD+AQAA/wABAAAAAAEAAAABAP/+/wABAAD/AQEBAf/+/gACAQAA/wAAAAD/AQABAAEAAP8AAP8AAAH/AAAA/wAAAgAA/wABAAAAAAAAAAAAAAD/AQAB/wD///8AAQAB/wAAAAL/Af8BAAAAAP//AQAAAAEB/wAA/wAAAQAAAAAAAP8A/wAAAQEAAAD/AAAAAP8AAAEA/wAAAP8BAgEA//8AAAEAAP8AAAAAAAAA/wEAAQAAAAD/AAABAP//AAAB/wH/AQAAAP7/AAECAAEAAAD///8BAQAAAAH/AAABAAH/AP8BAP8AAAD/AAEA//8BAQD/AAEB//8AAQAAAAAAAQH//gAAAQAAAf8B/wAAAAD/AAEBAP8AAAD/AAABAP/+AAEBAQAA/gEAAP8AAf8BAAIAAAAAAP8AAAEAAP///wABAAEAAQAAAP///wAAAAABAQH///8BAQH/AP8AAAEA//8AAQABAAAA/wAAAQEA//8AAf8AAAIAAP////8AAQEBAAD/AQEA/v8BAgAA/wEAAP8AAAH/AAAA//8BAQEA/wD/Af8AAAAA/wABAQAA/wEAAP//AQAA/wEBAQAAAAAAAAD/AAEAAP4BAAH/AAAAAAAB//8AAQH/AP8AAAACAQH///8A/wEAAf8A/wAAAQL/AP8B////AgEB//8AAQEA/gAAAQAAAAH/Af8B/wAAAAAAAAD/AP8AAAEA/wABAf8AAAAA/wEAAAD/AQAB/wD/AgAA/wEAAP4B/wAAAAD/AAABAQD/AAEA/wAAAf8AAAIBAP//AP4AAAEBAAAAAAAAAAAA/wIAAP8AAQAAAAABAAD/AP8AAAAAAAEA/wAAAgD///8BAAEAAAH/AP4BAQEAAAEA/wABAQD+/wAA//8BAQAAAQAA/wAB/wD/AQAAAQAB/wEAAQD//wD/AP4CAALY2NqWl5mgoaLz8vIAAf4A/wEAAf8A/wEAAP8AAQAA/wAAAP8BAQEeHQw7OhM9PQtAPg4nKAgA//4AAv0A/vsA/v0BAv4A//7/AAAAAAwAAQ3//xL+/xMB/xL/AAz/AQUBAAMAAAkAAAgBAQUAAgYAAAUBAAX//wEAAQMAAAYAAAb/Afr//vwAAf0BAPoAAe8CA+kAAPv+//kA/e/9/O/09Ofx8e7e4PLRz/bMzPTKzfXh3vv9/gMBAAIAAQD/AP8AAAEBAAH/Af8A/v8BAgIkJCJISUtXVlE6OTYBAQD//wAAAf8A/wAAAAD/AAEBAP8BAAH/AP8A/wH/Af8B/wAAAgEA//8AAAAAAAABAQH/AP8BAAD+/wABAQAB/wD/AQD//wACAAD/AQD//wAAAAAAAAEBAQAAAAAAAAAB/wAAAP+RkpN3eHn5+PcAAAEAAP4AAAEAAAAAAAAPGCFOZHkpMToAAQIA/wAAAwIDAQABAQMBAf8AAgEBAQAA/wACAAH/////AQEBAP8AAAD8/fz7+/35+fz7/fv9/P7+/Pre08Xc0sjj3Nb28vL9+vj++/r//v8AAP0A//8AAAEBAQD///8AAAEBAP7/AAAAAAAAAAFJCgF5CfoiA/8JAwH+/gL5AQPa+QHj+wDp/QDQ/P7M/f7e/v/+AAABAAD+AAD/AP8AAQAA//8AAAEAAQEA/wAAAQAHDQ84OTppZ2VQTEoFBQUA//8A/wEBAv///wAAAQEA/wAAAQAA/wD/AP8CAAH/AQABAP8A/wH/AP8AAAAAAAD/Af8B/wIAAf8A/wAA/wAAAQAAAQH//wAAAAABAAAAAP8AAAEAAQAA/gAAAQAAAf8A//8AAAEAAAD/AAAAAf/p5+rP0NHGxsfIyMnMzMzy8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEJBwM1KABIMP1HK/svIP8D/gL99/4A6AH60Qe23QRjz/rx/PwAAP8AAAAnKSrMyskLDAsAAP8AAAAAAAEA/wAAAf8AAAEA/wAAAAAAAAABAf8A/wEB/v/+AP8AAAD/AAABAQD//wACAAD/AAD/AQEBAP8B/wD/AAAAAAD/AQEB/wD/AAABAAAAAAAAAP8AAAABAAD/AAEA/wABAf/+/wAAAQAB/wABAf/+AAAAAAEAAAABAAAAAAABAQD///8A/wH/AP8AAQIBAP8AAAAAAf8A/wEA/wAAAAAAAQEBAP8AAAAA/wD/AQABAAD/AAAA/wD/AAABAAAAAAAAAQAAAAAA/wAAAgAA/gD/AAAAAAABAQAAAAD/AAABAP//AAIAAP8BAAAAAQAA/wAA/gAAAgAAAAD/AAABAP7/AAMB//8BAf///wEAAf8A/wH/AAAB//8AAQEBAQD+/wABAP//AQEAAAAAAAAB/wAAAQD//wAAAAABAgAA/gD/AAABAf8AAAH/AP8AAAAAAAEB/wAAAQAA/wH/Af8B/wAAAAAAAQD+/wABAP8AAAABAAH/AP8AAQIBAAD/AP8BAAEAAAAAAP8A/wD/Af8AAAAAAAIA//8AAQAB//8AAQEAAAAAAP8A/wH/AQAB//4AAAL/AQEA//4AAAEAAv8A/gEBAgD//wAA/wAAAAEBAP//AQAB////AQEA/wAAAAABAP//AAAAAAEAAP8CAQH/AAEAAP7/AAAA/wEAAAABAQAAAQAA/wAAAAEAAP8A/wAAAf8A/wEAAAAAAQAAAP//AAEB/wD/AQEBAAD+//8BAQABAAAAAAAAAAAAAAAAAAABAAH/AP8AAAAAAAEAAP8B/wD+AP8BAAH/Af8BAAH///8AAQEBAAAAAAAAAAAAAAAAAP8AAAEAAP//AAEB/wD/AQEA//8BAf8A/wEAAP8AAAD/AQEAAAEBAP8AAP8AAAL///8AAAEBAf8AAP//AQAB/wEAAAAAAP///wAAAQEBAP8BAAEAAAD//wAAAQD/AAAAAQEB/v8AAgAB/wAAAQAA/gAAAQD//wEAAgAA/wAAAAAAAP8BAQD/AAAA/wABAAD/AAAB8fHwlpeakZCU6+rp/wD/AAAAAAD+AAABAAEBAAD/AQIAAP4ADg4ESUcVSkoXR0QUFhcEAAD8AAABAAAAAP8B/gALAAAa//8M/wALAP8Q//8Q/v8T/wAM/wEF/gABAQAD/wACAf8D/wAEAgEDAP8BAQEEAAEBAP8BAQEBAAEAAAEDAf8BAAADAAADAAEEAQACAQEAAAECAAABAQH8AQH9AP/8/v3+/wD8/f7o/P3L/PrS+Pfm9PPpytLrvb3rwL4B4N76//wCAAH/AAIBAP////7/AAD/AAABAAAADg8MU1RUZmZiNjU0AAAAAQAAAQEA/v8AAQEAAf8A/wAAAf8A/wH/AAEAAP8AAQABAAAA/wD/AAAA/wEAAf8AAAABAAAAAQAA/wAAAAH/AAAAAP8BAAH/AAABAQD///8AAQEBAAAA9/j4j5CQgoCD+fn3AAABAAD/AAAAAAAAAAABHi07S19zHCEmAAABAQICAgEAAQMBAf8A/wEBAgABAAAAAQAAAQEB/wH/AP8AAAAAAgAAAQIAAP8B/wH//v7//P3++fn5493Xvaya6OPe////Av8AAAD/AgIDBg8Q+fb09+ro/vv4AAAAAAEBAf8AAAD//wD/AAD/AAAAAgAAMQD9IAIDBAIC/v799QAA2v4A5AAA/AABAAD//wD/AAD//wAA/wEA//8AAQAC/wD/AAAAAAEABggKOj4+PT4+RkZDNDAvBAMEAQAA/wAAAQABAgAA/wH//v8BAgAAAAH///8AAQABAAEAAAAA////AgEB/v8AAQEAAP8A/wEAAQAAAQAAAAAAAP8AAAH///8AAAEA//8BAAD/Af8AAAEAAAAB/wD/AQEB//4A/wD/AQAA9PT0z9HS0dHSx8jKxcTE5OHhAAD/AAAAAAABAAD/AAAAAAD/AAAAAAAAAAAAAAAAAAAAAAACJhoDSzb+Tjf8Nyb+CQYAAP4CAPb//+8CAOr//90F/OkGkOL+d9j2AAEBAP//AAAAZGRkm5qZ/wAAAAEBAAAAAP8AAQEAAP///wAAAAAB/wD/AQEB////AgEBAf7+/gEA//8AAQAAAAEAAP8AAP8BAQH/AAAA/gD/AQACAP//AAEAAAEBAf///wAAAAAAAAAAAAD/AAEB//7/AAEBAgABAP8A/wD+AAACAAH+AP8BAAEAAP8AAAD//wEBAQAAAAD/AAABAAAAAf8A/wH/AAABAAAAAQAA/wAAAAAAAP4AAAL/AAAA//8BAQEAAAEAAf4A/wEA////AQABAAD//wAAAQEBAAD/AAABAAAA/wAAAf8AAAAAAAH/AAAAAf8C/wD/AQAA/wAAAAEB/wD/AQEAAP4AAAEBAAD/AAD/AAABAP8AAAEAAAAAAAD/AAAB//8BAAD/AAH/AAABAf8A/wD/AAABAAH/Af8BAAEA////AAAAAQABAAAA/wIAAf4AAAAA/wIAAf//AAAA//8BAQAAAAD//wEAAAAAAv8A/wEBAAAA//8A/wEBAQD+AP8BAAD/AAACAAD+/wABAgAA/wEAAf//AAEBAAAAAAAAAP8A/wAAAQEA/wAAAQAAAP8AAAAAAAAA/wD/AQEBAAD//wAAAP8BAQH//wABAAABAP8A/wD/AQEAAAD/AQAB//8AAAEAAf//AAABAAAA/wEAAf8BAAD+AAABAAEA////AQEBAP8A/wEAAf8A/wAAAAAAAAEAAQD//wABAAAAAf8A/wD/AAABAAEAAAAAAP8AAAEAAf8A/wH/Af8B/wL/AQABAf///gECAP//AAEAAP4AAgAA/wEAAAAB/wD/Af8AAQAAAAD//wEBAAD/AAAAAAAB////AAEBAP8AAQIBAP8AAAAA/wD/Af8AAAAA/wEAAP8AAAEAAQD/AAAA//8BAAEAAQAAAAAAAAAAAAAAAQEA/v//Af8B/wEAAAD/AQABAP8AAAD//wECAf//AAAA/wH/AQAB/wAAAQAAAAEAAf4A/wIBAP4AAAH//wEBAf//AAAAAQAA/wAAAAAAAAEBAP//AAEBAQD/AAABAP//AAD//bKztoeIi8nJyQH/AP8AAAAA/gAAAAAAAAACAQAA/wAAADY2FU9KFEpIEjAwCP8A/wAAAwAAAQEAAgAACP8AEvz/H///H/79F/z/CAAAAf8AAAEBAQEAAP8AAQEAAAEAAf8BAwAAAQEBA/8AAQIAAv8AAwEAAwABAQAAAgABAgAAAgEAAgEAAAEBAwAAAgEBAwAABAAAAAACAQH/AQEAAwEAAAEBAf8AAAD/AQABAAEC////8/v98Pf64/r82v3+3efq5crK4L6858O98ejl/QD/AQEBAP///wEAAf8B/wAAAAEAAA8QD1FTUGRiYDo5N/8A////AAEBAQD//wAAAAAAAQAB/wAAAQD/AAAA/wAAAQABAAEA//8A/wD/AAEBAf//AAAA/wD/AQABAAEBAf///wAAAQAA/wEBAP8AAAAA//f2+Hl6e5KRkgAA/wAAAQAA/wAAAAAAAQIGCj1OYTpLWgkMDQIDAwEBAQIBAgAB/wEBAgEAAAEBAQEAAAAAAAEBAAABAf///wEAAAABAAD/AAEBAQAA/wAAAP//AQIBAQICAaeXg9PJwQECAP/+/gD9/v/////+/woUFhEZGwwODfbx8ufc1/To4wD//QAAAAAAAQAA/wAA/wAAAAEA/gEAAQAAAQAA//8AAAEAAAAA/wAAAf4AAAEAAAAAAf8A/gIAAP4AAAABASEmKS8yMjk6Nzg2NzY0MgUCAgD//wAAAf8B/wEAAf//AAAA/wEAAAAAAAAAAAEAAQD/AAAB//8AAQEBAAEAAP///wAAAAEBAf7//wEBAP8AAQAAAAD/AAEA/wD/AP8AAAEAAAAAAAAAAAABAQAA//8AAAH/AQEB/9na3eTk5c/R0dHR09DP0NfV0/7+/QAAAQAA/wAAAAAA/wAAAQAAAAAA/wAA/wAAAQABAAD/AAAAAhwYBzkr/EYv/kwy/BgP/v/9AAD7AAH4AADyAgDtAwDrAP7tAv7xBfz4AmLU/Kfp+AABAAD/AAAA/qSjpVpcWgD/AAABAAD/AAABAAH/AP4AAAEAAAABAP//AAEB/wAAAQEAAAH9/v4B/wAAAQAAAAAAAAAAAP8AAAAAAAEBAQD/AAAA/wEAAP8AAAAAAAAAAAAAAAAAAAAAAAD/AQEA/v8BAgD//wABAAD//wABAf8A/wIAAf8AAQAA////AAEBAP8AAAEAAAD+AAACAAAAAAEAAAAAAP//AAABAAAAAAEB////AQD//wAAAAABAgAA/gAAAQAAAP8AAAEAAAAA/wD/AQAA/wAAAQABAAD/AP8BAAH/AAABAAABAAD/AQAA/gABAQD//wAAAQAA//8BAQEAAP/+/wEBAQAAAP///wEBAAD/Af8BAAH/AAAB//8AAAD/AgAB/gH/AQABAAAAAQD//wAA/wAAAf8BAAD///8AAAIAAf8A/wEAAAABAQAAAAABAf/+AAAB/wAAAAEA/wAAAAAAAAD/AQAB/wD/AQD/AAABAAABAAD//wABAP8AAAAAAQEA////AQH//wACAf8A/wD/AQABAAD/AP8BAAEA/wEAAQD/AP8BAQH//v8BAQEA/wAAAQD///8AAQAAAAAA/wAAAAABAQH/AP4BAAH///8BAAIAAP//AgAA/wAA/wEAAf8BAAAAAAH///8AAQEA/wAAAAAAAQABAP/+AAEA//4CAAEAAQH/AP8BAAAAAAH/AP8AAAEBAP8AAAD//wAAAQAAAAEBAAD/AQABAAAA/wAAAP///wEAAAAAAf8BAAH+AAACAAAAAAAAAAAAAP8AAAEAAAD//wEAAf8BAAAA/wABAgH/AAD///8AAAEAAP8AAP//AP8C/wH/AgAA/wACAAH/AAAA//8AAAEAAQD///4BAQEAAAH//wABAQD/AP8B/wL/Af4BAAH/AAABAAAAAAD/AP8A/wECAf/+/wAAAQEBAP8AAAEAAAD/AAABAAAAAAAAAAAAAAD///8BAQH/AAEAAP8CAAD/AAABAAD+AQACAAH/AP8AAAAA/wAAAAABAAD/AQAA/wEAAP8AAQDf4OGLio6ampz+/fwAAQEAAP8A/wAAAQAA/wAAAf4LCgVISxVTUBVLRxIODQEAAAEAAQP//wABAQX/ABj9/h/7/BT+ABL//g7/AQMBAQD//wIBAQMAAAD/AQMC/wAAAAD/AQEAAQEA/QAAAgEBAAL///8BAQIAAQIAAAIAAQIA/wEBAAIAAAMAAAEAAQIAAQEBAAH/AAMCAAIBAQIA/wIBAwMB/gIAAQMCAQMAAAABAgIAAAEBAAAA//8AAAMAAQEAAP38/Or7/+v8AeD2+uDO0M6vrcq6tOni3P0AAAMBAQH///8AAQABAAAB/wEAAP8MDQ5aWlZhYl8zMzQCAP8AAQD/AAECAQD/AP8A/wAAAAAAAQEAAP8A/wABAAH+AP4BAQEBAAD/AAEBAAD/AP8A/wAAAAH/AP8BAQEAAAAAAP8A/wAAAP+DgoN/gIMAAP4AAP8AAAIAAAAAAAAMExtKYHgpNT0BAgICAgICAgMBAQECAAABAgEAAQACAAD/AAAAAQACAQEAAAAAAAAAAAABAAH+AP8CAQAA/wAB/wD/AgAB//8CAwLRxryvopH7+Pj+/vz+/f4B/v7+AAAC/v//AQEHCwwNFxkLFxkICQ3/+/v/AQLx5eTo2Mz89vEBAAD/AAAAAAAAAP8AAAAAAAAAAAAAAAAAAAEAAAAAAP8AAAERFhcgIiIjJicnKisoKyg+PToVDw8A/wACAQABAAAB//8BAAEAAAAAAAABAQD///8AAAEAAAABAAAAAAABAAD/AAAA/wAAAQAAAAAAAP8BAAAAAAAAAAAAAAABAAD+AAABAAH/AP////8BAgEA/wAA//8BAP/w8/Pd3d7i4+Xa293W1dXf3uDV09Tw7+4AAAEAAP4AAP8AAAEAAAAAAP8AAAAAAAAAAP8AAAEAAP8AAAAAAAAAAAIcFQVKNAE9Kvs/Mv4dFPwA/QH//AAB9///9QIA8v8A8AEB9QL/9gIA7gL+8gH++gPI6wBR1Pft/P4AAAAAAAEbHB3NzMkVFxcBAAAAAAD//wABAQAA/wAAAf8A/wEBAf/+/wABAQEAAP///wAB/v7+AAAA/wEBAf8AAAD/AAAAAQEA/wAAAP8AAQAA/wEAAP8AAQAAAAAB/wD/AAABAAEAAP8AAP//AAAA/wIAAf8A/wD/AQAB/gD/AQABAQAAAAAAAAAAAAAAAP//AAEAAAAB/wEAAQAA/wAAAf8BAAD+/wABAQABAAD/AAAAAP8BAQH//wABAAH/AAAAAP//AAABAAD/AAEBAP///wEBAQAAAP8A/wD/AQAAAAAB/wD/AQABAQAA/wAAAAAAAAAAAAABAAD///8BAQD//gEAAgAA////AAEBAQAAAP8A/wEAAf8A/wD/AAEAAAAAAQABAP///wIAAP4AAQEB/wAAAf///wEBAQH/AP8B////AAABAAAAAAD/AAIBAP//AQEBAf4A/wH//wAAAQAAAAAB/wD/Af8AAAEA//8BAAAAAAEAAQAAAAAAAf///wABAAH//wEBAP8AAP//AAEB/wD/AQAAAQABAAAB/wD+AP8AAAEB//8AAgEA////AQAB/wH/AQAA/wAAAgD///8BAAAAAAEB/wD/AQABAAABAf///wD/AAEA/v8AAQEAAP8AAQAA/wEAAQAA/wABAAAAAAD/AQAA//8AAAH/AP4BAQIBAAD/AAABAAD/AAAA//8AAQEB/wAAAQD/AAAA/wD/AQAB/wABAQAA/wH/AQAAAP8A/wEBAQAA//4AAQEAAAD/AAABAP///wEAAf8AAAEAAQAA//8BAAEA//8AAAD/AAEBAf//AAEB/wD/AgAB//8AAAL/AP8BAAD/AAABAAABAAD+/wAAAf8BAAAAAAAAAAABAAH/AP8AAAEAAP8AAQEA////AAABAAEAAf8AAAH//gABAAAAAAAAAf//AAABAAEAAAEBAP7//wIAAf8AAAAAAAAA/wAAAAAAAQAAAAD/AP8BAAH/AAEBAP4BAAIAAP//AAABAAD/AAEAAP8AAAEBAf8A/////wIA8/LzoaGjlJSW29rbAAAAAQEB///9AAECAAD/AAACAQL/U1EcbWsZPTkSAAD+AQECAAD+AAD/AAEI/wAd+/4a+/wf/v8LAQACAAEEAQAC/gAAAQAC/wECAQAB/wEBAf8B//8BAAEBAAABAQEAAAABAAABAAABAAAAAAABAAEBAP8BAAACAAIB//8CAQAAAAACAQADAAEB//8AAQECAQABAQICAP8DAAECAgACAAACAQEDAAEBAf4DAQEDAQICAgEC/wACAQACAQAA/gAAAQAA/v/q/P7jAALr+Pnsz9HDrau/pqjy7un6AP8AAAAAAP8AAAAAAAAAAP//AQEAEBITT1BOYWBePTs5AQEB/gD/Af8BAQEAAAD//wAAAAAAAAABAP8AAAH//wAAAf8AAAABAAH/Af8B/wEAAP8AAQEA/gD/AQABAP//AQEBoaCgamls9vj1AAABAAAAAAAAAAABEx4nTmV+GyMqAQEBAwMDAQEBAgICAgMBAf8AAQEBAAEAAv8AAAEB/wEAAgEBAP///wEBAQH/AQABAP8AAQIB////AQEAAf8BAQH+y8K3tqWX9/fzAf4A///+//3+////AQD///4AAAP/Af4A/wABAgICBw0PDhkeGCkzHjI9CAH/38vB0LSj+PLqAQAB/wD/AAAAAAABAAD/AAABFBseNT4/LjU1LC8uKCgmGBYVBwMB//8AAgEAAgEABAAAAgAAAQAAAAAABAAAAAD/AQABAP8AAAEAAgAA/wAAAAAAAf8AAQD/AQEBAP8A/wAAAQAAAAH//wABAP8A////AP8AAQEAAAAAAQEA8PLyzdDT9vb12Nnc6Obl5ufn3t7g6uno4t7fAP/+AAAAAAEAAAAAAAABAAABAAD/AP/9AAAAAAACAAD/AAAAAAAAAAAAAAABAAAAAAAAFxAERDAEQiv+RDP/HBP9AP/+AQH+AAEAAfgDAPD/AOz/APf///z+AfkEAPUC/vEB//UA//gB8fkCX9P8te/6AQD//wABAAABdHR1iouIAP//AAEBAQAA//8AAAEAAAAAAAD/AQAAAAAB/wD/AAAAAP8AAQEBAf7+/gAAAAAAAAEAAP8AAf8A/wEAAAEBAP//AQABAP8A/wH/AAABAQH///8AAAEBAP8AAAD/AQAA/wH/AP8BAP8AAAH/AAACAAD/AQD//gABAgD//wABAQEBAP8A/wD/AAAAAQAB/wD///8AAQEBAP//AAEBAP/+/wEAAf8BAAABAAH+/wABAQAB////AAH/AP8AAQEB/wAAAQAAAAAAAAAAAAEAAP8AAAD//wEBAP8BAAD/AQAA/wABAgD//wABAAD+AAAAAAABAQD//gABAAEAAP8AAQAB/wD+Af8AAQEB/wAAAf4B/wH/AAEAAAAAAAAA/wD/AQAA/wAAAP8BAAABAQD//wD/AAABAAEAAf///wAAAP8BAAH/AAEAAAEBAf///wABAAEAAP4AAAD/AAAAAAACAAD/AAAAAQEAAAD///8BAQEA/wAAAAD/AQAB/wAAAP8AAAD/AAABAgAA/wH+/wACAAD//wABAQAAAP8AAAEAAQD/AP8AAAEBAP8A/wH/AAABAAAAAQD/AP8B/wH/AAABAAAAAQAA/wAAAAAAAAABAQH/AP8A/wAAAAAAAAAAAf//AAEA/wAAAQABAAAAAP8A/wEAAAD/AP8BAAEAAQAB////AAH/Af8A/wEBAP8AAQEAAAEA//4AAAH/AQABAAABAP///wEBAf///wD/AAEBAQAAAAD/AAAA/wABAQAB/wD/AAEAAf4BAAH/AAEAAP8AAAAAAP8AAAEAAP8A/wEBAP//AAAAAQEAAQD//wAAAAABAAAAAQAA//8A/wEAAQAAAf///v8BAQEAAAEAAf///wEAAP8AAAEB/wAAAf/+/wADAQH/AAAAAf8A/gAAAQD/AAEAAAEBAP4BAAEAAP/+AP8BAAIAAAAAAAAAAAAAAAAAAQD//wABAf8AAAEB/gD/AP8BAQD+AAEBAAABAQD/AAEA//8AAAAAAQABAAH/ANvc3G1ucbm5ugAAAAD//gAAAQABAAD/AAAB/wICAjk5EWhlGVVRGwcHAf///wAAAwEBBQD/EPn9H/v+Hv4AEwAABP8AAAIAAAEBAv8AAQEAAAAAAv8AAAEBAAD/Av8AAQABAAABAQD/AwAA/wAAAP//AAEBAgABAgAAAf//AAH/AAABAgABAgEA//8AAQD/AgEBAQEAAgABAf/+AAEDAgAAAgAAAAD/AQABAwIBAgD/AgEBAgEAAv8BBAIAAQEBAgABAwEAAwIBAv8BAwIAAQABAf//AQH/AP4A+AAA9wEC4/f1w87PrZyj5LKx7/Dq+wD/AAABAAD//gAAAQABAQAA/wD/ABAQE3FybXBxbg0LDAAB/wAAAP8AAAH/AAABAQEAAP8A/wAA/wD/AQEAAAAAAP8BAQD/AAAB/wD/AP8BAAEAAQD/AAAAALKysVxbXvT18wAA/wAAAAAAAQAAAA4VHVFuixkgJQMDAwMEAwEBAQIBAgICAAEAAQICAf8AAAH/AAECAgD/AAEBAAABAAEAAP8AAQIBAAAA/wEBAgAAAAAB/wIA//Px772woNHDu/b18////wD//gH/AQAB//8BAgIBAgICAQAAAQEBAP/+/v///wD//wABAQUKDxEeIx4wPC0/S/jy68anlt3EtP7+/QAAAAAAABQeJEVdYjhAPTw5Mg0HBgMBAAQBAAH+/wQCAQH//wABAQD+/gEAAgIB/wEA/wIBAQIBAAQAAAD/AAD//wEAAQEAAAAAAQD//v4A//79/vP19fLx9OLi4wIDAfb29u3t7N/e4Pv8/fDx8eXl5u/t7/j6+vHw8ODZ2fz9+gD/AAABAAAA/gAAAgD//gD/AAAAAAAAAAAA/wAAAQD//wAA/wAAAAAA/wAAAAAAAAAAAgAA/wQDAiUYAiwcASsZ/i8dADQi/hsVAQED//8BAP/+/wL9AQD7/gD0AADxAQD4AAD+/gD/AAD4Av/2AwDyAv/0Av/6AgD+/6Xl/l/X9wAAAAAA/wAAARQWF8LAwSgoJQEBAQAAAP4A/wL/Af4BAAEA/wAAAQAAAAD/AAABAAEA//8AAAH/AQH+/v4AAAAAAQAA/wAAAAAAAAAAAP8AAAEAAQEB////AAABAAD+AQAB/wAAAAEAAP8AAAAAAP8AAAD/AAIAAAACAP//AAAAAAEBAAD/AP//AAEB//8AAQEBAQD/////AAABAf8A/wEAAP//AAAAAAEA/wEAAf8CAQD//wABAAD+AAACAAD/AP8A/wAAAgEA//8A/wEAAP8AAQEAAQAA/wD/AP8BAAEBAAD/AP8AAQEA//4BAQL///8AAQAA/wAAAQAAAAAA/wAAAQEA/wAAAAEAAP7/AAEAAP8BAAABAQH//wD/AAEBAP8AAAH/AP4AAAEBAP8AAAEA////AQEAAP8AAAABAAABAAH/AP8AAAIAAP7/AAAB/wEAAAAAAf//AAABAAEAAP4AAAEAAQD//gAAAAABAQD+/wEBAP//AAACAQH/Af8A/wAC/wEAAQD+AP8AAAAAAP8B/wIAAQD/AAABAP8AAAAAAAEAAP8AAAAAAP8BAAH+/wEBAAAAAf8AAAD/AAAAAAABAQEA/wAAAAD///8BAAEAAQD//wABAAAAAf8AAQD//gACAQH/AAAA//8AAAEAAP8AAQEAAP8AAAD/AAAAAAAAAAAAAAH/AP8BAAAAAAEA//4BAAIAAf///wEAAQABAAD/AAABAAD/AAAB/wAAAQAAAP//AAEA//8AAQAAAQEA/wABAP8A/wAAAQH/AP8BAAD/AAAAAAABAAH/AAAAAAABAAAAAAAAAAAAAQAA/gD/AQABAAAA/wD/AgAB/wAB/gD/AgAAAAAA//8AAQEAAAD//wABAAAAAQAAAAAA/wD/AQEBAP8AAP8AAAL/Af8B/gAAAf8AAAIAAP4AAAIAAP//AQEA//8BAQAAAAAB/wD//wD/AQABAP8AAAEAAAEAAP8AAP8AAAEBAAD/AQAA/wAAAAAAAf8BAAH/AAABAAH///8AAAEAAAAAAQDHxchpa23S0tAA/wIAAf4AAAEBAAD/AAAA//8WGgd6dSBgWxkPDwcAAAP+/wAB/wT/ABX6/Sf7/xz+/wgB/wIAAQEAAQEBAQEA/wEAAQAAAAEAAAEAAAEAAAAAAAIBAQH/AP8A/wH/AAEBAgEAAAEA/gABAAH+AAABAQD+/wABAAEAAQIAAAEAAAEAAAEBAAH/AAACAQIA/wEAAQEAAAEAAQMBAAAAAAEA/wEAAQMBAQEAAAEBAQEAAQMA/gEBAQIAAQIBAAEAAAMCAgMA/wEBAQIBAgUCAQMAAAIA/gIAAf////j+AeEA/sH5+MXLzemtr96ur+7m4voA/wAAAQAAAAAAAAAAAAEA/wABAQE7Oztqa2dOTU4KCwkAAAABAAAAAP8AAAH///8BAQH/AAAB////AAEAAf8BAAH//v8BAgH/AAABAAD/AADX1tZOTE7d394AAP8AAAEAAAAAAAALERhKZ4IeJi8EBAMFBAQCAwMDAgEAAQEBAQEBAAECAgAAAAD/AAECAQEAAAABAAABAQEAAAAAAQABAQAA/wABAQEBAQEAAADb0si3ppbl4NoBAAEA////////AAACAAEAAgEAAAACAQEBAQEBAwMCAgEDAwQBAgD8+/3///7+/f0DAQEDBwoWKDArRVcjLzfZx7rCnYj16eEAAAEAAAADBgcPHSEaIR8NDxACAgIDBAIEAgQEBQQGBQUCAwT+///+/v79//8AAgEEAgMDAP8C/wD49vT8+vwAAP//AQAB+/3w7uz9+/v+//75+Pnw7/Do4eEAAQAA//4AAwEAAAAA/wAAAAAA//8A//8AAAAAAP8A/wEAAAAAAP8AAf8A/wIAAP8A//8A/wAAAP4AAAEAAAAAAP8AAAAAAP8AAP8AAP8WDQMwHgMmGAErGv8zIAEuHP4HBf8AAP4AAAH/AAEAAwAB/v//+/8B+AAA9wEA+f8A+gAA/gAA/gH//AAB+wEA8AMA9gL+9wEB+wL+/gHl9v5LzvjU9/wAAAAAAAAAAAFzc3WLi4kBAQD///8AAQAAAAEBAAD///8AAAEAAQAAAP8B/wEAAf///wH/AP8BAQAB/v7+AAABAAH/AP//AAAAAAABAQD//wEC////AAAAAQAB/wD/AQAA//8AAQEAAAAAAAAAAAEAAAAAAP///wEBAP//AQEBAP8BAAD/AP//AAEBAAD//wACAQH/AP8BAAH/AP8AAAAAAQAA/gABAQD/AP8AAAH/AQAB/wAAAf8A/wEA//8AAQIA////AQAAAQAC/wAAAAD/AAH/AP8A/wABAf4AAAL/AAAB/wAAAQAAAAD/AAAA/wAAAQAA/gEAAv4A/wEBAQAAAAAAAAAAAAEAAAAB///+AAAAAAABAgAA/gAAAQAAAAH/AP8C/wH/AP8AAf8AAAEA/wD/AQAB/wD/AAABAP//AAEAAAAAAP8BAAL///8AAgABAAD/AAAAAQAA/wAAAAACAP/+/wEBAAAAAAAAAQEAAAAA//4AAQIA//7/AAIBAf7//wEAAQABAAD/AAAAAP8B/wEAAQAA/wAAAQD/AAAAAAABAP//AAABAAD//wAAAQAAAAEA/wEAAQAA//8AAAD/AQABAAAAAAABAP/+/wEBAQAA//8BAQABAAD/AAEA/wD/AQABAP//AQEB/gD/AAABAAD/AQAAAAAA/wABAQAA/wAAAAD/AAABAAAAAAD/Af8AAAEAAAAA//8BAQIAAP4A/wEA/wD+AQACAQABAAD/AP8A/wEAAAAAAQAAAAD/AP8BAAH/AAAA//8CAAH/AAD+AAABAAABAf//AAAAAAEB/wAAAAAAAf4AAAIA/wD/AQAB/wAAAAD/AAABAAAAAP8A/wEAAQD/Af8AAQAB/wEAAAAAAAAA/wD/Af8A/wABAQH//wABAQH///4BAQD/AAAAAAEAAP8B/wEAAf//AAAA/wAAAAABAQH/AQEB//7//wABAAH/AQABAAEA////AQABAAAAAAAA/wABAgD//wEAAAAAAP8BAAH/Af8A/wEBAP8AAAH//v7/ra2wcXBz5ubkAAABAAD/AAABAAEAAAD/CwwFUU8SdHAZLywOAP4EAAIEAAEG/v8Q+v0l/P4i/f4JAQACAAECAP8AAQIBAAABAAEBAAAAAAAAAQAB/wEBAP4BAAAAAAAC/wEAAQAC/wH/AQAA/wABAAABAf8A/wAAAAAAAAEB//8AAAABAQD/AP8BAQIC/wAAAf8CAAEBAQEB/v8BAAEBAAAAAgED//8BAAAC/gACBAIAAP8CAAABAQECAAAB/v8AAQEBAgEDAAADAAEBAf8CAQECAQECAP8CAgMEAAEDAgEE//0CAQABAQL////5///oAgLa+vrP0djIq6zXrKnt4N76Af0AAAIB//79AAEDAP8AAAAAAQICQkNCcnJvSUhHAP8AAQAAAAEA/wAAAQD//wAAAAAAAP8BAAEAAP//AAEB/wD/Af8BAAEA9fP0XF1dsbGxAAAAAAAAAAAAAAAAChQdR2N7HyQuAQIABQYGBQMEAwIDAgICAAIAAQABAgEAAAABAQD/AAECAQAAAAEAAQABAAEAAAEBAQABAgD//wEAAAAAAQEAz8S6s52K9/b1AQEB////AP///wEAAf7//wAAAQIBAAAAAAABAgEBAQIBAAIDAgMDBAUEAgICAgEA/f3+/fv8AQEBAQABBgsMIz5PNk5e+fPvv5yF3si7AP8AAAABAAEBAAICAP8BAAIBAAD/AP7+AAAAAAABAAIBAAD+AAACAAD/AAD/AP8AAAABAAAAAP//AAEAAP//AAACAAEBAAAAAAAAAAABAP//AAAAAAAAAAH/AAD/AAAAAAD/AP8AAAEAAP8AAAEAAAAAAP//AP8AAAICAP/9AP8AAP//AAAAAAAAAAABAAD+AAAAEwoEKBgEIhYAGxIBIRP+Lx4AHRL+GhD9AP8A////AQEAAP///gEAAQD/AQEBAPz/APcA//n/APsBAfwB//0AAfsBAP4BAP4C//4A//kAAfAB//UBAfoA//sDAP8A8PoAZtT4re78AAD/AAAAAAAAJicou7u6Hh0dAAAAAP///wEA/wAAAAABAAAAAAAAAQAA/wD/AQAB/wAAAv///gEBAf//Af7//gEA//8AAQH/AAABAAD/AP8AAAAAAAEAAf8A/gAAAf8AAAEBAAD//wABAQD+AAECAP7/AQAA/wEAAAABAAD/Af8A/wEBAAD/AQAA//8BAAH/AAAAAAAAAQAB////AAIAAP8AAAD/AAAB/wAAAAAAAf8AAAEBAAAAAAD//wEAAP4BAQH/AP8AAQEA/wAAAP8A/wEAAQEBAP7/AAAA/wEAAQAA//8AAAEAAQAAAP8A/wEBAf//AQAA/gAAAQEA/wAAAQAAAAAA/wAAAQAAAAD/AAAA/wABAf8A/wH/AP8BAAIAAQAB///+AAAAAQABAP8A/wEAAf//AAEB/wD/AP8BAQEA////AAEBAP8AAAD/AAEAAQAC/wD+AAAAAAEBAP8BAP//AAEAAAABAQD///8AAAAAAQAA/wEAAP8AAQAAAAH//wAAAAABAP8AAAIAAf//AP8A/wABAAAAAQEAAf///wEA//8BAQAAAAD/AAEB/wAAAf//AAEB//8BAQH/AP8AAAEA/wAAAQAA/wEBAP//Af//AAABAAH/AAAB////AAAA/wABAQEBAAD/AAAAAQABAAAA/wD/AP8AAAEBAAAAAQAAAAD/AAAAAAAAAAAAAAAAAP7//wECAAH/AAAAAAD/AAABAAAAAAD/AQAAAP8AAAECAAAAAQD//wAAAAAAAP8A/wD/AQAAAAEBAAAAAAAA/v8AAgAA/wD/AAEAAP8CAQH/AP8AAAEAAAEAAP8AAP8AAAEAAP//AAABAAAAAAAAAAAAAQAA/wEAAP8AAQAA/wAA/wEAAQAAAAAB/wD/AgD///8AAAEB/wAAAQAA/wAAAQAA//8AAgEA/gAAAgAAAP8A/gEAAAAAAQH/AAABAP4A/wD/AQAAAAABAAEA//8BAQD+AAEBAP//AAIBAP8AAQAA/wEBAf///wAAAAABAQH/AAAAAPL184B/g5WVlvr5+AAAAAAAAAAAAQAAAAICAS4uEISBHUpHEAH/AwACAwABAv79Fvn8Jvv/H/8ACf//AwIAAQAAAgEBAf8AAQAAAAECAQD/AQECAP/+/wACAAH/Af//AAABAQAAAQAAAP8BAAEAAQAAAf8B/wD/AQD/AQAB/wD/AQABAP//AQABAAEAAf//AAABAQH/AAAAAQEBAgD/Af8BAQAAAAEAAQABAQAAAgABAQD/AwEAAQAAAAABAgAAAgEAAQD/AAAAAwACAQEBAQD+AgACAAAAAwIBAwAA/gEAAgEBAwEBAgEABQICBQEBAv/+AAIA/v7/9f8B5gEB5f7/4dbZya+ty6Ce4eDf/gAAAgAC/wD+/wABAgD/AAAAAQ0PDnh3dGlqZxAODwAB/wAAAgAA/wEAAAAAAf8AAAEA/v//AQAAAAEBAf//AAABAIuKi3d3dwAA/wAAAgAA/wAAAAIGCj1acyw3QgMEBQICAwMCAwUFAwUEBAEBAgD/AAECAQEAAAECAQD/AQECAQAAAQEA/wAAAQAAAAICAQAAAAECAQABAfLs6MGxoc/As/r6+QABAv///gABAQD+AP8B/wAAAQD//wEAAP/+/wICAf8AAQIDAgACAwIDAQD+AAABAAIDAwECAQIBAgEAAP/+AAEBAAMFBh0yPjJOYA4SFsGeiNe/r/349gAA/wAA/wAAAgAAAAAAAQAAAAID//7/AgD/AAEAAAAAAAEBAP8AAP///wD/AAAAAAABAQABAAAAAAH/Af8AAAEBAQAAAAEBAv//AP/+/QABAAAAAAAAAQAB/wAAAAAAAAAA/wAA/wAAAQAAAQAAAQD//wAAAAQDASMWBBIH/RoQASUS/x0RABMJAR0SAiAYARkT/gH9/f8A/wECAAAAAP8A/gEA//8BAAD//wECAAAA///+Af/+/wH3AAD1Af/8AAL7Av/9AAH+AgD9AP/8AQD/AP/8AQD3AAHxAQD7AP/8AAH9Af/+AfH8AGvU+Kft/AAAAAAA/wAAAAkKDaysqElJSQEAAQAAAP8A/wAAAAEAAf4AAAEAAAAAAAAA//8A/wD/AgEAAP8B/wEAAQAAAAH//v8AAP8AAQD//wABAQAAAAD+//8BAAH///8BAgIB/wAAAAD/Af4A/wEAAAAAAQAAAAAA/wAAAAAAAQAA/wEAAAABAAD/AAAAAf8AAAEA//8AAQAA/wD/AQABAAAAAAD//wACAQD+AP8A/gEBAQAAAAAAAAAAAAEBAP7/AAEAAQAA/wAA/wAAAgAA/wD/AAABAAAAAP8AAAEAAP8AAAAAAAAAAQIA//8AAQAA//8AAAEAAAAAAAD/AP8AAAEBAAEA////Af8BAAEAAAD//wAAAQAA//8AAQAB/wEAAAD/AQAB/wAAAAAAAf///gAAAwEA//8AAAABAAD/AAAAAAABAAH/AAABAP8AAAD//wEAAAABAQD/AP8BAQAA/wEBAQD///8AAQD//wAAAAABAQH//v8AAQEA/wABAf//AAEBAAD/AAAB//8AAQH///8BAQH///8AAP8AAAIAAgAB//8AAAEAAAD/AP8AAAEA//8AAQAB/wAAAQEAAAD/AQAB////AQAA/wAAAQAA/v8AAQEA/wABAQEAAAAAAP///wABAAAAAQAAAAAAAAD/AAABAQEB/wH+Af4B/gAAAQD/AAH//v8BAQACAgH///8AAAH//wABAQD///8BAQH/AP8CAAH//wAAAf//AAAAAAEA/wAAAf//AAECAAD/AAAAAAABAQD///8BAAH/AAAA/wABAf8AAAAAAAD/AAAB/wD/AAH/AQECAAAAAAD/AP8AAAAA//8BAAEAAQAAAAAAAAAAAAAAAAD/AAABAAAAAP8AAAAAAQEA/gAAAAAAAQD/AP8B/wEAAf8AAAEAAAD/AP8AAAEB/wAAAQD//wAAAQEBAP8AAAEAAQAA//////8BAQEA//8AAQD/AAAAAAABAAIA//4AAQAAAAEAAAEAAP8AAAAAAAAAAAAAAQEA//8AAQEAAP8B/wHw8PBtcHKmpaT+/v8A/wAAAAAAAAEAAAAFBgJuaxlybRQaGQj//wEBAAYAAQX9/hL4/jP8/hwBAQQA/wIBAgMAAAH//wEBAQAAAAD/AAIAAAAA/wEAAf8AAQEBAAAAAAD//wAAAQEA/wAAAAAAAgAA/wAAAAH+Af8CAAIAAAAAAQH/AAAA/wEA/gEAAQABAAAAAAH/AP8AAAIB/wD/AAEBAwH//wEC/wD/AQEAAAIAAAEBAQIA/wABAQL/AAEBAQIAAAEAAAAA/wIAAAIBAQEBAQEA/wEAAQL/AAEBAQEBAAAAAAIBAQEAAAABAAMBAgQCAQQBAQUBAAQA/vwAAPoAAO8BAewBAuv8/uDU07yhm8evt/bh4AAA/v8AAAEAAAAAAQEA/wAAAf8wMzNzcW5ZWFcBAQECAf8AAAIAAAD+/wABAQAAAAABAP8A/wAAAAHW1tdHSEfk5OQAAAAAAAEAAP8AAQE1TGMwQ1b49fL28+/9+/oCAAACAgEEBAICAQMBAQECAwMCBQgLDRALDhMJCwsCAgACAQIAAQEBAQAAAAABAQABAADd1Mu2oI3p4twAAgH/AQEC//8VFxj5+/vw7u4AAgIB/wD/AQAB/gABAQH/AP8B/wEAAgABAgMAAAABAQH///7//wEBAP4AAQIEBQMDBAUB/wADAgL/AgISHiYxWHAZHCPiz7/DoIry6OEAAP8AAP8AAAAAAAACAAACAgL//gD/AAAAAAIAAP8BAP7/AAEAAAAAAP4AAAEAAQP//wAAAAEAAAIAAAACAAEAAAADAAEAAf/9//4HAv8QCAMBAP8IBQELB/8RCf8AAAADAwEvFwARCgADAv8dEgAVDQEpHQMZDwIGA/wA/f0A////AAIBAf4AAAD/Av8AAQEAAQAA//4BAgD/Af8BAAH/Af8AAgEB/f8A/wH//AAB+gD/9QEB+QIA+QEA/gAA/wAA/gIA/gL//gAB/P/++f8A9v8A+AAB/gEB/QL//QH//QHu/P9y1/2k7Pj/AP8AAAEAAP8AAACDhYZ8enj/AAABAP8AAAAAAAD///8AAQL/AAAB//8AAAEAAQD///4BAAEAAAH/AP8AAQEA/wAB//7+/wEAAAAAAAABAAD+AQABAAABAAD///8BAAD/AAAA/wEAAQD/Af8BAAAA/wEA//8AAQABAAH///7/AQIBAQAAAAAA/wABAP8AAAEAAf///wH/AAABAQAB////AAEBAAAAAP//AP8A/wEAAQAAAQD//wACAAD+AQAB/wEBAf8A/gAAAQD/AAEAAQD/AAAB//8AAAD/Af8BAAH//wABAQD//wEBAQAA/wD/AP8BAAAAAQEB/gD/AP8AAAAAAQAA/wD/AQAA/wAAAQAAAAAAAQAB/wAAAAAAAP8AAAEA//8AAAL/Af8B/wABAQD/AP8B/gH/AgAA/wAAAQAA/wEAAP8AAQD/AP8A/wABAAEAAAAAAP8BAAH/Af8AAAEB/wH+AP8BAAD/AAABAAAAAP/+AAACAAH+AAEDAf/+AAAA/wAAAAABAQD/AAEBAP//AAD/AAABAP8BAAAA/wEAAAAAAQAA/wD/AAAAAAAAAQAA/wABAAAAAAD/AgAA/gABAP//AAIAAf8BAAAAAAD/AAAA//8AAQEBAAD//wABAf8A/wD+AQEC////AQEAAP8A/wEAAP8BAgEA/gABAQD//wAAAP//AAAAAAEBAQAA//8AAgEA/gH/Af8B////AQEB/wD/AAABAAAAAAD/AAABAP//AAEAAP8AAAEAAP8BAQIAAP7//wAAAAEB////AgEAAAEBAAAA////AQABAAD///8AAQEA//8BAQH//wABAAAAAQD+AAAC/wAAAAD/AQAB/wAAAf8AAAEAAP8AAAAAAAAAAAIA////AQABAQAA/wAAAP8AAAAAAAAAAAAA/wEAAAD/AP8BAAEAAgEA//8A//8AAAH/AP8AAQEAAAABAAAAAAEA//7/AQEAAQAB/wEB/wAAAf7+AAICAAD/Af8AAAEA/wAAAAABAP8AAAAAAAH/AAAA8/T1bGtvo6KjAAH/AP8AAAEAAP8BAAAADA0ChIAga2cSAgMBAQADAf8C/v0X+v8g/P8g/AAVAgAEAAEAAQABAAEBAP8AAAAB/wEB//8AAgECAAAAAAH//wAAAf8B/wABAQAB/wD/AQAB/wH/AAD/AAACAAAA/wAAAf8AAAEBAAAAAAIBAP4A/wAAAAAAAAABAQAB/wAAAAAAAAABAAACAAAAAAABAQAA/wAAAQEDAAD/AAACAAABAAABAAAAAAACAQECAQABAAEC/wABAf8AAAECAQAC//8AAQEBAAABAQABAAADAAAAAAEBAQEBAAECAf//AAECAgEBAQADAgIEAQAF//79AQH9AADtAQPiAQDb+fjZ19bFoJ/gq7D55uUAAAAAAP8AAAAAAAABAAAACQoKZ2dlgYF+DQwN/wD/AQABAAH///8BAQH/AP8AAAAA+/r8Y2NkpKWjAAAAAAD/AAAAAAACBgkKHCo77+bh9e7m+vn0AQD//wABAAD+AAACAAAAAAAAAAAAAAACBQkODBIZDBEVCQwPFx4kEhkeGB8kGh0h/gABzLusvamW+ff0AAEBAP7/EREPY2Nha2pn4OLkvcDCs7W30s/R/wD/AAAAAP4BAAD/AQABAAIA//8AAgEA/v8AAAAAAP/+AAABAQIBAQEABAQFAgQEAQEEAgIAAAECEBogNVdtFR0j8OTdvJd/7uHWAAD/AAAAAgAAbC0IdSoC9f0B9fv96vj+7P7+/gP/AAIA/wABAgMB/wAAAwL/BgL/AgIBBwP/AgEABQMABAMABgQABAH/AQACCQUBEAgCAgD/CgYADAr+BAb+AAABAAEAAQD//wEAAAEAAAEAAAABAAL/AAIA//0AAQIBAAD/AAABAAIAAQEAAAD+AAEB/wQBAf7/AAAAAAD///4AAP7///4AAv8B//UCAfoBAPoDAPoCAP4BAP4A/wEBAQABAPr///sAAPr+//b+APwAAP8AAPwC//4BAv4B/f4A6fgAcNv6ru37/gD/AP8AAAAAAAABXmFflpKTCgwLAAD/AP8AAAEAAQAA/wABAAAAAP8A/wD+AQAC/wH/AQAAAP8B/wAAAAAAAQH//gAAABaE6XsBYmJlGhsZDgwPBQQDFhkXGhcYAwQCEhUUBwQGIiUjAQABAP//AP//AAEB/wABAAD/AQAAAAABAAAAAAD/AP8A/wEAAQAB/wH/AQAAAP8BAAD/AAAB////AAH/AAAAAgAC//8AAAL/AAAB/wAAAf//AAAAAAEAAP8A/wD/AP8BAQIBAP///wD/AQABAAAAAAAAAAD/AAACAAD/AAAAAAAAAAEBAf///wAAAQAA/wD/AAEB/wD/Af8AAAABAAABAQAA/wD//wAAAQD/AAAB/wAAAQAAAAD/AAABAAAAAAAB/wD/AQEAAP8A////AAEAAf8B/wEAAP8AAAEBAQD//wAAAAD/AAABAP8A/wEAAf8AAAH//wAAAf8AAQAAAAEA//8AAAEAAQAAAAAA//8AAQEAAAABAAD/AAABAAD//wAAAAAAAf8B/wEAAQH///8AAP8AAAAAAQEAAAAB//8AAAD/AAABAAH/AAABAAD/AAABAAD/AP8AAAEBAf///wAAAQEBAAH/AP8A//8AAAABAQEAAP///wEBAAAAAAD/AQEB////AAAAAQAA/wAAAP8BAQH/AAAAAAACAAD//wAAAgAA/wAB/wD/AAAAAQAAAP///wABAQEAAAEA//4AAQEA/wD/AQAB/wD/AP8AAQEB////AAAAAQEC/wD+AP8BAAH/AQAAAAAA/wABAQAA/wD/Af8B/wH/AAABAAABAAD+AAAAAQAB/wAAAQH/AP8B////AQEAAP8BAAD/AAEBAAAB/wD/AQD//wAAAgABAAAA/wEAAP8A////AQEBAQEA//8AAP8A/wEAAAD///8AAQEBAAAAAQAAAAAAAAAAAAAAAP8AAAEAAAD//wABAQAA/wAAAQD/AAAAAP8BAAEB/wH/AP8AAP8AAQIAAP8AAAEAAP8AAAEAAP4AAAIBAP8AAAH/29vda2tuvLy8AP//AAD/AAACAAD/AAD/MDELg4AaSkYSAQADAAACAAAK/P0d+Pww/QAPAAACAgIF//8CAQEBAAECAQAA//8AAAECAQAA//8A/wEAAQABAAD/AQEB//8A/wABAQD//wD/AQAA/wABAQAA/wEAAQABAAEAAP8A//8AAQEB/wAAAQAB/wD/AAABAAAC///+AQEA/wAAAQECAP8AAQAB//8AAQEC//8AAQECAQAB/wABAQAAAAEC/wAAAAACAQEBAAACAQAC/gAAAQD/AQED//4BAQICAAABAAAAAAABAgEC//8BAQEBAAABAAABAAABAQEB//8AAgEBAQEDAgEFAQED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Af8BAAAAAAH//wABAAABAQD/AAAAAAEAAAAA///+AQAAAAD+AQEBAAABAP8AAAH/AP4AAP//AQIA//8AAAD/AAH/AAAA/wABAf4AAAEBAP8A//8AAQIAAQD//wAAAQAAAAABAP//AAEA//8BAAH/AQD//wABAAAAAAABAAD/AAEA//4BAQEBAP////8BAQEA/wD/AAAAAQD/AP8AAAEBAAH///4A/wL/Af8AAAAB/gD/AQAA//8AAAEAAf8AAAEBAAEAAQAA/wAAAQEAAAAAAAAAAP8AAAH//wAAAP//AQIC////AQD/AAABAQAB////AP8BAAAA/wEAAQAA//8AAAH/Af8C/wEAAAAAAAABAAAAAP8AAAEAAwIA//4A/wEAAf8BAAH//v4BAQEBAv////8BAAD//gEAAf8BAAD/AP8A/wABAAEAAAAAAQEA////AP8BAQH//wEBAQABAAAAAAEAAf8AAAH///8BAQEAAP///wEB/wEAAQD//gAAAQAA/wD/Af8BAQAAAAABAf8A/wEAAQAAAAAAAf8AAAD/AAEBAAD/AAABAQEAAP8BAAEA////AAEBAQAAAAAAAf8AAP8A/wEAAQEBAAD/AP4AAAEBAAH/AP//AAAAAAEBAf//3ODfkZOUAAD/AAD/AAABAAAADhABYl4GAQAF/gEQ/f4S//8EAQAA//8BAAEBAQAC//8AAAIB//8BAQAA/wH/Af4AAQECAP//AQEA/wD/AQABAAAAAQD/AAABAAAB/wAAAAAAAgD+/gAB//8AAAEAAP8AAAAAAAAC/wD/AgD//wEAAAAA////AP//AQD//wD/AAAAAP/+AAD+AQL///7/AAD9////AgEAAAD//wH9AAD9////AAD/AP8AAQD/AAH+AAH/AP////7+AQH/AAAA/wD+AgEB//7+AQEBAAD//wAAAf8A/gAAAQH+Af8BAAH/AP8BAAH/AgAC/gAAAQAB/wD/AAAAAP8BAAACAQAAAQD///4AAAH/AP///wH/AQACAAD+AQD+AAAAAP//AP8BAQH+AAD/AP///wD+AAEAAAD+AAAAAAD+AP/9/v/9AQL/AAD9AAD//wH9AP/+AQD////8AQD8AQH9///+AP/9AAH9/wH9AQH/AAD9AQH9AQD9///9AQH///4G/gIMAgL5AAH//gD/CwsBe2v4y9AE5+j/AAAB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Af8B/wEBAQAB/wD/AQAAAAD/AAACAQL/AAAA/wD/AAAB/wAAAQAAAAAAAP8AAAAA/wD/AAEAAAAAAQAA/wD//wAAAQEB////AQD//wAAAf8C/wAA/wEAAQAA//8BAAEAAQAA/wEAAv4A/wEAAv8BAAAAAP///wAAAQEBAP8AAAEAAP8A/wD/Af8AAQEBAAEA//8AAf8A/wABAP//AAEAAAAB////AgEAAP8B/wAAAAACAAEAAAAAAAAAAQD///8BAAH/AgAB/gABAAD/AP//AAABAgEA////AAICAP/+//8CAQH//wABAQAAAQAAAAD/AQEAAf4A/gEAAAAA/wABAQD/AP8BAQIA/wAAAAD/AAAAAAAA/////wIBAf//AAAAAAEBAP///wABAQEAAP/+AAAAAQEB/wABAP//AAAA/wEAAAD/AAEByMnJoaChAAAAAQD+//8D/wACJCP+XFYFAAAHAAAO/QAN/wAEAAECAf8BAAAB////AQEAAAD//wH+AAADAQD//wH+AP8AAQAB/wEBAf//AAH/AP8C/wD+AQACAAEA//8AAAD/AAEAAf8A//8BAAEAAAD+AAD/AAH/AAD/AQEBAAH/Af8A/wH/AQD/AAD/AAD+AP//////AgH/AP//AgH9AAD+/wAAAAD+AQD/AAL+//79Af//AAH+AQAAAP/+/wH/AP///wEAAAAAAAD+AQAA/wAAAP/+/wEAAP/9//8AAAAAAQAAAAAAAAD/AAEAAf//AAAAAAEBAP7/AAH/AAAAAQAA/wD//wAAAAAC/wAAAAAAAAH+AP8BAAMAAP8AAQABAAD+AAEAAP/8/wEBAf//AAAA///+AgD/AAEAAP/+AP/9Af/9AAH//wD+/gH+AgD/AP7+AAEA/wD+AQD+AAH9AAD+Af//AAH8Af7+AAL+AP/9AAH/Af79AAH+AAD9Af/+Af/////9AAH9AgH9AAD+AP8DAf8DAAABAQH+AAEA/gD/AwIAOzL+tr//AQIEKy0vFhQO/wEAAgAB//8AAAAA/wEAAQAAAQEA/v8AAAAAAQAAA/4A/gD/AAECAP//AAH/AAAAAP8AAAEAAP4A/wIAAf4BAAABAQEA/wAB/////wEBAf//AQEB/v///gAAAQIBAAEA8fLxAAD9AAEEAAQF+//8AwAC/v7/AwIB//4AAAD+AAECAP7+AQMA/f8A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AAD/AAAAAAD/AAABAAEB////AP8AAAEAAP8AAAD/AAEB/wAAAf//Af8B/gAAAQIBAAAAAP4BAAH+/wAAAQAA//8AAQEB/wH/AAABAAL/AP4AAQEB/gD/AAD/AQEBAAH/Af8A/wAA/wD/AQD/AAABAQH/AAABAQAA//8B/wD/AQIBAf8A/wEA//8AAQAA/wD/AQEB/wD/AAH+AAAC////AAEBAAAAAQD//wABAAABAf8A/wIAAP//AQAB////AAD/AQABAQAA//8BAQEAAP8AAQD/AQAAAAABAAD/AgEB/gAAAAAA/wIAAP8BAP8AAQAA//8AAAAAAAEAAf8A//8A/wAAAf//AAECAAH+Af8B/////gIAAQABAAAA/wAAAQEB//4A/wL/AP8AAQAAAP//AAABAAD+/wAAAQABAAD/AP8BAQAAAAEAAP8AAAABAP8AAQEBAQH/AAD//wAAAQEA/wACAAD/Af8B/wAA/wD/Af8BAQH///8BAQD/AAABAAEAAQACAP//AAAAAAAAAP8AAQEB/wAAAgAA/wD//wABAQAA/wAAAQAA/wD/AAEAAAAB/v8Ar7Ky8/HzAAAAAAEBAQAC/wH/U03+Gxr7/QAN//8LAP8EAQD/AAEA/wAC/wACAAD+AQAB/gH/AP8D/wD+AP8CAQAA/QD/AQABAQAA/wH/AAAA/wH/Af///v8AAAD+AQECAAD+AP8AAQEBAAD9AAAAAgD//v7/AQEA//8AAf///wH/AAH/AQAA/wD/////AQH9AAEAAQAA/wD9////AAD/AQH+///+AAD//////wH+Af//AAH/Af/+AAEA/wD+AAD+AP8AAQH+/wIA//7+Af//AAH+AAH/AQAA//7/AAEAAAAAAAH+Af8BAAD+AgD//v8BAQD/AAD/AQD+AAAAAQAA/wEAAf4BAAEBAAAB///+AQEAAQIBAf7+AAABAAD+AQAAAQD//gD+Af8AAAD//gD+AAD/AAD+AgH+AAEA///+AAD+AQH/AP///wD/AAD+AQD/AP//AQD+AAD+AP/+AAD9Af///wD+AAD+AQAAAAH/AAD+/wH/AAD+AAD+Av7+AAH9AAH//wD/AQEA/wEAAP/+AP/+/wD+AAEE//8CAAEA/wAA/v7/AP8AAQEBAAEHAQEIDg0PAAD/AQAAAf8A/wD/AAEBAgEA+/r7xcTFu7y8x8XJ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AAACAAAAAf//AAACAQABAAH/AgAB/wABAAD/AP8AAAH/AQAAAP8BAAD/AQAA////AQEAAgD/AAAB/wD/AP///wEAAQAAAf///gH/AAAA/wH/AP8AAgD//gEAAf//AQEA/wD9AAEA/gEAAQL//8z0AJ7q/aPq/PX+AAAAAAAAAAAAAQAAAgMGBGNkZISAfhMREv8B/wD/AAABAf///wD//wQAAP8AAAAAAAABAQAAAQD//wEAAAD/AAECAQD/AAAB/wEAAAACAAD/AAEA/wAAAP/+AAABAAAAAf8A/wABAQD//wEBAQD//wABAAD///8AAQH//wAAAQABAf///wD/AAABAQD/AQD/AP/39/igoKGLi43g4N8AAAAAAAAAAAEA/wAAAAECAQJSUVCSk48ZGhr//wAB////AQEB//4AAQD///8AAQEA//8AAQL/AP8AAAAB/v8AAv///wEBAAD+AAABAP/+AP8CAgH//wABAQAAAAABAP8BAAD//gAAAQH///8AAAEC/gH+Av4BAAH/AgEA/wABAAAAAAAAAAAAAAAAAQIA////AQD//gACAf//AAAB/wAAAQAAAf//AAD//wABAf4AAAH//wABAAD/AAEB//4BAQAA/wAAAQEAAP8AAAH+//4BAQH/AAEA/wAAAP//AAAB/wL/AP8BAQAB//8AAAAA/wABAAEAAQEA//8BAf///wECAQD/AP8AAQEAAAAAAP8AAAEAAAAB/wD/AAD///8BAQAAAQAA/v8AAQIA/gABAf/+/wH/AQABAQEAAf7//wEBAP8BAAEAAAD/AAAAAAABAQD///8BAgAA/wD/AQEAAAD///8A/wAAAgEAAP8BAAAAAAEAAAACAAAAAAAAAP8A/wIAAAAB//8AAAAA/wAAAgEB/wAA/wAAAQEA/wH/Af8BAAAAAAH/////AAABAAAAAv8BAAEAAAAAAP8AAAAAAAIAAAAAAAAB/wAAAAAA/v7/AQEB//4AAQL///8C//8AAAAAAgH/AP8BAAAA////AQEA/wAAAAD+AP8BAQIAAP8A/gH/Af8B/wEAAv///wEAAgGwsbHY19gAAP4AAQAAAAABAQFQSQE4NgABAQMBAAcAAQYA/wIBAAP/AAEBAgAA//8AAQD+//8BAAEB//8AAAH///8BAQEAAf8BAP//Af8AAAAAAP8AAP8AAP////0BAQMBAP8AAQH+/wEBAAD/Af4C/wH/Af8AAP8A//8BAP//Af4BAv4A/wD///4BAAAAAAD/AQAB//3///8AAf4BAf8AAP7///8BAP/+AP0BAv4A//8AAAAAAP8AAP4B////AP7/Af4BAAL/AP4A/v4BAf4AAP8A/wABAP7///4AAAABAv///f4AAAAAAQAAAQEAAP8B/wEAAP8AAP4BAP//AAABAP4A/wH/AP7/AQAC/wMA/wAAAQABAAAAAf0B/v//AAABAAH///8AAP4BAAAA/wD/Af0BAP4AAAEA/wAAAf4A//4A//3///8CAP3/AP8AAAD/AP0CAP8AAf7/AQAA//8BAv4A/v0B//8A//8AAP4AAf3/AP4BAP4AAP8A////Af0BAP8A/wAAAf4AAP4AAP4BAP4AAP0A//4AAP8BAQH/Af///wD/AQD//gD19wH/AAYQExgYFRP/AQACAQD//gCys7SQjpHEw8IAAAAAAP8AAAAAAAAAAAAAAAAAAAHy8PF/fH5AQUIeHh4AAQH+//8CAQH/AP7+/gABAf8AAf//AAAA/gABAf8AAQH//wAAAP/+/wABAADX1df/AAEAAAEFCw7+Af/+AP8E/v4AAQEAAQEA/wIB/QH/Af8A/wAA/v4CAQIAAv4C/QIAAf4A/gEAAQEAAAH/AP4A/wAAAgIAAAH/A/8DAAD+/gAAAAECAP/+AAABAQH+/v8AAQEAAP8cJi8ZIizn3tMAAP8AAAAAAAEAAAEAAv8AAAIBAAABAP//AP8BAAH1/gGx9AC09f0sA/5JDQI+DwI7DQENBAL//f/+AAABAAAAAAAAAP7/AQEAAQEBAQAAAQAAAQAAAAAAAwEB//8AAAEBAQAAAgD//wEAAQAAAAEAAf//AAAA/wEAAP8AAAAA/wECAQH//wAAAAD/AAABAgAA/wMAAP7///8AAf8AAAH/AAAA/v8BAQD/AQABAAAA/wD+AQEB/wDw+wC48f6t7f287/7y/v8AAAAAAAAAAAAAAAAA//8ICQiAgYB0cnACAwL///8A/wEAAAAA/wAAAAH/Af8EAAEAAP4AAAABAAAAAAAAAAD/AAABAQAA/wAA/wD/AQABAP8A/wH/AP8AAAEAAAABAgEA////AP8AAP8B/gD/AQEAAP//AAEB/wAAAQAA/wAAAAAAAAAA//8BAAEAAP///wAAAAAAw8LEh4aIuLm5AAAAAAAAAQAAAAAB/wD/AAABHyAgfXx5XFxbBwcH//8AAAD//gEBAf///wEBAP8A/wABAf8AAAABAAD/AAD/AQAB/wEAAf8BAQAAAAH/AAABAQAAAAABAP8BAQD/AAAAAQEA//8AAAABAAH/AAH/AQAAAP8A/wL/AAAC/wAAAP/+AP8BAAEA/gAAAQEAAP8AAQD+/wABAP7/AQEC/v//AAAB////AAH/Af8B/wAAAQEA/wABAAEAAAD/AQAAAQIC//8AAP//AQEBAAAAAQAB/wD/AAACAAEAAP4BAAD//wEAAf8AAAD//wAAAv8A/wABAAAAAQAAAAD/AP8AAQEBAAAAAQL///8AAAAAAQD//wAB/gABAQD/Af8B/wH/Af8CAQEAAAD/AP8A/wAAAAD/AAEB/wEAAQD/AAEBAP8A//8BAAAAAAAAAP8A/wD/AAEAAAAA/wAAAAABAP8AAAAAAP8AAAH/AQAA/wH/AP8A/wAAAQEBAAD/Af8BAAH//wAAAQAAAf//AAD/AAABAP8AAQAA////AQABAAIA////AAH/AQACAAH/Af7//wEBAQEB////AQAA/wAAAgAA/wECAAD+AP8AAP//AgAB/wABAP/+AAABAAEAAAABAAD/AAEAAAABAQEA/wAAAQAAAAD///8AAQEA/wL/AgABAP8A///+AQEBAAH/AQAAAAH/AP8AAAEA/wD+sLGyAAD/AAABAAH/AgAA/gEATkkBAQEB/gED/v8MAP8C//8B/wEAAP4B/wP/AQD//v//AAAA/wD+AQAA/wECAP8AAQD//wH+//8AAQEBAP4BAAH/AAD//wH+AgAC/wD9/wACAAABAQD+AAAAAQAA/wD+AAD//wH/AAH//wAAAP/+AQD/AAAAAQD/AAD/AQEBAP/+AAD+AQL/AAD8AP8AAAD+AAD/AQD/AQD/AAD8/wAB/wAAAP/9AAH+AAD/AAD+AAD/AAD9AP8CAgD//wD9AAD+AAAA////AAL/AAD+////AAH/////Af4AAAEAAQAA/wAAAAAAAAD/AAD9AQEBAQD+/wADAAH+AQAB/wL9Af4AAAAAAP8A/wH+AAEAAQAA/wACAQAAAAH////9AAD+Af///wAAAAD/AgD//v/9Af//AAAAAgD+/wH8AQAAAAH/AAD+////AAD/AP/+AAAAAP/9AQD+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/wAAAAEAAAAEAAAAAP4A/wEAAAABAAD/AP8BAAD/AP8BAAAAAQAB/wAAAP7//wEBAQEAAAAA/////wAAAAEAAP8AAQAA/wEAAQD//wAB/wD/AQAB/wD//gAAAQAB/v//8O/vj4+RkZKU8/LxAAACAAD/AAAAAP8AAAEAAAEBRURCf4F/OTk5AP//AP8AAAAAAAEAAAAAAAAAAAABAQAAAAAA/wABAQD/AQIA/wAAAQABAf8A/wEAAP//AAABAAD/AQH/AAAB/gD/AQACAP8A/wAAAf8AAAD/AAEAAP//AAABAQAA//8AAAAAAAAAAf8B/wEAAQAA/wEAAP//////AAEAAAEAAf8AAAAA/gEAAf8BAAEA/wAAAQAAAAAC/wAAAAABAAD+AAABAAAAAf8AAQAAAAEBAAD///8CAQAAAP///wEBAAEA//8AAQAAAAD///8AAAD/AQAAAQAC/wEA/wD/AQD//wAAAQEAAAAAAQAAAP8B/wAAAQAAAAAAAAAAAAABAAEAAP8AAQAAAP///wEAAf8BAAD/AAD/AAEBAP8BAAH/Av8B/gAAAf8AAQEA/gAAAQIA////Af8AAAAA/wAAAAABAAABAf7/AAIBAP8A/wIAAf8B/wD/AgAA/v/+AQAB/wAAAQD/AQABAAABAQD/AAAB/wD/AP8BAAAAAf///wAAAP///wIAAf4AAAEAAAD/AAAAAAAA//8AAAEAAQABAP7//wIBAf8BAP//AAD/AQEA//8BAf//AAABAQAA/v8AAgEC/wD/AQH//wAAAP8AAQAB/wH/AQAA/wAA/v8AAAIAAf8AAQAA/wAAAAH+AAACAAD/AP7//wECAQAAAAAA//8AAQAA+Pj5sLCwAAD/AAH/AAAB/wABDg7/Ukz//v0CAAQGAP4NAAACAQD//wH/AAH+AP//AQD//wD/AP/+AAD//wD/AAADAAH/AP4AAAABAAEBAgD/AAH+/wAA/wEDAAD+AP8B/gAAAQD/AAEA///+AAAAAQD//wAAAP8AAQL+//7+AQAAAAABAP7+/wAAAAD/AAD/AAD8AAD/AQEAAAD+AAEAAf/9///+AQD/////AAH9/wAAAQD/AQH/AAD/AP//AP/+AAD/AAD9AAD/AP//AgH/AQD//wH/AP8AAgH9AP///wD+AQD+AAH/AP//AAAAAAH////+AAABAf//AAH/AQH+AP4C/gAAAQD/Af8AAQD//gD8AQAC//4BAAD/AAAA////AAD/AAH/AP/9AQEAAP4A/wAC/wD+AP//AAD/AAD+AQEAAP/+AAD+AQAAAAH/AP/9AQD+AAD9AQAAAAD9AQD/AP7//wL+Af//AAD+AP4AAQL+AP/+AAD+/wH+AQAA///+AQEBAAAA/wD/Af/+/wH+AAD/AgD+AAD/AAD//wAAAQAAAAD///sAAP7/AAAAAP4A4+cDAAD5+PnvYF5jx761AAD/AAABAAABAAAAAAAAAAD/AAD/AAACAAABAAEAAP//AAAAAAD/AAAB6ejpAAAA////AAAAAQL/AP8BAP8A/wD/AP8AAAD/AAH/AP8BAP8AAAEBAP///gD/2NfY7u/tAAABAAACBgwS+/3+AwIAAgED/wH//wH//f4AAAEBAQACAQL+AP8CAQD/Af8C/gD+Af0B/wIC/gD/AQL+//4A///+/v8D/wP+//3/AgIDAQL/Af3/AgIA/gIAAf4BAAAC/wH+AAACAQD/AQECIC464dXHAAABAAABAAD/ycjJj42KNjU4eXV2wcTDqqqutLSz5ePiAAEC////AAAAAAH/AP8B/wD/AAAAAAAAAAEA////+v8A0Pj/z/kAAQAB/wH/AP8BDAL/KwgBFQMAHQcDFwYBBgAACwL/DgD/CQMBAAAADAYCBP/+DQYCAAH+9P8AyvH8/P8ABgAC/QP+9Pr+1fb/0vX96/sB+AAAAAAAAAEAAP//AAAAAAACAAD/AAAAAAABAAH/AP8AAAD/AAACFRgYWlpaYWFdLyssAAEAAAAB/gAA////AAABAgAA/v//AQEAAP8AAAAAAQAAAQAAAAAABAH/AAABAAAA/gEAAQABAf///wABAQAA/wAAAP8AAP8AAQEB/wEA/wD/AAAAAf8BAAH/AAD/AAL/AP8CAAEAAP8AAAEA////AP8A/wAB/wAAAQH/AMLDwnh2esjJyQAAAAAAAAAA/wAA/wAAAQAAAAIAAVdYVIyMihoaG///AAEAAf//AAACAf8A/wEA/v4AAgH//wAAAAD/AAEBAAAAAP//AAAB/wD+Af8CAAAAAAABAAAAAAD/AQAAAP8A/wEAAQAA////AAAB/wAAAf8AAQEA//8BAQH/Af///wABAP8AAAD//wEBAP8B/wD/AQD/AAH/AQEBAf//////AAAC/wD/AQH/AP8AAAH/AAAB/wD/AP8A/gH/AQABAP8BAAD/AAD///8BAQD/AAAAAQEBAAD/AP8A/gABAQAA/wEAAAAAAAABAP//AAEBAQAA/wAAAf4BAAH/AAEBAAAAAAD/AQAA/wAAAAAAAP8BAAAAAAD/AQABAQD///4AAAEA/wABAQD///8BAQD/Af8C/wD/AAAAAgD//wAA////////AAEBAQABAP//AQEB////AAAAAQAAAP8AAAEAAAABAP/+/wAB/wH/AP8BAAD/Af8A/gEAAf8AAAH/AQAA/wABAf8BAAAAAQEAAP8B/wAAAAL/Af8A/wABAAD/AQACAAH/AP7/AAEAAAEAAAAAAAD//wEAAQABAAEAAf8A/wEBAf//AP///wABAAH/AAAAAAEAAAAA/wAAAP8AAQEBAP8AAAABAAD/AQEBAAAAAf8A/wAAAP8AAAAAAAEBAQD/AP8BAAAAAAIBAf///wEA//8AAAEBAQEA/wAAAAAAAAEAAAAAAMTEw8fHyAD//wAA/wABAAICAUhEAi8u+v8ACP//C/7/BQAAAgAAA///AAAA/wH//P8AAAH/BQAB/AAAAgABAQEA/v8A/wABAAAABAAA/////wAA/wD/AAEA/gAAAQAAAP8AAAEA/QAAAAEAAP0AAAD//wAAAAAAAf/+/wIA/wAAAAAA/wAA/wAAAAAB/v/+/gEB/gEA/QAAAQAA/v///wEAAAEA/gAA/gAA/gD//gAB/wAAAP8AAAD//gEA/gAA/v4A/gIBAP8A/wAB/wIA/v///wD//v8A/wEA/////gEC/gAAAAAA/gEB////AAD//wEA//8AAAAB/wAA/gD/AAAB/wAAAQD//wAB/v8AAAEAAAD//gABAAAAAP///wEAAAEBAAD/AAAB/wD/AAAB/wEA/gAA/wAA/gD//wD//gAB/wEA//8A/gD//wH//v8B/gAA/////gIBAAAAAP///wEA/wD//v8A/wEA/wAA/wH+/v8A/QAA/wAA//8A/gEAAP///wIA/wAA/f8A/wEA/wIBAP7//wEA/AEB/wEA/gH//AH+/f78AAAAAf7+/+rsAdbaAgIB/djOwvHv6QAA/wAAAAAAAQAA/wAAAAAAAAAAAAAAAAAAAQD/AQABAAAAAQAAAAAA/wAAAfj4+f78/wABAAAA/wD+/wAAAAAAAf///wEAAP8AAAD/AAAA//8AAAD//wAAAQEAAtfW1QAA/wAAAAUPFwcUGQAAAP7+//0D/gD9AQACAQEC/v8AAgAA/wP/AP////4AAAL+//4CAQEBAAEA/wH/AAH/AQD+/gACAwH+/gIAAf8CAv/+/gH9/wACAwH+AP8B/wL/AP4B/QH9AwID/wAAAf7//h0oMwIGCf76+AAA/gAAAdvZ2czLzkdIRgIEA0JAQUE/QYJ/fMHDwrq7vsjHx9nb3Pv5+QAB/wD+/wAAAAABAAAAAAABAf8A/wABAgEA/v//AAAAAAEB/vX/Acv2/f8AAv/y/QEAAP///QABAAAA/wD/AQAB/gAAAQD+AAECAf///wD/AQEAAP8A/wAB/wEBAv/+AAAA/wAAAAAA/gAAAgAAAAD//wAAAAAAAQAAAAAA/wABAQAAAAD/AQAAADM2OVdXVVFQTSMhIgABAQAAAAAA/wD/AAEBAP8BAAEAAAD//wEBAQAA/wAAAAAAAP8AAf8BAAH/AAT/AQEAAP8AAQH+AAEBAAAAAAEBAf///wAAAAAAAAEBAP8AAQH/AP///wEBAf8A/wEAAP8BAP//AgEAAP//AAEBAAD//wEAAf8AAAEAAAHl4uOOkJCen6Hy8PAAAP8AAAEAAAAAAP8AAAAAAP42NjdubmtQUFALCwz/AP4AAP8AAAEAAgEAAP8AAAD/AAICAAD/AQAB/wD+AQABAAAAAAAAAAAA/wEBAQD+AAABAAAA//8AAAH/AP8BAQAB/wEAAQAAAAABAAD//wL/AQABAQAAAAAAAAH/AQAA/wAB/wAAAAABAQD//gAAAAIAAP8BAQEAAP8AAQAAAAAA/wD/AAEAAQAB/wABAP///wABAAABAf8A/wEBAgD/AAABAAEBAQD//wEAAAAAAf//AAH//wAA//8AAAEAAAABAf8A/gIBAf4A/wEAAAAAAP8AAAD///8BAQAAAAD/AAAAAAEBAAAA/wH/AQABAAAA//8AAAH/AAAA//8BAAACAAAAAAH///8AAgIAAP8BAQAAAAEAAP7//wABAP//AAAB/wAAAQAAAP8AAAEAAf8AAP8BAAEAAP8AAAEAAP8BAAH+/wAAAQABAAIAAP8A/wABAP8A/wEBAQD/AAD/AQABAQEB/wABAf////8BAQH//wEBAQD//wABAAD/AAAAAQACAAD/AQECAP//AQAA/wABAAIAAQD/AP8BAAEAAQD//wEAAAABAAAAAQEAAAAAAf8AAAEAAP//AAEBAAEAAP8A//8AAgAA/wD/AAAB/gABAf8AAAD/AAAA/wEBAP8AAAD/AAABAAD/AP/+/wABAAEAAAABAAD/AAABAAEAAP//AAECAAD+AP+6u70A//4AAP8AAQEAAAH+/v5GQwH+//8AAQP//wYAAAT/AAAAAQAB////AP8AAf8B//0AAgH//wIAAQAA//7/AQAAAAIAAAAA//4BAAH/AQEB//4AAQEAAAEA/wD/AAICAAH/Af8AAAH/AQEB//4AAAEA//4BAQH///7/Av8B/wH/AAABAPwBAP8B////Av7///4AAAAAAP4AAP8BAP8A//4AAP//Af4BAf3///8AAAAB//8AAAAAAfwA//4CAP4AAP8A/v8BAQAAAf////4BAf8A//3/AP//Af8B//4A/wAAAP8BAf7//wAAAf8B//4AAf8A/wEA/wAAAP//AQEBAP8A//4AAP4A//8AAQAAAAAAAf8AAP4AAAEBAgAA/gAA/wH/AAEBAP////8AAP4BAf////////8BAf8BAP8A////AP8A//4AAf8AAP4B//0AAf8AAQD///4AAP8CAAH/Af8B//8BAP8AAf3/Af////4AAP8BAP7/Af4A//8AAQAB/v7/Af8AAP8AAP8A////AP4BAf4AAAABAP8BAP4BAf3//P///P//AQH8+gO5wAPX3vf+/Pnx7vwAAP0AAAEAAP4AAAAAAAEAAP4AAAEAAAEAAAEAAgMBAAH///8AAAAAAAAAAAIAAP4VFBT9//0DAQMAAP8AAAIAAP4AAAH/AAAAAf8A/gH/AQEBAAAB////AAD/AP8AAADZ2doAAAEAAAEKFiEBBAf+/v4CAQH+/f8AAgL//gIC/wADBP7+/gEBAgH//f8AAwD/Af////0E/wL+/gACAgP+//8A/wABAP0CAwIAAQQA//8AAP/+/wEB//78/wABAgEBAQEAAAIAAP7+/gIBAQABAQAVHyQbIy3j18sAAAIAAP//AADFxsZHSEcBAAAAAAABAQAWFxZUU1NVVFT+/v/HyMi7u722trXLy8wA//8A/wAA/wAAAQAAAQAA//3//wEAAf8AAP///wEAAP///gEBAP8AAf//AQABAQD/AAEB/wH/AQAAAAIA/wAAAAD//wAA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Af8AAQABAAH+AAECAf///wEAAAD/AP8B/wEA/wABAgAA//7/AAL/AQAA//8BAAEAAAD/AAAAAAEB/wD/AQEAAQD//wABAQAA/wEB////AAAAAAEAAAABAAAAAP//AAABAAEBAAD///4AAQEB/wD/AAD+AQACAAD/AAEAAP8AAAH//wEAAQAAAAD/AAAAAAEAAP//AAAB/wAAAQAAAAAA/wAAAQAA/wEAAAAA/wACAf//AAEAAQABAP///wD/AQH///8CAAD/AAABAAD+AP8C/gD/AgEA/wEAAQD//wAAAQAAAf8A/wH+AQACAAEBAAABAAD/AAAAAAEBAAD///4AAAEAAf8B/wL/Af4A/wEAAf8A//8AAAD/AAEBAAAAAQAA////AAEAAP//AAABAQABAAAAAP//AQAA/////wAAAAAB/wD//wEBAQD/AQEAAAABAP7/AAH/AAEBAP8C/wEAAf//AAIAAP//AAEBAv8A/gABAQD/AQAAAAD/AP8BAAEAAQAB/wD/AgAA//8BAP//AAEA/wAAAP//AAAAAAAA/wAAAQAB/wH/AQD//wABAAAAAQAA/wEAAQH//wABAAEAAP4BAAD+AAEAAP8AAAH+/wAAAQAB/wABAQH///8AAQAAAAD/AAABAQEA/wAAANLT1NHR0AAAAAAA/wAAAgABAUxH/xYV/f//BP8ABf8ABAD//wAA/wAB/wAA////AAEBAP8A/QD/AgAAAAD//wABBQD//wAA/wEA//8B/wH//v0AAAEBAf8A/wD+AwEAAf4A/wEBA////P8BAQEB/v/+AAAA/wEAAf//AP8A/gAC/wH//v8AAAAAAP/+//8B/wIAAP8B/wEA//8A/gAA/v///gEB////AAEB/gD//gEA/wEB//7//QAA/QEA/wH/AAAA/wEB/wAA/QAB/gH//v8A/wAA//8A/wL/AP8B/gAA//8A/v//AAH//gEB/wD///8BAAD///8A/wEB/wD+AAAA/wD/AAEAAAAAAAEA//8B////AQAA/v8B/wEA/wD+AQABAP///gEAAQEAAAAAAQAAAP///v//AAAA/gEB/gAAAQEB/QH//wAA/gAA/gD//wEC///+/gEA/wAAAAH+/wAB/wAB/////wABAQAA/gAB/gAA/gEC/wD9AAAB/wD+/f8B/wEA//7//gIC/wD//wEA/gAA/wEB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AP//AAAA/wEA/wD/AQAA/wABAP8A/wEAAf8AAAEAAAD/AAEA//8BAAH/AAABAP8BAAH/AQABAf8B/wH////+AAIAAP8BAQEAAQAB/wEAAAAAAAH/AP4AAAEBAAAA/wABAgH+/wABAQD//wAB/wAAAQIA////AP8AAAEBAQEAAAAA/wABAAAAAAAAAAD//wACAAEAAQD///////8BAAEAAP//AQAA/wEA/wABAAH/Af4BAAEAAAEAAP8BAAAAAQAA/gAAAgAB//8B/wAAAAH/AQABAAAAAAH///8BAP///gD/AQEBAQEA//8AAAAAAAABAAEA//8AAf8AAAIAAP4AAAAAAAEAAAEBAQABAAD+/wABAgEA/wAAAAD/Af8CAAL+AP8BAAEAAf8B/wAAAAD+AAECAAABAQEAAAAAAAAAAAD/AP4B/wECAAH/AQD/AAD//wC/wMHl5OUAAP8AAAIBAgEMC/5FQP4B/wD/AQIAAQgAAQYB/wH//wEBAQD9AP8BAQAC////AP/+AP4BAAD/AP///v4AAQMAAP7/AAEAAQABAAD/AAAAAgAA/wH/AP8BAQH/AP8AAAAA/wABAP8AAAD/AAEBAAD///4BAP8AAAABAf8B/wD///3/AP8BAQD///4BAAAAAf8CAP8A//0AAP4AAP8B/wD///4AAP////4BAP4AAP0BAf//AP8AAf8A//4AAP0B/wAAAf8A//8AAP4AAP4AAP7///8AAP7///8AAP8BAf/+AP4C/wD//v8AAgAB/wAAAP4AAP8AAAABAAAA/wAAAP//AAEB//4BAAABAP8A////AAAAAQACAP//AP//AAAA/v8BAQAA//4AAQAA//8A//8AAAABAP4BAf4AAP8B////AgAB//7/Af8A//8A//8AAP7/AAABAP8AAP8B/wAAAf////8AAf8B//8AAQAA//3/AQD//f8BAgAAAAABAf//////AP8A//4CAgD/AAAA//7/Av4AAP8A//0AAP4BAQD/AP8BAQMBAf3/BgAD/wD//QEnIf8AAgEA/v4AAAAAAAAAAAEAAP4AAAAA/wEAAgEB/v//AAAA//8AAP8AAP4AAAAAAAEAAP9HSkoTExL+//7///8A/wAAAQAB/gAAAP//AAEAAP8BAAH///4AAAEAAAD/AAHFxMXz8/UAAAAABQwKGSUAAQAA/v8AAP7/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AQABAAABAQABAAD/AP8BAf/+/wH/AAAB/wD/AAEBAQAAAQAA/wEBAf8AAP8A//8A/wEBAP8B////AP8BAAD///8AAP8A//8AAP//AQD/AQD/AQAAAQD/AP//AP//AQEA/wABAAEA/wD//wH/AP8AAAD/AAD//wABAQEBAP8BAQD/AAAAAQAB/gAAAP8BAAD//wABAQAAAQAA/wACAP8BAAD/AAD/AAEAAQD/AAAAAAAAAAH/AP8AAAAAAAH/AP8AAAEAAAEBAQAAAAD/AAD/AgABAQEAAQEAAP8AAAAAAP8AAAH/AAL/AQAAAAAAAAABAf///wECAQEA/wD//v///wAA/wAB/wAA/wH/AP8AAAAAAAIA/wEAAf8AAf8AAAABAgABAP8A/wH/AAD//wD//wAA/wAAAQAAAP7/AP//AP4B////AP//Af8AAAD/AAEBAf8AAAAAAAAAAP4B/wIBAQICAAAAAQAA/////wIBAAD/AP7//wAAAAABAAAAAf8AAAAAAf8AAf8AAAEAAQAAAAD/AAAA/gD/AAABAP////8AAP8AAP4A//8A/wD/AAAAAAAAAAAA/gAC/gD//gEAAAD//9LS09PS0QAAAAABAAAAAQD//zo2AP//AP7/Av3+Bf//AgD/AQAAAAEBAAAA/wD//gEA/wD/AP///QAB/QH//gD//QD//QAA/gH//wAA/v8A/gEA/v8B/gAA/gAB/wAA/gD//QEA/f8A/gH//wD//f8A/gAA/AAA/wH//gAA/P8A/f4A/gAA/P///gD//QAA/f4A/QH//f8A/QAA/QAA/gH//gD//QD//QAB/QAA/gH//gAA/f8A/QAA/f8A/QEA/gEB/QH//QAA/P8B/AH//QEA+wEA/AH//AAB/f4A/wEB/QEA/QH//gEA/AEA/QEA/QAA/gAA/QAA/QEA/AIB/QAA/AAA/AEA/AAA/AH//AEA/QAB/QEB/wD//AEA/AAA/v8A/gD/+wAA/QEA/P8A/gAA/QEA/QH//QD//f8A/gAA//8B/v///QL//gAB/wD/AAD/AP4B/wH+/wAA/gD//wAAAP///wAAAP8AAQD+AAD////9/wAAAP8A////AQH/AP8BAAEA/wEAAAAAAAD///8A/gD+/gABAP8AAQD/AAAAAAAAAf8A//8BAf8AAQABAAAAAAIBAAIC/wYHACUh/gAA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/wD/AAEAAP8AAQAAAAD/AAAA/wABAAD/AAD/AAAAAQH//wAAAQEA//8BAQH/AAAB/wAAAQH+/wABAQABAAEAAf4B/wL//wEAAAD+AAAB/wABAf//AQEA/wAAAAABAAH//wABAQD/AQH/AP8AAAD/Af8A/wIAAf8B/wD/AAAAAAAAAAD/Av8CAAL/AAAA/v//AAABAQAA//8AAAABAgAA/wABAAABAAD/AAAAAP8B/wEAAAABAQD/AAABAQAAAAAA//8CAgABAAAAAAACAAEAAAD/AAIAAAH//wD/AAAA/wAB///+AQEAAAAAAf/+zs7OmpyeAAAAAAABAAABAAAAAAABAAD/bGxqb3BtAQECAQAA//8AAAABAQEB/wAAAf8AAf8BAAAAAAAA/wAA//8BAQAAAQABAAAAAf8BAP8A////AP8A//8AAAAA/wABAQAA//8AAAEBAAEAAP8AAAAAAAABAAABAQH/AAAB/wD/AAAAAQEBAAABAP//AAAAAAAAAAABAAAB/wAAAAEAAAEB//8AAAD+AAAAAQH/AAAAAAAAAP/+AAD//////gD/AP//AAD/AQEAAAAAAAACAQAAAAABAQEA/wABAP8BAAABAAEB/wAAAAD//gEAAAAB/wD/Av8B/wD/AQAB/wABAAEA//8BAP///wAA/v8A/wH/AAAAAP4AAQAA//8A/wAAAQABAQD/AP8BAAEAAQD+AAD+AQEBAAEAAQH/AAD/AAEAAQH///8B/wD/AAD//v//AP8BAQABAP4A/wABAQEBAAABAAAAAAEAAQAAAQAAAAAAAQD/AP//AAEAAP8AAAAA/wAAAQAAAQEBAAD/AAEAAAEBAAEBAQEBAAEAAP8A/v//AP//AP//AAABAAD/AAD/Af4BAAH/AAD/AAAA/wABAP//AQEAAf8B/gD/AAD///8AAQAAAP8BAAAAAQIBAAEAAQEA//8AAAABAQAAAAD/AAD/AAAB/wEBAAH/AAAB/wABAAEAAAAAAP7/AQAB/wAB/wAAAAD/AAAAAf//AAABAP8B/wABAAABAAEBAAH/AAABAAACAP4AAAAA//8BAP8CAAAAAAABAAAA/wAAyMbIAAABAAEAAAEAAAABOTEAJyUAAQEAAQAIAAAE//4AAQAA//8AAAD////+/wD///8AAP//AP8A/wAAAQAA/wAAAf8A/gD/AQAAAP/9AQAA//8A/wH+AQL9AAD9/wD+AP//Af/9AP/9AP/9AAD8AAD8AQH+AQH9AAH8AQD+/wD//v/8/wD8AP/+AQH9AAD8AQD9AgH9AP79AgD9Av/+AAH9AAD8AP/8AP79AAD9Af/9/wH9Af77AP/9AP/9//7/AAD9AAD9AQH+AQH+AAD9AAH/AP/+AQH+AAD+AQH+AAH+AP/9/gH9AQD9AAD+AQD/AAD9AAH8AAD8///8AP/9AQD+/wH/AAD+AAD+AAH/AP8AAAAA///+AAD+//7//wH+AQD/AP/+AAH+AP/+AQD+AP/+AAD+AQD+Af/+///9AP7+AAH+AAD+///+AAD+AAH+AAD/AAAAAAH//wL//gD+/wD/AP/+AAAB/wABAf8A/wEAAP////8DAf8BAP8CAP8A/wEBAP8BAP8BAAIAAAAA/v4D/v8DAP8C/wAC/wACAP8AAP8B/wAC/wADAQACAQEB/wAAAAEAAAIBAAIAJCD+AAEBAAEAAAAAAAAAAAADAAAAAQD/AP8AAQEAAAAAAAAAAAD/AAAAAAAALzIzP0A/AAIBAQAB/wAAAAH///8AAAAAAQAA//4AAAAAAQEAAgEAAAAA9/b1j4yL+fn1AAD/AAoSCiAx/f7//wAA/gD/AP//AP7///7///8A/v8A/////////wD///7+/v////7+//////4A/v7/AAD//v/+/v/+//7+/wD/AAD//////v7+/v8A/v///////v7///7//v///f7+AAD+/v/9//7//v79/v7//v/+/////v3+DBYe/wAAAAAB/wABAAAB5OXj19fXAQABAQAAAQAAAP///wAA/wD//wAAAAD/AAAAAAEBAf8AAAAAAP8AAAD/AAAAAAAAAP8AAAD/AQEAAP//AAAAAAAAAP8AAAEA////AQAAAP4AAP8AAQAC/wEA/wD/AAH/AQD/AAAB//8AAP//AAH/AAAA/wD/AAD//wAAAP8BAP8BAQABAQABAQH/AAAB/wABAAAAAAEBAP8BAf8BAAD/AQD/AQEBAAEA/wAAAAEBAAAAAP4AAAD/AAAA/wEAAAEAAAABAQABAAAA//7/AP8A//8BAQEAAQEBAv8A/wAAAQEB//8AAP8BAQAAAQEAAQEAAQAAAAABAAEAAv4AAAAAAAD/Aq6vsfb19QAAAAAAAAAAAQAAAQAA/zg5PHt7eP7/Af//AAABAQABAQABAP4AAAEAAP8A/wABAQAA//8AAAAAAAAB/wD/AP//AAABAP8AAAAB//8AAAABAAAAAQAAAAABAP8BAQEAAf//Af8AAQABAQABAAD/AAH/AP//AAEA/wH/AAAAAP///wD//wAAAAAAAP8BAP8A/wAB/wEBAAD//////wAA/wAAAQAAAAD/Af8A/gAA/wEAAgAAAAABAQAAAQABAQEAAP//AAEBAAEAAAAA/wAAAf7/AAAAAAABAAAA/wEAAAEAAQABAAH/AAAA/wD/AAABAAEAAAAAAAAB/wAAAQEAAAECAgAA/wEAAP/+AAD/AAEBAf8BAAAB/wH+AP7//wABAQACAAAAAAABAP8AAv8AAAH+AP8BAQAAAQD//////wEA/wEAAQD/AAEBAAAA/wD/AAEBAQEA/////wAB/wEBAQAAAf8AAAAA/v8A////AQH/AQD/AAAAAAD//wD/Af4AAP4A//8AAQH+AAD//wAB//8AAAH//wAAAAEBAQEAAAIBAAEAAAEAAQAB//8BAP//AP8BAQEAAQEAAP8CAAD/AQAB/wEAAAEAAQAAAQAAAP8AAP8BAP4AAP//AP4AAAEAAAABAAAAAAD/AQAAAv8AAQEAAAH+AP8B/gAA/wD//wEBAAAAAQAAAAD//wAA/wEAAAEAAAABAAACAP8B/wAA/v8A/wAA/gD+AAAB/gAA/wABAAEAAAABAAAA/wH/AAABAP8A/+De3srKygAAAAAAAQD/AAD/ADEv/gEDAP4B//7/BAAAAQABAv//AAAAAQEA/wEC//8AAAEB/gAB/wAB/gEA/gAA/gEA/v8A/gEA/wAA/QEA/f7//QEA/gD//QH//gAB/QAA/v8B/f8B/gAA/gAB/gAB/QAA/v8A/v8A/QEA/QAA+wAA+QL//AH+/AAA+v3//QH//gAA/P4A/AAA/QAA/QEA/AIA/QD//P8A/P///AH/+wAB/AEA/QAB/gAA/QAA/QEB/QAA/AAA/QAB/gD//QAA/QD//AAA/f8A/QAA/AEA/gAA/QEA/AIA/f///QIA//8B/QEA/gD//QD//gAA/////wAA/wH9/gH//QH//gH///8A/gEA/AIA/QAA/QEB/QH//gD//v8A/wH//AEB/AAA/QAA/gEA/wEB/gAA/wEA/wAB/wH+/wD//gAA/QH//gH+/v///QEA/v///wH/AAIBAAH/AAAAAf//AAEAAP8BAgD+AQAAAwEAAgAAAgAAAf8AAQAAAQABAQABAQD/AgAAAgAAAAEAAAAAAQD/AAD+AAAAAQAA/wAAAQEBAv8BAv8BAP/+AAD/AP8BAAIC/ywpABIPAAD/AAAA/wAAAAAA/wAAAQAAAQAAAP8AAAD/AAAA/gAA/wAA/wAAAFdZWgsNDf/+/f8B/gAAAAAAAQAA/wD/AP//AQEB/wEAAQD/AP//AQAAAcLCxMC+vQAAAAAAAQsmOwMMEAD/AP79/wD/AP7/AP8B//8BAP//AAD+/wEAAP4AAP/9AP8AAP///wAA///+//7+/v7+APz+AP/+////Af0A//7///7+//39AP8AAf///////v7///8AAP4A/gD+AP/+//3+/f7+AP///wD///7/////AP///v7+/hEcJBAVHQAAAAAAAAAAAAD//tfX1/8AAAAA/wAA//8BAAH//wEAAAD//wEBAQEB/wAAAAABAQAB/wABAAEBAf8A/wD//wABAAD/AP///wABAAABAf///wEB//8A/wABAQAA/wABAAAAAP8AAAEAAAIBAAAAAAD/AQAA/wABAAABAAD/AQAA/wAAAQEAAP/+/wABAAEAAP///wD/////AQD//wAA/wEAAAD//wEB/wD/AQD/AQAAAQABAAEAAAEAAAH/AAAAAQAAAQAAAAABAQD/AQAAAAABAf8BAAAAAP8BAAAAAAAAAP7//gABAAL/AQD/AP//AAAA/wAB//8AAAAAAAD/AP//AAEAAAAAAf8BAAAAAAD/Av/AwcEAAP8AAP8AAAAAAAAAAAAGBghxcm8REhIBAgD/AQD///8BAf////8BAAAAAQABAAD///8A/wAA/wEA//8A/wEAAQEAAf8AAAAAAAAA/wEBAAABAAABAf//AAD///8BAAAAAf8BAP8B//8A/v8A/wAAAQAAAP8BAQH/AAAAAQD/AQAAAQD/AQAAAAEAAP8BAAAAAAABAAAB/wAAAAACAAEBAQAAAQABAAABAf8BAQEAAAH/AP8BAAEA//8BAAEAAAAAAAEBAQEA/wAAAf8AAAEA//8BAQABAf8BAAAAAAD///8AAAH//gEAAAAAAQEAAAD/AAD+AAAA/wAA/wEB/wD/AAD///4AAAAAAAADAQAAAgD/AP8B/wABAQH/AQEBAAD///8BAP8A/wAA/wABAP4BAAD/AQEAAAD///8A/wH//wEBAAAAAAABAQAAAQEB/wEBAQEA/wD/AAABAAEAAAAAAAABAAAAAAEAAAABAAAAAAD/Af8AAAH/AAAAAAH/AP8BAAAA/gAA/wD+AQAAAAD//wAB///9AQAAAQD/AAD/////AQEBAQEB/wAB/wIAAf8AAAAA//8AAP//AP8B//////7//wEAAAH/AP8AAAD/AQEBAAEB/wAB/wEAAAABAAEA/wAA/wAAAAAA//8A//8CAP8AAAD+AP8C/wIBAAEAAAAA/wAAAgAAAAAAAQAAAAD/AAEAAQEAAAEB/wABAQAAAAEBAAEA/wABAf8A/gEA//8AAAAAAAACAQD/AQABAAD///8B/wDb3N3u7u0AAAAAAAAAAAAAAP8yLgACAAABAgIBAgP/AAIAAQAAAAABAP8AAP4A/v0CAP3///7/AP////3///8A//8AAP4AAP7///4A//7/AAABAP0AAP0BAP3///0BAP0AAPwAAPz/APwAAP4A//0B//8CAPwA//wA//0A//v/APwAAf0AAfz/APwA//sC//3/APwA//4C/wABAf//AP4AAP3+/vwAAP0BAPsAAPsAAPr/APoAAPz///0AAP0AAP8AAP4A//7/Af4A//0BAfwB//0BAf0AAP4C//0AAP4AAP0BAP8AAf8AAP8AAf7/AP0BAP3///0CAP8AAv0AAP0BAv0B//7+Af0AAP4AAP4A//0BAP4A///+/////v4AAP4AAP4AAf8BAP4A//8B//4BAP8AAAAB//7///8AAf7/Af8A////AP4BAP8BAf//AP4AAf8CAAAAAQABAQH/AP8AAAH/AQH/AAABAAAAAAAAAP8AAAD/AQH/Af8AAQABAQEAAQAAAQAAAAAAAAD/AAD/AQABAAEAAAD//wAAAAAAAQD//wH//wH/AP8A/wEB/wQA/gMCAwEA/wABAAABAgAfHQAlIgEAAP8AAAEAAAAAAP8AAQIB/wEAAAAAAf8AAP8AAAAAAAAAAAAzNTZPU1ECAQAAAAEA/wABAAAAAAAAAAAAAAABAv8AAAAAAAABAQABAAD+/PykoKAAAP8AAAICER4LJTgAAAD+AQD/AQD//wD+AAD//wEA////AAD+AAD9////AP//AP/+////AP/+///+AP//AAD+AP7///8AAf/+//7//////v/9////Af7//v3+/v3//wD+///+/v7//gD9//4A/////gD9///+/v7//v7///////7+AAD/AAACBQkMFRoAAP8AAAAAAAEAAAHf3+AB//7/AAAAAAEBAAD/AAD/AQEBAQH/AP///wABAAAA//8AAAEAAAH///8BAQEAAQAB/wEAAAABAQAA/wAAAAABAAH/AAAB/wAA//8AAAAAAP8AAf8BAAD//wD/AP8BAAEAAf8BAAEA/wAAAAABAP4AAQAAAP8AAAACAQABAP//AP8AAAD/AP8AAP//AAAA/wD/AAAAAAAA/wEAAf//Af8AAQAAAAD/AQD/AAAAAAAAAAAAAf//AQAA//8BAf8A/wD/////AP//AQAAAAEAAAEB//8AAQEAAP8CAf8AAAAB/////wEBAAAA////////AQAAAQD/AAD/AAABAQD/AAAA1tXXy8zNAAD/AAABAAAAAAAAAAAACwsLJSUiAAAAAAABAAAAAAAAAAAAAQEAAP8AAQAA/wEAAAAB/wAAAAH/AAAAAQH/AP//AP8AAAABAAH+AAEA/wH/AAABAAABAQABAP//Af//AP4AAAAAAAEBAAEBAAEBAAAA/wABAAAAAAABAP8BAP8AAf8AAP8AAAH//wABAAABAgEAAAAB/wEBAAAA/wD///8AAP8A/wAAAAAAAAAB/wD/AQABAAAAAAABAAEAAP8AAAH/////AAAAAAABAAAAAAAAAP8A//8CAP8AAAABAAEAAAD+AAH+AQD//////wAAAAEAAv8A/wAAAQD//wH/AQAAAQABAAAAAAAA//8BAf8A/wD/AP8AAP8AAf//AQAAAAAAAAAB/wD/AP8BAQEBAQAAAAAAAP8AAQABAAD/AgEA/wEB/wAA/wAAAP//AAEA/wAA/wH+AAAAAP//AAEAAP8A//8AAAH/AAABAAABAgEBAQAB/wD/AgAA/wEAAQAAAP8AAgEAAgIBAQABAAAAAP8AAP8BAgAAAP8AAf8AAAIBAP8A/////wEB/wD/Af8BAAEBAQABAAAAAgEBAQAAAAEAAAH/AAAAAP8A/wD/AAD/AAD/AAAA///+AgAAAP//AAH/AAD/AAD/AAEBAQH//wEA/wAAAgEB/wH//wD+//8AAAAAAAAA//8AAAABAAABAQAAAP//AQAAAAD/AP8A/wAAAAAA/wAB/gABAAEBAQICAAAAAAAA//4AAQEA/wABAQAA/wEAzM7PAAABAAAAAAAAAAAAFxb/NTAA/wEA//8C/wACAP//AP8A/v8AAP8A//8AAQEAAAH9AgL/Af//AQEBAgD/AQH+/wD+AP/8AQD9/wH+///9AAD+AP/9AP/9AAD9/wD+AQD9Av/9AQD+AP/8AP/9///9AP/9AQD9AQD8AAD+Av/9Af/8AP/8AAH9/wD+/wH7AAD7AAD8/wD8AP/8AQD8AAD8AAD8AQD9//79Af/9AP/8AgD+AQD9AQD8AAH9AAD8AQD9AAD+Av/9AQD8AP7+AAH9/wD/AAD+/wH+///9AAH9Af/8/wD8/wD9Af79AAD8AP/9AQD/AAD9AP7+AP7+Af/+/wD9AgD9AAD/AAD9AAL+AQD8AAH9AQD/AQD+AQH9AAH9AP/9Af//AAD//wEA////AP/9/gD9AAD9AP7+AP3+AQH/AQD//wD/AP4AAAABAf4A/wD/AP/+/wD/AAIBAAD/AQD/AQD/AAD/AAAA/wD/AAAAAAD/AAD/Af///v/+AP//AP//AAAA//8AAQABAf8A//8A/wAAAAEAAAABAP//AQAAAAAAAQAAAP8A/gACAAAC//8A/wAA/wAAAQAACw0AJyQBAAAAAAD/AAAAAAABAAD//wEAAAEBAP4BAAD+AAD9AAAAAQAAVllZDxEQ/v//AAEAAQECAQAAAQAAAAAAAQAAAP///wEBAf8AAf8AAQIBwb+/uLa3AAAAAAD/CSE0AQYI/v8C//7///8A//8A//7///7//wAA//////////7//////gD+/wD///7//wD////+//7+///////+/f3/AP7//////wD/AP////4A/f8A/wAB//7//wD///8A/v///v///v7+/QD//////v///f7+/v/8/v///////v7+///9DhYeAAABAAAAAAD/AAD/1tbW/wABAQABAAD///8AAAAAAQD/AAAAAQABAQEB/wD//wABAAD/AQD/AAH///8AAf8BAAEAAAAB/wABAAEBAP///wD/Af8A/wAAAAAAAQEAAAAAAQAA////AAD/AQAB/wD/AP8A/wEAAAABAf8A/wABAP8AAQAAAAEA/wAAAP8AAAEBAAD/AgECAAABAAD/AAEAAQEAAAAB/wH/AAAAAAAAAAAAAAAAAf8BAAAAAAEA/wAAAAABAf8BAAAA//8A/wABAAEAAAAA//8AAAAA/////wEAAf//Af8AAgEAAAH//wEBAgIAAP8AAAEBAAABAAAAAAEBAAAAAQEAAP8AAf//AObm5vr5+gAAAgAA/wAA/wAA/wAAAe/v7rCvtP////8A/wEA/wEAAf8AAQAAAQEBAAAAAAEAAQEA/wAAAAAAAQABAP8AAP8BAAABAAD//wAAAQD/AQAAAv///////wABAAEBAgABAAEBAQEAAQAA/wAB/wD//wEBAQABAP8AAAABAAABAAEBAP8BAQEAAAAAAQEBAAEAAP//AP8AAAEAAAABAQEBAAABAAAAAAABAQAAAQD/AAIBAf8B/wAB/wAAAAAAAAABAAEAAP8AAP8AAf//AAABAAAAAAD/AAEB/wABAAEBAAAAAP8AAQEAAQAAAgEAAAAAAQAAAAABAAH/AAAAAAAAAP8BAQD/AAABAf8AAAEB/wAA//8AAQABAP8AAP8AAQAAAAEAAQD/AAAAAQAB////AP4A/wAA/v//AAAAAAABAQABAAD+AQAAAAEAAQIBAP///wAA/wAAAf8AAAAAAAH/AP8BAAABAAD/AAD/AP8AAP4B/gD/AAH/AAAAAQEAAAD/AP8CAP8BAP7//wAA/wEBAAACAAABAAD//wAAAQAAAQD/AAAB//////8A/v8AAP8AAAD/AAAAAQAAAAD///8BAQAAAQD/AAAAAAABAQAAAAD/AQAAAAABAAEBAf4AAAAAAQAAAv8AAf8AAAAAAP8AAQH/AAEAAAD/AAH/AAEAAAEAAQD/AAAAAQEBAAAA/wAAAAAAAP8AAP8AAAAAAQEAAAEAAQAAAAEA/wEAAP8A//7//wABAf//AP8BAP/+AQAAAAABAQD/ANXT1QEAAQAAAAD/AQAAAS4o/x0dAP8AAf8AA///Af8BAAH/AAIAAP8A/wEB//8A/f///wD+/gAA/wH//v8A/gD//gAA/gAA//8B/f///gEB/wEA/gH//v8A/gD//gD//QAA/v8A/wH/AAAA/wAB/wD//v8A/wAA/QAA/gAA/gAB/gD//AEB/QL//QAB/AL//gEB/wD//QEA/f8B+wD/+wD+/QEA/AAB/AIB/QAB/QEC/wAB/wAA/wAB/gD//AEA/AD//QEA/QAA/QD//QAB/QD//QEA/AD//AD+/gH//gD//f8B/QD//wH//v8B/v8A/gD//QAA/f///gD//QEB/QD//QH//gD//wAA//8A/wD+/v7//gD//////gAA//7+/wH+/wEA/wAB/gAB/QD//wAA/wEBAQIAAAD/AQABAAEB/wH//gAA/wEA//8B/wD//v4AAAAAAAD/AQD/AAD9/v8A/wD/////AP//AAD//wEA//8A/wH//wEAAP8AAAH/AAH/Af8AAQAAAAEA/wD/AP8A//8A/wAAAQD/AAAAAQAAAv8AAAEAAQD/AP8AAAD/////AgABAgEBAAECAP8BAQH/ATcy/wABAQAAAQAAAAAA/wAA/////gL//gAB/gAA/gAAAgAA/zo/QFBSUwH/AAEAAQH/AP8A/////wD///8AAP8A//8AAQL/AAABAP8CAfXz9JqZmwAA/wAA/wEPHAgeLgD/AQAA//7/Af//AP7//wAA//4A///9//8AAP8A//7///7//v/+AP7+//7//wD+///+AP8A/wH//v4A//7+//3//v7+/v7///8A//7//v///v////8AAP/+AP7//wD//wD+//8A/v/////+/f7//wD/AP//Af3//v/+/v///wABAg4XHgAAAQAAAAAA/wAAAd/f4Pj5+P8AAP8AAAEBAAABAAD/Af////////4AAAEAAQEBAAD/AP8AAAEAAgAB/wAB//8A/wEAAAAAAAAA/wABAAAAAQABAAD/AAAAAf8AAQAAAAD+AQEBAAEAAAD/AAEAAAABAAAAAP8B//8AAAAAAQAA//8AAP//AAAAAP8AAAAAAAAAAf7//wAB/wEAAgABAf//AAAA////AQAAAAAAAQEAAAD/AAAA/wIAAAD//wAA/wAAAAAA/wABAQAAAQAAAAAAAAAAAAIAAQEAAAIBAQEBAAAAAf7/AAL/AAD/AQAAAP//AAABAAAA/wAB/wEAAQD/AAAAAP//AAABAP8BAAD//f8A//0AAP8AAAAAAAEAAP8AAP8AAP+NjI56en3h4OH//wAAAf//AP//AAAAAAEAAAH/AAD/AQEBAQABAP8B/wAAAAABAAEBAAAAAAEB/wAAAP8BAAD/AAAAAP8BAP8BAAD/AAD/AP//Af4BAAAAAAAAAAEA//8BAAD/AP8AAP8AAAAAAAEAAAD/AQEB/wAAAAD/AP8BAQAB/wD/AAABAP/+/wABAAAAAAEA/////wAAAf////8BAAH/AAEBAAAB//8B//8A/wAAAAD/AP8BAP8AAAABAQEAAgD+/wABAAH//////wABAAEAAAEAAQAAAQABAP8A/gAAAAD/AQAAAAH/AAAA////AQD///8BAAD+AAEAAQEBAAAAAAAAAP8BAv/+AAAA/wAAAAEBAQD/AAEAAAAA/wH+AAACAQH/AAAA/wD+/wD/AP4BAAAAAP///gEAAQAAAP8BAAABAAD/AQD/AAABAAAB/wAAAAAAAQABAQAA/wAAAAAAAAH/AP8AAAD/AgEB/wAA/wEAAP8AAAD//gAA/wAA/wD/AAD/AAD/AQD/AP8A/wABAQECAAEBAP8CAAACAP8AAP4AAAD/AAEA/wAAAP8AAQABAAAAAAAB/wD/AP8AAAEAAAEAAAEAAAEAAP//AP4AAP8B/wH//wAAAQD/AQAAAAAAAgEAAAAAAAH/AQAAAgAA/wAAAAAAAAABAP8AAAAC/wAAAP8AAQD+AAH/AP//AQAA/wEA/wABAAABAP////8BAQABAAEAAf8AAf8A///z8/PQ0dD/AAIAAQIAAAEBAAAoJP8AAAABAQEBAQMB/wEB/wEAAAAAAP8B/wAA//4BAAAAAP//AP8AAP4AAv4BAQABAAAB//8BAf4BAP0BAPwA//z/AP3/Af4BAf4BAfwAAPwAAP0BAP0BAPoCAfwA//sBAfoAAPv/APwAAPwAAPwA//4BAAAAAP7+Af8BAP8AAPwA/v0AAf3///sC//wA//0AAfwAAf0A//0AAP0A//wA//0A//0A//sAAPwBAf3///0AAv0A//0AAP0BAf4AAP4BAP4BAP4B//4AAP0BAf0BAPwB//z/APz/AP4BAP0B//0A/wD/AP4AAf4BAf8AAP8AAP8AAP8AAAAA//4B//4A//4BAP4AAP4CAf3///4CAAD/AP////4CAP0B/v8B//4B//7/AP4AAAABAv4A/v0AAP//////Af8AAP8AAP8AAf8AAP4B/wD/Af8A//4AAP8B/wAAAAABAP8BAf////8B/wAAAP8A/wD//v8A/wEAAAD/AAAB//8A////AAEAAf8A/wABAP8B/v8AAQL/AAH/AQABAAH//////wH/AP8BAQIAAQIA/wIAAAEA/gABAQD/AQAzL/4LCgAAAP8AAAAAAAAA//4BAPz+/foA/vsAAP8AAPwZGxuChYUQEhAA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AAD+/wEBAAEAAAH/AP8AAQEAAAD/AAEBAP8AAAEBAAACAAAAAf8AAAAB/wAAAAAAAP///wD///8AAAABAAEA/wAAAAD///8BAQABAQD/AQD/AAAAAAD/AAAAAQABAf8BAQEBAf8BAP8AAQACAAEA//8A//8A/v8AAQAAAAAAAQAB/wAAAAAAAAAA/wD///8A//8A/wAAAAAAAgAAAAAAAP8BAAABAQAAAf8BAAAAAf8AAP8BAQEA/wD/AQEBAQIBAB4dHERCQwAAAAAAAAAA/wAAAAAAAQAAAAAA/wAAAObm5pWUlElJTVBQVJaWmdzc3gD/Af8A/wAAAP8A/wD/AAEAAQAAAAEAAP8AAQAA/wAAAAAAAQEAAAEAAAEAAAABAf8BAAAAAQABAAAAAQEAAQABAQEAAQAB////AQD/AP8A/wAAAAEAAAH/AP//AQD/AP8AAAAB/wD//wAA/v8A/wAAAAEB//8B//4AAQEAAQAB/wEBAAAAAAAAAQAAAAEBAP8AAQEBAAABAQABAAEBAP8AAAEAAAEAAP8AAAAAAAEA/wEAAP8B//8AAAD//wABAQABAAAAAP4BAAEAAAEAAAAAAAABAAIBAAEBAAAA/gEB////AP8A//7+/wEAAP4AAAAAAQEAAAAAAP7/AAAAAAAA/wACAQEAAAEAAAEAAQAA/wD+AQABAAEBAAEB/wD/AAABAv8AAAABAQABAP8BAAABAAD///8B/wD///8BAAD/AAAA/wEB//8B/gEB/wD/AAEAAP8AAP//AAAAAAEBAQIA/wEAAAAA/wEA/wAAAQD/AQEAAgEAAAAA/wAA/gEA/wH/AAH//wD//wIBAAH/AAABAQEBAQAAAAEAAQAAAQD/AAEBAgAAAQABAAH//wAA//8AAAABAQEA/wAAAP8BAAAAAAAA////AAEBAQABAP///wAA//8B/wECAv4AAQABAAABAAEBAQH///8AAAAAAP8AAAAAAP8AAQABAQEAAP8CAAAAAP8BAAEA/wEAAP7/AAAAAAAA/wAAANDR0f4A/wAA/wAAAAEAAAIA/yIgAP//Af//AQD/AgD/AQH+AP///wAAAAEBAAAAAAABAAAA/wAA/wAA/v8A/v/+/AEA/QAA/gD//gAD/wEA/wH//wAB/QAA/f8A/QAAAAAA//8A/wEA/gAA/v7//gEA/wEA/gD//gAB/AAA/f8A/AAA/AEA/QEB/wD//v8A/QAA/gAB/QAA/QEA/QAA/QAA/AEB/v8B/QAB/QAA/QAB/v///v///QD+/AEA/QH+/v8A/gH+/gH//QEA/v8A/QD//gD//QD//gEB/v8B/gEB/QD+/QAA/gEB/gAB/wAA/QED//8B/v8B/AAA/wD/AAD//wH/AAABAAAB/v8B/gD+/gL//gD//QAA/wAA/v8A/gAA/AH//v8AAP8B//8A/wEA/gEA/gH//gIA/wAA/wH/AAEA/v///wH//gEAAQD//wAA/wAAAQEAAP8AAAAAAf///wAB/wAA/wAA/wEAAAEAAAAA/gAA/wEA/wEA/gABAP///v//AP8A/////wD+AQH/AQAAAAAAAAD//wEAAAEA/wD//wABAf4A/gAA/wD/AQAAAf//AP8A//8B//7/AQAAAAIB/wwOATIv/wAAAQAAAQAA/wAA/wAA/gAAAAAA/wAA/SYrLFpaWv79/P8BAP8B////AAABAf8AAP8AAAD//wEAAAAA/wAAAAH///v8+4mHit3Z1wAAAAEJEg0rRP8CBAD/AQH///4A/////v8AAQD/Af/+//8AAf8AAf8AAQAA//8BAAD+AAD/AQEAAf7/AP7+/wD/AP4A//8A/v8AAP4B/v7///7//////wD///7/AP3/AQD///4A//4AAf4B/v4AAP//AP7////+//7+//8AAP79/wD+//////3+/v///v3+/gUJDgkPFAEAAAAA/wAAAAAA/+Th4QIBAAAA/v///wAAAAEB////AAD///8BAAEAAAAAAAAAAQEAAAEA//8AAQAA//8AAP/+AAABAAD/AQEBAQAAAgH/AP//AAD+AAABAAAAAAAAAAAAAQAAAP///wAB/wD/AAEAAAAA/wD//wD//wABAAEBAQEAAAEAAAAAAQEAAP8AAAIA/wABAAABAf7/AAABAf/+/wD/AAEA//8A/wD///8A/wAAAAEBAAAAAQAB/wIA/wEBAAABAP8AAAEAAAH/AAAAAAEAAAEAAQAAAP8A/wL/AAEAAAT/AAABAQEA/wABAP7/AAEBAP8AAAAAAQH+AP8AAAEAAAAA////AQEBAABubmu6u73p6OYAAAEAAAAAAAAAAAEAAAEAAP4AAQEAAAH39va0tLO0tLMTExQ5Ozg8OzwoKCczMjAZGBkCBAP//wABAQAA/wAAAQD/AAAA/wAAAAH/AAAAAAAA/wAAAAABAQD///4AAQEAAAD//wABAQABAAEAAQD//wABAAEAAAD/AAAAAQAB/wAAAQAAAAH/AP//AQAA/wEBAAAAAAAAAAH/AAABAP//AAABAAAAAAAAAAAAAP8B/wEAAP8AAQD/AP4A/wEAAQAAAP8BAAEAAf4B/wH/AQAAAAEAAf8A/v8AAAEBAAEAAP8B/wD/AQABAQACAAAA/wD//wAAAAABAAD/AAAAAP8BAAEAAAAAAAACAQH/AAD+/wABAgEA/v8AAgAA/wABAP8AAAEAAQEA/wAAAAAAAAAAAAACAQH+AP8B/wAAAAD/AAABAAD/AP4BAAIA//7/AAEBAQAA/v8AAAAA/wAAAgEA//8AAQH/AAEBAAABAQEB///+AQAAAQAB/wABAQD//wD///8BAQAAAAAAAAL/AP4B/wD/AQD/AP//AAABAAEAAQAAAAD//wAAAAEBAAD///8AAQEAAAAA//8AAQAAAAEBAP//AAD+//8AAAEB/wD/AAD//wABAAEA//8AAAEAAAABAQH///8AAQEBAAEA//8AAAABAAH+AP8CAAIA//8BAAAA/wABAAAAAAAAAAAAAP//AAABAAEB/wAAAQABAQD/AAAB/wD/AAD///8BAAH+AAECAQD/AP8BAQH/AADk5eUAAP8AAAEAAAD/AAAMDAElIv8AAf///wAAAQMBAAD+AAEAAP4BAP////0AAQIA/wL//wABAf7//wABAf8BAv///wAAAAD/AP8B//8A/wMAAP4A/wEAAAEBAAAAAgAB/wEA/wAAAQEAAf7//wAA/wABAv8BAP0B//8BAP//AP4AA/8A/gAAAP8B////AP0BAP8AAP8BAAH///4AAP7/AAAB/gAAAf4B/wAAAf7///4BAf8A//7/AP4A/v8BAf8BAAD/Af4AAP8A/v//AP8CAP//Af//AP4BAAAB////AP8BAf//////AQABAP4AAAD///8B/wAA//8AAf/+//8DAQH/AAEBAP4B/wD/AP4AAQH/AP8AAAAC/v//AP8CAAAAAAD+/wABAgEA/v8BAQH/AP8A/wAAAAAAAAAAAf8AAAH//wEA//4AAQEB//7/AAAA///6/P8EAwMBAv//AQABAP///wD/AP8BAAAAAP4A/wAA/wABAv7//wH/AP8AAP8A/wABAf8BAAEAAQAAAP8AAgAA//8AAAD/AQEA//4A/wABAP8A//4BAAH/AAAAAf//Af4BAP8AAAD//wEBAQH///4AAQAB//85NgCTnQQAAAAAAAAAAAAAAP8BAP//AAIAAAPg3NxcWVgjJSUoKScZGxwHBgcBAgIfHh4BAgIDAgAGBgYBAQIFBQQUFRWgnJ+vrKsAAP8BAAMJKEIDERb+AP8CAAH+AQACAQH/AAAA//7/AQH///8B/wD/AAAAAQD//gEAAgD+AAACAP/+/wACAAEAAAH+AQAD/////wEBAP7//wIAAf8A/wD+//8AAP4DAAAB/gD9AgID/wH+/v4A/wACAv///wH/AP/9Af8AAQD//wEEAAL////+/v4CAwL//wD///4BAP8LERjv4tYBAAD/AAECAP/d3N0A/wABAQEAAQAA/wEAAP8AAP8BAQIA/wD/AQAAAAAAAQAA/gAAAgAAAf8AAAAA/wEAAf8A/wAAAP8A/wH///8BAgEBAAEAAAAB////AQD/AAAC///+Af8B/gEAAAEAAP//AAEAAP8BAAAAAAH/AP8B//8AAQD+//8B/wEBAAAAAAH+AAAB/wD+AP8BAQEA//8BAQIAAf////8BAQEA/wAAAAEAAQD+//8BAQEAAQH/AAAA/////wEBAP//AAEAAAD//wH/AP8BAf8CAAD/AAD/AQEA/gAEAAAAAP//AAEBAAACAP////8BAAD/AAEAAf8AAAD/AQAB/wEBAQAA/wAANDQzk5SQaGdq7u3uAAD+AAABAAAAAAD/AAABAP8AAAD/AAABAAABAAH/7e3stLKztLK0AAAADw8QERESGxsZERARDhAPEBAPGhoZKCgmREREDw4OAf8A/wEAAQAAAAAAAAAAAQEC//8AAQH/AAAAAAD/AAABAP//AQEA////AAAAAQAA/wD//wEBAAAAAP8AAQEAAAABAAH//wABAP8AAAEAAgAAAP8AAAEBAAAA/wD/AP8AAAEAAAD/AAAAAQAAAAAC/wAAAQD/AAEBAQAAAP8B/wAB/wD/AP8AAAEB/wIBAQAA/wD/AQABAAAAAP8A/wAAAAD/AQEB/wABAP///wEAAP//AAABAAAA/wD/AQAB//8AAP8AAgEB/gD+AQEBAAAAAQD/AAAB/gABAv///gD/AQAAAAAAAAEB//8AAQD/AAD/AAABAAAAAAABAf//AAD//wAAAQAAAP8AAQEB/wAAAAD/AP8BAP8A/wEAAQAA/wAAAf///wEAAf8AAP8AAAAAAAAAAAEBAQD/////AAIAAgD///4BAAH/AQAA//8AAgIA//8A/wD///8BAQAAAAD//wEBAAABAQAA/////wEAAAABAQD//gABAAH/Av8B/gD//wD/AQEAAP4AAAD/AAIBAP8AAAEBAP8AAf//AAD/AAAAAAH/AP8B/wH/AgAB/gD/AgEAAP8AAAAAAP//AAEBAAABAf8AAAAA/wEAAQAAAAAAAP8AAQAA/wAAAQD/AAABAAABAgD//wEAAf8AAAD/AQAB3NvdAQABAAAA/wABAAAAJSH/IiEAAQAAAQEA/wACAAD/AAAAAAABAP//AAEAAP8A/wD+AQAA//8AAAABAQD/AP///wD+AAAAAQADAf///wD+AAABAAABAAABAP8D///+AAD//wEBAAABAP7+AAEBAQEAAQD//wD/AAH+/wAAAf//AP7+/wD+Av8BAAD+AQH+AP/+/wAAAAD/AAD9AP/+AQEAAAD/AP//AAAAAP//Af/+Af/+/wD+AQH/AAEAAAH+Af//AP/////+AAH/AgD/AAD//v8BA//+AAD/AQH///8A/wD+AAH/AAABAP7/AAEAAP7/AQH//wABAQD9AgEC/wH+//8AAP///wAAAQEAAP/+AP////8AAQEAAP8AAAEA/wD/AgECAP////8B////AQEAAf//AAAA/gEAAf4AAAD/AAAAAAAAAAD/AAAAAQH//wAABgP/AAD7AP4C/wH/AQAAAAD/AQABAAD/AP8BAAD+/wEAAP8AAAD/AAD/AP//AQAC////////AQEAAAAA//3/AQEA/wABAP/+AAEA////AgIB/v4AAAD/AQH/AAD/AP7/AgEA//8AAP8BAAD/AAEAAAAB/wAANjH/GRoA5+b/AAEAAP//AQAA/wEAAAD+AP//+vn21tPQ1tTRtK/+AP8AAQH/AP8BAAAAAAH/AAAB//8A/wAAAQABHiEg6OXo/fv6AQEBBBgpByMy//7+AgIBAAABAv8B//8AAgEAAAEA/gD/AgABAAAA//8BAQEA/f8AAv7/AQL/AP8BAv4B/gL/AAH/A/8B/QIBAv7+AAMBAP//AgACAAAA/wD///8A//4AAAH+/v8AAf0BAwQAAAAB//7//gL+AP8BAgAB//4AAQD+/QIBAv//AgEA/v/+AP4CAAABAAABDRUb/wABAAD/AAD//gAA5ebmAAAA/wD/AAABAQAA//8BAAEAAP8A/wEAAAAAAQABAP8AAAH///8AAAEAAAAA/wH/Af8AAAEB////AAAAAQIAAP8AAAD/AAEB/wAAAAAAAQAB/wD/AP8AAAEAAAD/AAAA/wD/Af8B/wD/AAD/AP8BAAEAAP8AAQH/AP/+/wABAAAAAgEA//8AAQABAP//AAEAAP//AP8B/wEBAQAAAQD+//8A/wAAAAAB///+AQACAQD//wAAAAAA/wAAAf//AAEAAQEA/wEBAAD///8A/wAAAv8A/wH/BAAAAAAAAQH/AP8A/wEAAP8BAAAAAQD//wABAAD/AAABAAEAAP///wEBAf8A/1VTUQIBAnJzeOLg3gAAAAAA/wAAAQAA/wAAAAAAAAAA/wAAAAD//wAAAQAAAQAA/wAAAPHx8PHx8ODg3gAAAAAAAAAA/wAA/wAA/2hoaJaVlAECAgH/AP8AAAAAAAAB/wAAAQAB//8AAAAA////AAEAAAEBAf//AAAB/wAAAP//AQAAAAAA/gAAAQABAf//AAEB//4AAAIA/wABAf8AAAD//wABAQD/AAABAAD/AQAA/wAAAQAA/wABAf7+//8B/wEBAAD/AAEAAAAB/wABAQAAAAEAAQAA/wD/AQEA/wEBAQAAAAABAAAAAAAAAAAAAQAAAQD//wAA/wEBAQD//v8AAf8AAAEAAAEBAQAAAAD/AAABAP8A/gAAAQAAAQAA//8AAQABAAD///8AAAEAAAAAAAEAAP//AAAAAP8AAAABAQEAAQEAAAAAAAD/AgEA/wD/AQABAf8A/gABAQD/AAEBAQD+/wABAQEBAP//AAEAAAAAAAAAAAAAAf8AAAIA////AQAB//8A/wAAAQH/AP4AAAEBAP4AAAEAAAECAP8AAAABAAH/Af8AAQEAAP8AAAD+AAACAP//AP8AAQAAAAEAAAAAAQEAAP8AAf//AQAB/wEAAAD/AQEBAAAAAAAAAAABAAD//wAB//8AAQEBAAH/Af//AQD//gEBAf8AAQIAAP///gIAAf////8BAQEA/wAAAQABAAAAAAEAAP8B//8AAQEAAP8AAQAA/wAAAAAAAAAA//8AAAH/AAABAAD/AQAAAODg4QAA//8BAAD/AAAAAR8cAQIH//7+AAH/A/8BAf8BAAD/AQD/AAEB/////wEB/gAAAgAC/gH/Af////8A/wEA/gEAAP//AQD//v8B//8B/wEAAQAAAQD/AQEA//8AAAACAQEA//7+AAIAAAAA/QEAAP///wEA//8AAAAA/v8CAAH/AAEA/v8BAAH//v//AAEA/wD+/gACAAEB/gAB/v8AAAAA/gAA/wEBAAD+/v8A//8B/gEAAP8B/wH//wD+/v8A/wAB/gEB/wD//gD//wAAAQMA/gAB/gD//v//AAAAAAEA/wD//wAAAAAB/wAA/wEAAAAAAAD//wABAQAB/gD/AAEAAP//AAEB/wD/AAH//v//AAABAf8AAAABAP8AAAD/AP8A/wEBAQH//gECAf///v8A/wAAAQL+Af8BAAAA/wAAAAAA/wD/Af8A/wL/AQAAAP8BAAEAAv8A/wEAAAAAAAH/AAAA/v8AAAAB/wH/AAL/Af4A/gEAAAAAAAACAf///wH/AAABAAD///8A/wEAAAAB/wD+/wACAAH/AQAAAAAA/wEAAQAB/wH/AAAA/wAC//4A/gEAAgEC/wD+/gABAf/9AAEA/xgWACwm/+fm/wD/AAABAf//AAD//wAAAQAA/wAA/wAAAAD/AP8AAAAAAf//AQEB////AQD//wAA/wAAAAAAAQAB/uLg3wD//wECAQD+Af/37vbcyQgbKgQOFQH/AP8AAAD/AP4AAAEBAQH/AAABAP/+AP8B/wH+AAIC/wD+AgAAAf8BAP8A/wL/AP//AP4CAQH9/gECAf7/AAEAAv///wADAQD+//8BAP3+/f8CAgT+AP4C/gD9AQACAAECAAH/AAAAAAEAAf4A/gD+AgL//f4DAAH+Av8AAAAB/gICAf//AAwXGwEA//8A/wAAAAEAAeLf4f8AAAEAAQAAAP8A/wAAAAEAAQAAAP/+/wECAP8BAf8AAAL/AQAA/wEAAf8AAAH//wEAAf///gEBAQD//wD/AAAA/wEAAP//AAEBAAAAAAAB/gAAAQAAAP//AAABAAH/AQD//gABAAEAAQEA/v8BAAD/AAAAAQAAAAABAQAAAP8AAAD/AAAA/wEAAQAAAf7//wIAAP8AAAEA/wAAAP8AAQAAAQAA/wAAAAAAAQABAP8AAP//AAEAAP8AAAAAAAD/AQACAAAAAP//AQEA/wEBAQD+/wEBAQQBAAEAAP//AAAAAf8A/wH+//8CAP8AAQIBAAAAAQD///8AAAABAQH//wAAAQAAAP9SUk4zMzCEg4mysbLr7OkAAAAAAP8AAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAP8AAAAAAAAAAAIAAADT0dX/AQAA//8AAQEAAP8AAAD/AAABAAABAAAAAAEAAP8AAAD/AAAA/wAAAQAAAAABAAD/AP8BAQEA/wH+AAEBAQAAAQD/AAEBAP/+AAACAP8A/wHb293s6uv/AP/8/v78/f0BAAD/AAACAQIAAAAAAQACAQAAAAEBAQEA/wAWFxUmJiYAAP//AP8BAAH+AP4B/wD+AAADAQD/////Af8AAAEA/v4AAQL/AQEAAAD/AAAAAQL/AAAB//8AAAAA/wD/AAACAAH/AP4AAQEBAAAAAAD/AAACAAAA/wAAAAAAAAAAAQAA/wD/AAH///8BAQABAQEA/v8AAv///wEBAAD/AP8BAQEAAAD/AP8AAAAA/wAAAQAA/gD/AAEAAAD//wABAAAAAf8AAAAA/wL/AP8A////AQAAAQABAAAA/wEAAf8AAAEC/wD+AQABAAAAAP/+/gAAAQIBAf8AAAABAP/+/wABAQAAAQAAAAAAAAABAAABAP/+AAEB/wAAAQAA/wAAAf8A/wAAAQIBAf////8AAAH//wAAAAAA/wABAQEBAAAAAAD/AAAAAP8AAgEA/wAAAf7//wEBAAL+AP8BAQAAAAEAAAH/AP4AAAEAAAAAAP8A/wEBAAAAAQEB///+AAABAAH/Af8BAP8AAAL/AAABAAD/Af/k4ePV1NX//wEBAf//AAAAAP8gHQEA/gAAAQD/AgIBAAL+/gEBAQAAAf//AP8BAP//AP//AP4AAAMC////AP8AAP//AQEA//4BAQL+AP8AAAAB//wAAAMCAQH/AAD/AP8CAAL///4B//8CAQEA//8BAAAA//8BAP8AAQABAAD/AP8A//4A/wD/AP4B//4AAv4A/wAA//4AAgABAP3/////AP4AAAACAP8A//8AAP8AAf8AAP8BAP8A//4BAP////4C/wAAAf8A////AP0BAAD+AP4CAAAAAP4B//4AAAEA/wH/Af7/AAABAf4A/gIAAP4AAAABAAD//wEAAP///v8BAQD/AAAA//8CAAAAAAEAAAD+/wACAP8A/wAAAAABAAD//wEAAAAAAAAAAP4AAQH///7/AP8CAAH/AAAAAP8AAAAAAP8AAAAAAAEA//8BAAD/AQAAAP8AAP////8CAAH+//8BAv8BAAEB/wD+AQAB/gD/Af//AP8BAAAAAAAAAP///gABAAEA/wD/AAABAAAC/wAAAQH//v4BAQAA/gD/AAEBAP///v4AAP4A//8AAf7///4B/wABAAAAAAAA/gD/AQEB/gAAAQH/AP8FBAArKf27wAIAAAAA/wAAAP4AAAEAAAAAAAAAAAEAAP8AAP8AAAAAAAABAAH//wABAP7/AAABAAD/AAACAAD//wEAAP8AAAD+/gABAP/88OL80OH61AwGHjAGJDwDERsCAQECAQH/////AgAA/wABAP8AAAEBAQAA/gD/Af8B//8AAQH/AAH9/v8BAgAB//0AAgL+AAEC/gD/Av7+AQIC///9AAACAAADAAL////9Af4C/wEBAQH+/gIDAAD/AQAAAgD+AP8BAQAAAAD///8C/v8BAv8B/wD+AP///gIBAAAJDhX/AAEBAAH/AAH/AP3g5OTr6+oWFRb/AQEBAQD///////8AAQECAAD//wEAAAABAf/+AQAB/wH///8BAQH/AQD///8AAQEAAP8BAAH/AAEAAf4AAAEA/wD//wABAAD+AQEAAAAC/wEAAAAA/gAAAgABAQAA/wAAAP//AAD//wABAAAAAP8AAAAA/wH/Af///wAAAAEBAf/+/wABAP8BAAD/AQAA/////wABAAEAAP8AAP4AAAAAAAAAAAEA//8AAQABAAEAAAACAQD/AAEAAP8A/gABAQAAAAEBAAEA////AQEBAQAEAAD/AAAA/wABAgAA/wEBAv//AAACAAAAAAD///8BAAEAAf8BAP//AQEA/wAB//8AAAAAHx4fm5uVb29rpqaot7a30tLQAAAB/wAAAAAAAQAB/wD+AAABAAAAAAAAAAAAAAABAAEAAP8AAAAAAAABAAAAAAAAAQABXl9dAgEB/wABAQAAAAAAAAAAAP8AAAD/AAEAAAD//wAA/wEBAf///wEAAf8AAAABAAEAAQEA////AAAAAQD+1NLX7/Dw5eXm19fX8vP33t3e7+/s3Nvf7u7u/P3+/wEAAP//////AAD/AQAAAAD/////AQD//wEBAP8AAQD/ExQVICEeBgUHFRUUGhoY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/wD/AAAAAAAAAAAAAQAA/wD/AAABAP8A/wEAAAIAAP8BAQD//wEBAf////8AAAABAAEAAP8AAAEAAAAAAQAB/////wECAP//AAEAAP/+/wABAAEBAf7//wEAAAD/AAAAAP8A/wEAAQABAAD//wABAAD/AAABAAAAAAAAAf8BAAD/Af8AAAEBAAD+AAAB//8B/wH/AQIAAAAAAAD/AAACAgD/AP4A/wD/AAAA/wIAAP8AAP8AAQAA/wABAAEBAQH/AP8AAP8AABUS//8CAQEAAAAA/wAA/wAA/f8AAwAA/gAAAQH/AgD//QABAgD/AQEAAQEBAQAC///+/wAAAgEBAAAAAP8A/gEAAgH//gABAgD/Af//AQECAAEAAf8A/wABAQH//v8A/wEA/wAA/wAAAAAAAAAA//8B/wIAAP8A/wD/AAABAAD+/QAAAAAA/wAA/wEB/gH+/wAA/QEAAQAA/wEAAQAA/wEBAAAA/v//AP//Av8B/gH9Af8B/wEAAQAA/wAAAAD+AAABAAH+AQD/AQAAAP8A/wH/////AQD+/wABAgAAAP//AgEA/wD/AQH/AAAAAQL/AAAAAAD+AQABAAAB///+/wEAAQAAAP8AAQH//v//AQAAAAAAAQEA/wAAAQH/AAABAgD//f8AAQD/AAABAAD8/wEDAQD/Af8BAAD/AAEA/wD/Af8BAAABAAEAAAD/Af8AAQACAAH+/gACAAD+AQD//wEAAQD//wD/AP4AAAEBAAD/AQAAAAECAP/+/wEAAP/+AAEAAAABAAD+AAAA/wABAAH/AP7/AP//AgIAAf/+/wsIAPUC/wD9///9AQH8/wD9AP//AQEA/wECAP/+Af8AAAAA/wAAAQAAAQAA//8AAAAAAAAB/wAAAAAAAf/+AQABAQH/AAAAAQD/Af8B/wABAAH/AAABAf8B/gH/AgD/AQABAQAB/wD+Af//AQD//gPw7QD7+f4UGf4ICwABAQAAAv/+B/wCFQMGAAEB/wD//QH++DcnBIVXCm2g9/r9/vrn0/fYGg0xS/8CAAAA/////wEBAAD/AP8BAQH/AP8CAf7//wIBAAAAAAD/AQD//wD//v8AAv7/AAH//wABAAIB/wD/AP7+AQEB/wEBAf7/AQEA/gL/AgADAQAA////AP8BAAECAwABAwD/+wEAAQAAAP38/fz8/AgHCP4AAAEAAAD/AAABAQH//wAAAgEA/wD/AQAA//7/AQAA/wIAAQAA/gAAAQAAAP/+/gACAQAAAAD/AAAAAP8B/wH///8AAAEAAQEBAQAB/wH/AP8AAAAAAQD///8AAAH+AAACAAEA////AQEAAf8AAAEAAgABAAH//wABAQAAAQEA/wAAAP8AAAEBAP//AAAA//8AAQAA//8B/wH/AQD/AAEBAP///v8BAQAAAgEA/wEAAP8AAAH/AP8AAP///wAB/wEBAQABAAEA/gEAAgT/Af8A//8AAAEBAAD/AAAAAAAAAAAAAAH/AAACAAAAAgD/AAAB//8AAQAAAQAB/wEAAQD//wAAAQAAAAAB/wEAAf//AAAA/wAAAQH/AAAAAADw7vGdn5yPjpLm5uYAAAEAAP8AAAEAAAEAAQECAQATFhYzNjczNzYSEhICAQMJCggQEBANDQ4JCggEBAP+/v7Iycq7tLr5+PgAAQICAf///gABAQMAAAAAAAD/AQAA/wAAAQAB/wH/AP//AAEBAQAAAgEB/v8BAAD/AAECAQAA/wD/AAECAAD/AQD/AAEBAQAAAAEA/wABAgAB/wL/Af8BAAEAAf4CAAL//wAC/wEAAQEAAwAA/wD/AQADBgQJEAsIEgsCBAT9/gACAQD/AAAAAAAA//8A/////v4A/v/9+/wCAP8mJSQ/PTskJCTb2dyyrLHd3d0BAQAAAAH/Af8AAAEA//8AAAECAAH+//8BAQD09vempqmysbJnZ2Vwb24bHRkAAAIAAP8AAQAAAAACAAH/AAAB//8BAQAA//8BAQD/AAL/AAEBAP8AAQH/AAAAAP8A/wAAAAAAAAAAAQAA//8B/wAAAAEAAP8AAAAAAP8BAP8AAf//AAIBAQAA/wD/AAD//wACAQH//gABAgEA/v//AQD+AP8BAAEAAQAA/v8AAQD/AAEAAAABAQD+AAABAP8A///+AAABAQABAAAA/wD//wABAQEAAQAA/wD/Af8B/wAAAQAAAAEA////AQEA/gABAQAAAQD+AAABAAAAAQAB/wAAAAAAAAAAAQD/AP8A/wD/AAEB/wEAAP4BAAH/AAAAAAABAQD//wAA/v8BAAH/Av8A/wECAQEQDv8AAAAAAQAAAP/+Af8B/v8BAQAAAP//AP8AAPwAAQL/AP8AAQP/AAAA//4BAAMAAf8AAP//AP8A/wEAAAABAAAAAf//AP8BAP4BAQIA/gD/AgAA/wH//wACAP8BAQD///4AAAAB//7/Af8AAQAB/wH///4AAAABAP3///8AAP8BAAAAAf8A//8B//4AAP8AAP8A//4AAQAA//4AAAAA/wABAP8A/wABAP7/////AQABAAAAAP8A/wAAAAEBAAEB/gD+AAAB/wAA/wAB/wD/AAIB/gABAAL//v8BAAAA/wEAAAEA/wEAAQAB////AAEA/v8AAf8A/gEBAAH/AP///wABAAEC////AQIAAP8AAAH//wAAAAECAQAA/wD///3/AAEAAQAB/wH//v8BAAEA/QEBAQEAAAEAAAAB/v8BAv7+/gD/AgEBAP8BAAEA/wD//v7/AQIB/f8B////AAIBAP8AAQL//v4BAAEAAQMCAP4A/wAA//8BAAH//wAB/wAAAP8AAQECAAD+AAEA/gD/AAABAAAAAP8A/v8B/wEA/wEC/AAA/v4A/AEA/QD//wAA///+AAAAAAAAAP8AAAABAAL/AAAAAP///wEBAQEA/gABAQEAAAD/AQABAQD//v8AAgEBAf/+//8C/wH/AAH/AAABAAAAAQL/AQABAP8A/v8AAQAAAQEA/wAB//4AAAIC9vQA7Ob/DxT/DBEBAf8AAQEBAAb8ARUDBP4CBf4A/f4AAflkQgbh6v6Gs/gAAAD12cMFFiIIHCoBAQD/Af8AAAL/AP8B/f4AAgL//wABAAEAAQD/AAD+AP8C//8A/gL/Av7//wIAAQD/AP///v/+AQEBAP//AAD///0BAAIAAAL+Av8C/gAAAQD//wAAAQD/AAEBAgH//QD/AP4AAAH+//79/v/+//8CAQL/Af8AAP///wAAAQEBAP8A/wEAAP8AAAABAf8A/wH+//4BAQEBAAD/AAEAAgAA//8AAQEAAAD//wABAAABAAL/AP8AAAAAAQAA/wH/AAAAAP8A////AP8BAAEBAgD//wD//wAAAAD+AQEBAP////8AAQACAQH+//8AAQABAAH/AP8AAAH+/v8BAQD/AAABAP//AAAAAAEAAAEAAP7//wEBAQH/AAEAAP//AP///wEBAQAB/wAAAQAAAAL//wD/Af8B/wAAAAAAAAAEAP8B/wAAAgEB////AAAAAAABAQD/////AQH//wABAP//AQEBAAAA/wAAAAAB/wEAAP8AAQEAAAD/AAABAAD/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AAEA/v4AAAAAAQL//wH/AAAAAAD/AAAA/wD/AQAAAQEB/wAAAQAAAQAAAAAA/wABAAH/AAABAAD/AAAA/gD/AAABCwwL/wAAAAEA/wAA/gAA/PkA/wH/AP4B//4BAP8AAf/+Af7/AP8A/wH/AP7/AQD/Af8BAP//AQD//wAAAQD/AAEAAgD/////AQAAAf///wEAAQAAAP//Af8AAf8AAAD/AP//////////AP4AAAD/Af7/AAAAAP//AP//AP4BAP4CAv8BAAABAf4AAP8AAQAAAP4AAP7/Af8BAAAB/wABAP4AAP8B//8BAP8CAP//Af8AAP8CAf4AAP4BAP4AAf8AAf4BAf4CAP0BAP4BAf//Af7/AP8B//8B//0C//4BAf8BAP8B//8AAP8AAP4A//8B/v4CAP0B//4A/wAA//7+//8B//4B//8A/wAA/f7//v4A//7//v4A/v4B//0B/v///f8A/f////4B//7//f4A/v8B//0B////AP8A//0A//0B//8A//0B/gABAAAC//wCAP4B//0B/v3/AP8A//3//v4A/v4BAP8A/v//AP8B//8A/v0B/v4AAP8BAP8AAP0B//8B/v4BAP////4B//8AAf4B//4BAf0AAAAB//4CAP4A/v7///8A/wACAP//AP8A//7//wAAAP///wD+AAD/AP/+///+//7+AAD/AgAAAAH/+v8AeaYEus0AAP8BAP8BLBwIeEcEAf8BAAACAAAAAP8BAP8BAAAAAAABAP8F/P8J+/4I/gECAAACAAABAf4AAAD/AQEAAQAA/wAA/wABAAAA/wEBAAAA/wAAAAAAAAD/AAAA////AAEA//8BAAEAAAEBAf39APn5APr4AvfuAff0AP/+Af//7/kB//3/AAD/AQQGAAL//wAAAAEA/wL//wD+/wABAP8A/wIAAQAA/wD+AAD/AP/9/wD//v/+/wEB/wAAAf4AAQD//v///v/+/wD//v7+//4A/wD+/fLuAP76AAABAAAAAAABExMTBgYH/gD+AAAA////AAD//wAAAAD/AP//AQAAAP8AAAAAAAAA/wD/AQAAAQABAQAAAAABAAABAAD/AP8AAAAA/wAAAf8BAf//AQH//wAAAQEA/wD//wD///8A/////wAAAQAA/gEAAQABAQAAAAACAAEBAP//AAEBAQD/AAD+/wAB/wIBAQAAAAAB////AAAB/wAAAP8BAP8A/wAAAQAAAAAAAAH//wAAAQAB//8AAf8AAv8AAAD/AQD/Af8AAP//AQAAAQAA/gD/AQABAAEA/wEAAf8BAgH//wABAQD/AAH/AZSTlZaUlgAA/gAA/wAAAAAAAQABAwABAgACAgEAAf8AAAAA/wD/AAEB//8A/////f//AAD//g4RDS4yLgIBATQyMTw6Nw8ODQMDAgQDBAMDBAICAgMDAQEBAgIEAgQDAgIDAwQCBAQEAgQDAwIDAgMCAwQEBAMEAwIEAwQCAwIDAgIDAgEDAgMEBAIBAgICAgMDAgICAAIDAgICAQEBAQEBAQIBAQMBAQICAQICAgIBAQMBAQICAQIBAAEBAQECAAICAgEAAAIBAgABAAMCAwEBAAH+AAEAAQEBAQUHB1hYWF5dXQMBANvb3LW1suzs7P7//wABAgD/////AAD/AAH///4B//8AAAACAP7/AAD/AP4B//4A////AAEBAAEBAQAAAP/+//8B/gD/AP7+Af//AP8A/wD//wAAAf///wEAAQAA/wH/AP/+/gAAAAD//wAAAAAAAP4BAAEAAQAAAAcHBwEBAQMBAgkGBvX29fz9/QEBAQEBAQEAAAECAQABAAEBAQABAAIAAAMCAf7//kRERHx+fQsLDAD/AAD/AAAA//8A/66vsH18f/r4+AEAAQIAAgABAQD/AAAAAAAB/wAAAAD/AAABAAD/AAAB/wD//wEAAAAAAAH/AQH/AAAAAAEA/wEBAP4AAAD+/wD/AAEB/wAAAAAAAAEAAAEA//8AAP8BAP8AAQAA/wAA/wEBAAAAAQH/AQD/AAEB/////wD/AAABAAAAAP8AAAEAAAEAAP///wAAAQAAAgEAAP8A/wH/AQAAAP//AAAAAAEAAAAAAQAA////AP8AAAH/AAEAAA8PD////////wAAAAEAAeXpAAD/AAD//wAA/gH/AAD/AAH/AAAA/wL+AAAB////Af8AAAAB///+/wH/AQAAAf//AP///wIA/wEA//8A/gAA//8AAAAB/wAA//8A/wAAAAAA/wL+AQH+AAH/AAD//wAB/wD+/gD/AQEAAQD//wD/AP8AAAD+AQD/Af/+/wD+AAH+AQD/AgD+AAH9/wP+AAD9/gD/AAH9AQD9AAH8AQH8AQD+AAD9AAH+AQH+Af/+Av/+AgD+///+AAH+AQD+AP7+/wD+/f/+AAD+AQD+Af//AP//AP/+Af/+Af7+Af7//////v7+AP/+Av78//7/Af/9AAD/////AgD/AAD/AP/+//0AAP/9Af//Af7/AP7+AP//AQD+AP//AP//AgD/AQD9AP8A///+Af//Af/////////+//8AAAD/Af3+//7/////AQD+AAH/Af/+AP8AAf//Av7+//79/wD+Af7+AP78AP8B/wD+Af/9Af7+/wD/AP79//7+///8Af//AP79AP7/AP/+AP4A///9////AP4AAP/+AAD9/wAA////AP/+/wD/AP/+AAAA/gD//v///P8A/QH//QH//gAB/wABAP4AAo2yAp27AQABAAD/AR4WB5dbCR0RAQAA/wAA/wABAQAAAQAAAAAAAv/9Bf3+CPz/Bv8AAwH/AQD/AAEAAP4B/wECAAAA/wAAAQIAAAABAAABAAD/////AP8AAAAAAP//AQAA//8AAAAAAAEAAAEAAAAAAAD//wH59wH06wD68//7+QL8/QEB/+Dy/wABAAAA/wAKCwD/Af8A/wAA/wD//wEBAAAA/v4A/wD//wAAAQAAAP8A//8AAAD+/wEAAP8A/wD//////v3/AAAAAAAAAAEA/wAA//8A/v//APr07AAAAQAAAAAAAQAAAC0xLgACAAEAAgAAAAEBAQD//wABAAAAAQABAQAAAP8A/wEAAf//AAAAAP8BAAABAAEAAP8A/gD/AQAAAAAAAP8AAAAAAAABAf8AAP8AAAEAAAD+/wEAAAAAAQECAAAAAAEAAQD/AAABAAAAAAAAAAEA/wD/AP8BAf8AAP8AAP//AQEA/wD+/v8BAAAB/wAAAAAA/wAAAP8AAf8AAgH/AAAAAQD/AAABAQAA/gAA/wECAf8A/gABAQABAP8BAAABAAABAAAAAP8AAQH/AQAAAAD/AAEA/wAB/wIAAQEAAAABAQC3triDgYP3+PcAAAAAAAEAAAEAAQMAAQEBAgIBAAEA/wD/AP8BAAH///7+/f8AAP8BAQEAAQEGBgYqLS0IBgZCQD45NzYIBwcDAgIEAwICAQICAwIBAwMBAwMCAwIEBAMDAgMDAgECAgIDAQMCAQIDAQICAwMBAgICAgECAwICAgEDAQIAAQECAgMCAAICAgICAgECAQMBAQECAQEC/wACAQECAgMBAgAAAQEAAQEBAAABAgECAQECAQIAAgIDAwICAAECAAACAwMBAQACAQL/Af8AAwECAwICAQECAQEBAQADAgRNTk08PD36/PrT19XBw8D59/j//v8AAQABAAD/////AAD/AP///v///gACAP//AP8A/wAAAAEBAP/////+/wD///4BAQAA/wD/Af8AAP8AAf8A/wABAAH+/wAAAAD+/gD/AP//Af8AAgEBAf/+AQAAAAAAAAAAAP////4A//8EAwQCAgICAgEHBwf5+vj+/vwBAQEBAQABAP//AAECAAABAP8CAAIAAQAAAAAAAAH+/v1ISEh2eXgICAkAAf8A/wEAAQL//wCQkpKbm50AAAD+AAAA/wABAQH/AAEBAAEA/wABAQEAAAAAAQEB/wIAAAH//wABAAAAAP//AgABAAAA/wAA/wAB//8BAgEAAAD/AAEBAQAAAP//AAAA/wEAAAEAAAABAAEBAAEAAAEA/wABAP//AAD//wD/AQAAAQAAAQAA////AQABAAAA/wD/AAACAQL/////AP8AAAEBAAEAAP8A/wABAAABAAAA/gAAAAABAQEBAAEAAAEAAQD/AAAQERD/AP8BAAEBAAAAAP/m6gABAQAAAAAA/wD/AAABAAD///8A////AP4A//8AAAAA/wEB//8BAAAA//8AAP7///8AAAD/AP///wAB/wAAAAAA//8AAAABAP8BAP//AP///wAAAP//AAAAAQABAQIA/QAA/wIA/wD+/wEA/gEAAAEA/wAB/QL//gAA/wIA/gEA/wAB/gAA/gAA/v8A/v8BAAEA/QAB/gEA/AIA/wAA/wAA/QEA/wIA/v8A/gAA/f///QD//QD//gD//QD//QAB/gD//gIB/gD//////QAA/AAA/QAA/wH//v8A/wD//AAA/gH//wD+/wD/AAL//gH//gH+/QH+/QD9/gD+/wD+AAIA/gL+AAD+/QD//v///v/+///+/wD9/wD//v/9/gD+AAD+/QD+AP/9/f///gH//wH//gL9/f/+/f8A/gH//QL//gD+AAD+///+/wD//QD+/f/+/wD+/gL+/QD//wH/AAD+/QH+/wD+/wD9/gL8/f/+/gD//////v/9/v/+AAD9/gD+/gD+/QH9/wD+/v/+/f/+/wH+/wD//QD+/gD/////AP//AP7//f3+/v0A//8B//z+APsAAf8BAP/2+QGAqQODqQT8/AAA/wIdFQeiYgs6JAMA/wEA/wIAAAEA/wL/AP8AAAAA/wP8AAf7/wb/AAEAAAEAAAAAAAD/Af8DAP8A/v8BAP/////+/wABAAD/AAH/AAIAAAAA/wEAAAAA/wD/AP8BAAIAAAAA//////8A//8A//8A+vf/+fYB/vwB/fsA/v8A/v/c7f4A/wAAAAECCQ3/AQAAAAD/AAAAAQD/AQAAAAAAAQAAAQD+AP//AP//AAD/AP//Av///wD+//4AAP8AAQD/AP/+AP/////+////AAD/AQH+/wD79O8AAP8AAAABAAEAAAEUExMAAAABAf///wAB/wAAAQEA/wD/AQAAAAAAAAAAAAH/AQEAAAABAAD///4A/wD/AAABAAEAAv8BAAEAAAAB////AP8AAP8AAAEA/wH/AP8AAQAAAAABAQD//gABAQH/Af8BAQAAAAEA//8AAP8AAAD/AAAAAAABAAAB/wEAAAAAAAABAQEAAP///wABAAABAAEAAQABAP8A//8AAAAA//4BAAH//gABAQEAAAD///8AAAH//wAA/wD///8AAP8AAAEAAf8BAP8AAv7/AP8AAQH/AAAAAAACAAD/AQAAt7e6Wlte7O7uAQAAAAAAAAEBAAABAAABAQIDAQAC/wEA/wEAAQAB/wEAAQICAQEAAP//AQABAv8AHyIjFBYUPT49MS8sBwUEAwQBAgMDAQIDAwMCAgECBAICBAMCAwECAgIDAwICAgMCAgICAwIDAwICBAMDBAIBAwICAgIBAwACAQIBAgIBAgEBAgABAgEAAgIAAAEBAQEAAQEBAAEBAQIBAQABAgEBAQEBAwICAQABAgICAQEBAAEBAQEAAgEBAAEAAgMCAgECAgEAAQICAQEBAwECAv8AAQAAAgIBAQEAAQACAAEBBAQFWFpZHRwd+vj4ycnI2tra///9AP8A/wD/AAD//QD/AP7/AAABAP8A//////7//wAAAP///wD///8AAP///wEB/wD+AAAAAQAA/wD//////////wAAAQD//v8AAAH//wAAAP8AAP///wABAQAAAP8A/wABAAABAAAA/v8AAgMCAwMDAAH/BwYF+Pn5+vr7AAEBAAEBAAICAgEAAAABAAEAAf8AAQABAP8AAQAAAQIC/v7/U1RTaGlpAQEDAAEAAP/+AP///v7/hoaJyMjMAAD/AAH//wAAAP//Af//AAEBAAD/AP8B//8A/gEAAAD/AAEBAP8BAQEA//8AAAAB/wAAAAD/AQEAAP8AAQAAAAAB//8AAAAAAAAAAAEBAf///wAA/wEAAP//AAEA/wAAAAABAQABAQEAAP8BAQD/AAAAAQECAP8BAP8AAAAAAf///wD/AQIAAgEAAAD/AAD/AAAAAAH/AQAA/wABAAEAAf8AAAD////+///+AQAAAAAADg0OAQAAAAAA/wAA/gAA7PAAAP8AAP4BAQABAQAA////AQEAAQD/Af8AAP//AAD/AAH///8A//8BAQEA//8AAAD/AP8AAP8BAQEA/wAAAAAB/wABAP8CAAABAP8BAf4BAv8C//8BAP//AP4AAf//AAABAf8AAf8BAv4AAQEAAv4AAf4B/wD/AP8AAf7///4AAP8AAf8AAf7/AP8CAP8C//0CAP4BAf4AAf//Af0BAP0AAP//Af3///7///4AAP4AAP4A//4BAP4BAP4A//4B//4C/v3///4CAP4A//8A//8A/v8B/v7///7+/v7//wAB/P7//v8A//4A/v4A/P8B/QAA/P4C/v8A/v0A//0C/v3//v7//v////8A/f4B/v8B/v0B//4B//7//f8B/v4A//4B//8A//wB//4B/v8B/v0A/f4A//4C/v4B/v4A/f7//f4A/f4A/v4A//0B/v8A/gAA/v4B/f3//f7//v0A/v4A/v7///8A/v8A/v7+/v/+//////7//gEAAP0BAP0CAP8C/f4A/v4B/v4A/v4A//4B/v0A//0A/v3+///+/v3//v7+/v79/v//Af3+Af/7AAH8AgH/AAL+9/wBf6kAg6oE9/j/AQABCwkEjlEJPyMCAf4AAAICAAEBAAACAAABAQADAAAE/P8H/P8H/v8BAAIBAAEAAAAAAAAAAAD//wABAAAA//4BAQEBAAEB/wABAAAAAQD/AP//AQEBAP8AAQAAAAAA/wD/AP8AAAAAAQEAAAEAAQEA//z8//35/v35APv7APz+//wA4PABAAABAAQHAQcJAAEB/wIBAAIB/wH//wIAAAEAAAEA/wAAAAD+/wAAAAEAAAEA/f//AAH+AQAA/gEA//8A////AP4A/wAA///+/gAAAAAAAAD++O7oAQEBAQEBAAEBAQEAHh4fAP//AAABAgEAAAAA////AAAAAgAAAAAA/wAAAQD/////AQEA/wD//wEBAAAAAAAA//8A//8A//8AAAD//wAAAf8A/wAAAQAAAQEAAQAAAP//AAAAAAAAAAEA////AP8AAQAAAP/+AQEAAAAAAAD/AQAAAQAA/wD//wEAAAEA/wAA/wEAAQABAQD//////wD/AAAA/wEAAAAA/wD//wIBAAAAAAD///4A/wAAAf8AAQAAAQAAAAABAQAA/wABAAD/AAABAQABAP4BAQD/////AQAB/wAAAv8AAc7O0HN0dvHx8gEBAf8AAQAAAQD/AAABAQECAgAAAQABAQEAAgAAAAAA/wD9///+//8AAAICAQEBAQkKCCsxLT9APzAvLgQEAwIEAwIBAgICAQMCAQECAgQDAgMDAgMBAgIEAgICAwMDAgUDAwMEAgMDAgMDAwIDAQIDBAICAgICAwIDAQIBAwICAgMCAQIC/wECAQABAgIBAQECAgIAAQMBAQECAgMDAQACAQEBAQEDAAICAgECAQIAAgIBAgECAQEBAQMBAQL/AQADAQEBAQEAAAECAAAC/wEDAgECAQABAQEBAgAB/wEBAAEAAhsbHEtMTQEEA+rr6sTFwfLw8f///v////4A/wD+//7//////v8B/wABAQABAAD/AP7/AP7/AAABAP8A/wD//wEAAf7///7///8AAAEAAAAAAAEA/v//AAIAAAH/AAAA/////v/////+/wEA/wD//wD+///////+/wEB/wQFBQQFBP//AAcGBfLy8/n5+gIBAQEBAQEBAQD/AAABAAEAAQEBAAABAQEBAQEAAAAAAP8AAAEAAV9hYVhYWQEAAQD/AAAAAAD//ufo6HV2du/t7gD/AAEAAAEBAQAAAAAAAP/+AAAA/wAA/wH/AAEAAf8B//8CAP8A/wIBAAAA/wL/AP8AAQAAAAAA//8AAf///wEAAAABAAAAAf4A/wABAAEAAAH///8BAf//AQEAAAAA/wAB//8AAAAAAQAAAQD/AAAA/gEA/wAB/wAAAQAAAQAAAP///wAAAAD///8AAP8CAAABAf4BAAAA/wAAAf8BAAAAAQECAgEBAv8AAf8A/xgYGAAAAQAAAAAA/wAAAersAOfqAAABAP//////AAAAAQH+/wAA/wD//wEAAP///wD///8AAAAAAP/+/wH+AAIAAQAAAAAA/wD//wEBAQH/AAIAAf////8AAQD+AP///wD+/wEAAAL/AQH/AP/+AAEAAP8AAAD/AAAAAAD/AQD/AAEAAgD+/wAAAQAAAAH/AQD9AQEAAf/+AQH+Af/8AAD+/wD+/wD+///9AAD+AQD/AQH9AgD//wH+AAD9AP/9AAD+AAD+AQD9AAD/AAD/AAD+AAH+Av79/v/9AAD+Af3+Af/+AP/9AP8AAv7///3+//7+//7+//7/Af3+AP//AP3+Af3///3+AP3/AP3/AP3+Afz9AP79AP3+AP3///7/Af7/APz+//z/Af39/v7///z/APz+Av3+//4A//7+AP39AP7+//7+///+//7+//3+AP3/AP3+//3+AP7/AP3+AP/9AP//Af8AAf7/Av3///79AP79Af3+AP79AP7/AP7+Av7/Af//Af3+AP4A//3+//z9//7+AP4A//79AAD+//7+//7+//7/AP0A///9/v7+/f79///9AAD//wAA+wAC/AH//QAB//f6/3qiAY2wAwD//gD/AQMBA3lICVIzAwABAAAAAgD/AAABAgAAAAAA//8AAvv+CPz+BgAAAQABAAH+AAAA//8AAP8AAAD/AAAA////AAABAAAA/wEA/wAA/wD///8BAQABAf///wABAP8BAAAAAQAAAAAAAP4AAQD/AQD+AP8AAAD//wH/AAH+AAH8/wD//+bu/93r/gAA/gEPFwAJB/4BAP4B//8A/wAAAP////8A/wAAAP8B/wEBAAD//wAA////AAEAAf4AAP4A/wD/AAAA/wAA/wAB/v////8AAAH/AP/+/v79/fry7f//////AP//////ASEiIQAAAf//AAD///8AAAEBAAAAAP//AP8B/wEAAAAAAQH/AP8AAAAAAQL/AQAAAf8AAAAA/wEA/wEBAAAAAQABAv8BAQAAAP8A//8A//8AAP8AAAAAAP//AAH//wABAAACAf7/AAIAAf8AAQEBAf8AAAAAAP8A/wAAAQAAAAAAAAEBAAD+AP8A//8AAgEAAQD/AQD//wH/AAAC/wD/AQD/Af8BAAEBAQEBAQEAAv8BAAAAAAAA/wD/AAAAAAIAAf8AAQD/AP7/AP4AAP8AAQEBAAAAAAEAAALk4+RnaWnX1tf/Af///wAAAAAAAAEAAAEAAQIAAQICAQEAAAEA//8AAAIAAAEAAgEA/wAA//8CAAMBAgA1Njg9OzwrKCgIBwYCAgMCAQECAwICAQIBAQEDAgACAgACAgIDAwMDAgQDAwICAgICAgIDAgICAwIBAwIDAgMCAgEEAgIDAQEDAAICAgEAAAECAQIBAQICAQECAgEBAgEDAQACAwEBAgIBAAH/AQECAAEDAAIBAAEBAQEBAAEBAgEBAQACAQEDAgABAAEBAgEBAAEBAQIBAgECAQMCAQICAAEBAAICAQEBAQECAQIBAQEAAQH///85NzkkISP8/fzV19XV1tT+/P4A//8B/wAA/wAAAP///////v//////AP/+//8AAP///wD//wD//v8A/gD9//8AAAEA/wAAAP///wAA/wD+/gAAAP8AAP//AP4B/wIBAAAAAQEAAAD/AAAAAf//AP8AAAAAAQH+//8EAwIFAgMA//8FBQbx8fDy8/IBAAECAAEAAP8AAgABAAAAAQH/AQEB//8AAgAAAAEBAAEBAQD/AAEFBgZqbWswMTIAAAEAAAAAAAIAAQHExMSPkZL/AQEAAP//AAD/AQAA//8AAgAAAQD//wAAAP//Af8B/wAC//8AAAEA/wAAAAH/AQABAQD//wAAAQAAAAACAQH/AQAA/wH/Af8BAAAAAAAAAQEAAAEBAP8BAQAAAAAAAP///wABAAABAAD//wH/AP8AAQIAAQAAAAEAAf7/Af//AP8CAAL//wAAAQEBAQEB/wAA/wEBAAAA/wAAAf8AAAD///8AAAD/////AP8B/wAVFRX/AAEAAAEAAAEAAAHm7AHd3AD9/wAA/wAAAP8A//8AAQAA/wD/AP8A//8CAAAA/wAAAAEA//8AAAAAAgAA/wEB/wEA/wD//wEAAAD///////4BAAAA/gAAAQABAAABAP8A/gD+AAAAAP8B/wIA/wEB//8AAAD//QAA/wD+/gD//v8A/wAB/gAB/gAB//8A/wD+/P8A/wEA/v8B/wEB/gEA/gH//QEA/gAA/f8B/QAA/wD//QH//QEA/gAA/wH//gD//gAA/wD//QD//v///gH//gAA/v/+///9/v/+/f///gD+/wH+/v///gD////+/QH9/gH8/v7//wD+/v/+/gD+/gD8/wH+/wD9///+///+AQD8/gD+////AAD+/wH9/wD+/wD//f/+/wH9/gH//wH+/v/8/wD8/AD8/gD9///+///9/wD8/wD8/wAAAAD+/f///gD+/wH9/////v/9AAD9/QD+/gD///7+/wD9/wD+/wD//gH//wD//gH//wD+/QD7/f7+/v39/f/+///+/v/+AP/+/AD+///9/QD+/wD////+/v7+/v/9/v/+/wD+/v7+/v4A/vwBAvwBAP4AAgD0+gB4ogKRtQL//wEA/wAAAQFkPwd0RgUCAgEA/wEAAQAAAQEA/wAAAQIA/wL9/wn+/wb/AQECAAEBAP8AAAAB//8BAAABAP8BAAAAAP8BAgECAAAA/gEAAAAAAAD/AQABAP8AAAAAAQAA/wABAP8B/wAAAf//AP8B/wD/AP8BA/8B//8AAP4A/wAA+///+fv///7U5v/l8/4AAP8DExf/BgL+AgAAAAAAAQH/AAAAAQAAAgD/AAAAAP//AAAAAf//AQD/AAD/AP8AAAAA/v7/AP7+Af//AAD///8AAP///wD/AP7/AP/67+j47ugAAAAAAP8BAAEUFBMnJib/AP8BAQAAAQAAAAAA/wAAAQAAAAAB/wEAAAAAAAD/AgABAAAAAP8AAP//AP8BAAABAgL/AAAAAAAAAQAA/wABAAABAAAAAAEAAQEBAAEAAAD/AP8BAAEBAQIBAAEB/wABAQD/AAAB/////wABAAAAAAABAAIA/wABAAAAAQD//gAAAQEBAAEAAP//Af8AAQABAAEA//8A/wABAQABAP8A//8AAQAAAP//AP8A/wEAAQEAAQD/Af8BAAH+//8CAQEA/wAAAAABAQEAAAD/////AAAA//8CbWxvzMrOAAAAAP8AAAABAAABAAAAAAECAQICAAEB/wEBAP8AAAEBAQH/AP8A//7//gH+AgMCAAIAMTEySE5JICIfDQwMAwIDAwIAAgICAgECAgMCAwMDAgMEAwEEAwEDAgIBAwMBBAECBAMDAgICAgICAgECAwEBAgIDAgEBAAEBAQEBAAEAAQEAAQIAAAACAgICAgECAgABAgABAAACAgECAgAAAgIAAgABAQH/AAEAAQABAgEAAQABAgEBAgEBAQECAAEDAAACAAEBAgABAQEBAgACAQAAAQABAQEBAgABAAABAgECAQACAAD/AQIBAAD/DQ0MODg4AgEC8vLyycvJ8PHwAP4A/v/+AAD+//8AAAD/AAD//gH//v4A/wD//wABAAD////+AAEAAAD/AP7////+AP/+//4A/f4A/wD+AAD///7+/f8AAP8B/////gABAP//AAD//////gAA/wEBAP///wH+/wAAAAEA/wEB/v//CAcH/wAB/v39AQIBAQIBAgEBAQECAAEAAQEAAQEA/wEBAP8AAAEAAQEBAQAAAAH+AAD/ERESdHZ0FRYWAQEBAQH/AAEAAP8BlJGWpaOk/wAA////AAABAQAA//8AAP8AAQIAAAAA/wAAAAEA/wEBAAAA/wD/AAD/AAAAAAABAAABAP8CAAAA/v//AP8AAAH/AQAA//8AAQAA/wAAAAAAAAABAP//AAEAAAABAQEA/wAAAAAAAQD/AQEA///+AP8B/wD/Af8BAAEBAQAB/wD/AQAAAQD/////AP//AAAAAAABAAH/AP8A/wABAQEAAAAAAAEAAf8AAAD/EA8PAAAA/wD/AAABAAABAAAA6e0CBAEAAP8AAP8BAP8B//8A//4AAAAA/wD/AAABAf8AAv//AQAA/wEAAP8AAP//AAD/AQABAf8AAP7/Af//Af8BAf8BAQAA//8BAP8A/v8AAAD/AP8A//8AAP//AP4A//4CAP4BAv8BAP4BAP8CAP4A//4CAf7///4C//4AAP4AAP8CAP0AAP0BAP4BAf4AAP0BAP8BAf8C//4A//4BAf3///0CAP8CAP8C//4AAP4BAP7+/wAA/wEA//4B/////v4A/gEB//4B//4AAP8A/P4A/f4A/P4B/f4B/P4B/f8A/P7//f0B/f4A/f7//v7+/v8A//0A//4B/v4A/v8A/vwA/v8B/f3//P3//Pz+//0A/f4B/f4B/v8A/v4A/f7//v8A/v4A/f4A/v4B/v4B/P0B/v7//v4A/v4B/QD//f/+/QAA/v///v7//f4A/v3///7+/v4B/f4A//8B/QAB/v8A/P7//P7//v///v0A/v8A/wAB/f4C/f8B/v4A//7//v0A/v///f4A/v/+/v7+/v/9/v/+/v3+/v8A/v/////+AgH7AAP6AAD9AAH/2+oAWowEk7IF//0BAP8BAAACYjwFjVQEBwP/AAD/AP8A//8BAP8AAAAB//0C+/8J/f4F/gABAAAD/wD/AQABAAAAAAAAAAD/AQAAAQAAAQEBAQD//gEAAQIA//4AAAABAP8A/wAAAQEAAP8A/wD///8B/wEAAf8AAQD/AAH+////AP7+/wH/AQH+Af/+APn7APv9Af0AyuL//gAAAAABAxUZ/gEB/gEB/wAA/wD9AAIAAP8AAP8B/wD//wAA/wD+AAEA///+AQD/AgEA/wD+/wEAAP////7//////wAA/gD/AAH+/wAAAAH/+OvhAPz3AAD/AAAB/wH/MDAwHRwcAQABAAAA//8BAAEBAAEB//8AAAD/AAAA/wAA/wD/AP4A/wAAAAABAAAAAP8A//8AAP//AQEBAAD///8AAQH/AAAAAAABAQAAAQAAAAAAAAEAAAABAAD+AAD/AP8AAAAAAAAAAAAA/wEAAQH/AAAB/wAAAAD/AAEA//8AAP8AAAAAAQD+/wH/AAD/AQABAQABAAAA/wEBAAABAAAA/wAAAAAB//8AAAABAAAAAQEA//8A/wAAAQD//v//AQEA//4AAAAAAAH/AP//AP8AAAABAQAAAAABArS0twEAAgAAAAAAAAEAAAAAAAAAAQECAwABAQEAAQAAAAAAAAEAAQD+//8A/wEA/wUBAgICAiQpJVNbVRweHRUREQECAQMDAQEBAgICAgIDAQMBAQIBAgMCAQMCAQMDAgMCAwMDAwICAgECAgMCAgIBAgIDAAEBAAABAAICAQIBAQIBAQMBAQIBAQMAAwECAAEBAAABAAECAQABAQEBAAAAAQECAQEBAgABAAABAgEBAgEBAQEBAQECAgEBAQACAQAAAAEAAAIDAQIBAQECAAABAAEB/wECAgEBAAEAAAAA/wEAAAD//QEB/wECAgAA/wMBAgAA/x8fIA4QDv4AANve3OTk4v/////+AP8AAf/////////+/wD9/wAA////AP7+/QH//v//Af3+/v3/AP//AAH+AP//AQAA/wEA//8AAf//AAAAAQH/AP////7//gD+////AAD//gD//wD/AAD///8AAAD+AAH/APv9/gABAf3+/QUGBgoICOnq6AACAAABAQEBAwIBAQICAgAA/wEAAAABAAEAAP//AQD/AAAAAQAAAgABAQAAAC8wMnV4eAoMDv8AAQD/AQABAfHy8np7f9XS1AEBAQAA//8AAAEBAAABAAAAAP8AAAD/AQAAAAD/AAD/AQEAAv8AAf8BAAAA/wAB/wAA//8B/wEAAQAAAAD/AQAAAAEAAAAAAQH/AAAAAP8AAAABAAAAAP8BAP8AAP8A/wAB//8AAAD/AQEA/wD//gD/Af4AAAH+AP8AAAABAf8AAP//AQAAAQABAf8B/wD//wAAAQAAAAEAAAD/AAAA/wD/AAAAAQAAARkaGR0eHQAAAAEAAAAA/wIAAN3iAQD+/wD/AQH+AQD/AAH/AgECAAD/AAH/AAD//wABAP8AAP8AAQH+AQAAAAABAQEA/wD//wD+AP//Af//AQAA/wAA////AAH/AAEAAAAAAAD/AQL/AAH/AQAAAAD/AQH/AQD+Av/////+/wH/AAD+AQH+AP7/AAH/AAH+AQH/AQD+/wAAAAD/AAH9AAD9AQD//wL+/wD9AAH+AQD+///+AAD+/wD8/wD9/gD+AP///wD/Av/+AP/9Af7+AP7+Av7+///9AP39AP7+Afz/Af7///3+/v7+AP3+Af7+AP7/AP//AP4A//3+//39Afv/Afv+APz+//z+/f3+AP39//7///7///3/AP7+AP//APz///7+AP3///3+AP3/Afz+//3+AP39AP7/AP3//v3///4A//7/Afz/AP7//v79////Av/9/vz9Af3+Af3/AP3+AP3/AP79/v3+Af38///9//v+//3/AP79//3+AP3/AP39//z9AP39AP78APz9AP3/AP39//7//v7///z///7+AP79APz+//z/APz//f7+/QEA+wEC+gEB/QAEAK/LAFGFBLTJAAAC/gABAgECAFw5BYxTBgoFAgABAAD/AQACAgEAAAD+AgAABPwACf3+B/4AAgAAAgAA//8BAP8AAAABAP8AAQEBAQAAAP4A/wAAAAEAAAH/AP///wADAAAAAAABAAD/AP/+Af8AAAAAAAAAAAD/AP//AQAAAf8AAQEBAP//AQEC/wAA/P///gD2+QD9APP4/q7X/wAAAQAABQIdIAADAv8B//8BAAAAAf/+//8BAP4A/wECAQEBAAAAAQAA/wAAAP8B//7//wD//wAA//8B//8B/gAB//8A/gAA/v4B/////v8BAfrt5wAAAQAAAAAA/wD/ASEhIAD//v8A/////wEA/gH/AAH//wEA/wAAAAAAAAAA/wEAAQEAAAEAAAAAAAAAAAABAAEBAAAAAP8AAAABAQIAAAD/AP//AAD/AP//AAD+AAD//wEBAAEAAAEAAv8AAP8BAP8AAAD/AAAAAAAAAf7/AAAA/wAAAAAA/wEAAAAC/wIAAQECAAABAAD+AAAAAf8AAAD///8BAAAAAQAB//8AAAH/AAEBAAEAAAABAQAA/wAAAAAA/gEAAQAAAgEBAf8A/wAB/gAB/wEAAQABAAABAQEBAQAAAP8AAAL9/v7/AP8AAAEAAAD/AAAAAAABAgIBAQABAAMAAAEAAAEBAAAAAP7/AAAAAAACAQECBAMNDg1SVFAaGhkeGxkDAgEDAwIBAQICAgQCAgIDAgICAgMCAwEDAgICAwMCAwICAgICAQECAwICAgECAgIDAwICAQICAgMCAQABAAABAQACAQABAQEBAQIAA/8CAgIAAQICAQIAAAEDAAECAQEBAf8CAAEAAAABAQICAQICAQD/AQEAAQIAAAEAAgIBAAIBAAEAAQEAAAABAQEBAAEBAQAAAgEAAv8BAQAAAAABAgAAAAD/AgIAAAD///8AAAD/AQD/AAAGBwcLCwsAAgH29vfo6+j9//7///7///7///////7/Af/+/////f8A/v4AAAD9/wD+/v7//gD///7+/v39//7///7//v7/AAD//v/+///+/wD9///+AP//AAD/AAAAAP/+/wAA/wAAAP8A//////4AAQD/AAABAAAEBAT5+fkAAP8NDw7m6OgA/wECAAABAQABAAABAAADAgIBAQEAAQECAQECAf8AAf////4A//8BAAEAAP//AP5KSkpiYmICAgIAAAAAAAAAAQDk4+RwcXXx8PH//wEAAQEAAAAA/wAAAAAAAAABAQAAAAEBAQAAAQAAAP8BAf8B/gAA/wAA/wEAAAAA/gAAAP//AAAAAAAA/wD/AAH+//8AAP8AAf8BAQAAAAD//wABAAAAAAABAAAA/wEBAQAAAgAAAQL/AQEBAQABAQD/AAABAAAA//8BAP8AAAAAAP8AAQABAP//Af8BAAAA/wD///8AAQAA/wABAQEAAQD/AAAUExIeHh4AAAAAAAABAAD/AP/l6P4A/gD//wAA/wAAAQD/AP///gAB/wH+AP////8A/v4B/wAA/v8AAAD//gAA/gD+/gL//wH/AQAAAP8AAAD//gD//gAA/wH//v///wAB/wAAAP////8B/wAA/wAAAAAA/wAB//4A/gEB/gH//gEA/wEC/wEC/wEA/QAA/gAA/QEB/gEC/QEA/gAA/QAB/wEB/QL//QEB/gEA/wD//QD//gEA/wAA/wH//gL//QEA/gL9/f/+/QD+/f///gH+/////gD9/QD9AAD8/v/+/v/+/QD9/wH8/gD9///8/f/9/gD9/gD7/f/8/gD+/wD//f///v//AP/8/gD9/v/+/wL8/v/+/gD+/gD9/gD9/gD9/v/9///+/gH9/gH9/v3//gD9//7/AAH9///9/f/9/wD9/gD9/v///gD9/wD9/gD9/v/8/QD+/f/+/QD8/gD9/gH7/gD8AAH//QD8/wD8/gD+/gD+/f/8AAH8/QD9/v/9/wH+/v/9/gD8AP/9///8/P/9///8/v/8/v79/gD7/v/8///8/QD//v7//v7/AfoAAvkBAfz0+v5xoQFejgPW4QMA/wEAAAICAP9aNQaTWAcRCgMAAP8AAAAAAgEA/wH/AAMAAAT8/Qj9/gf/AQIAAAEAAAEAAAEA/wAAAAAA//4B//4A/v8AAP8B/wEA///+/wAAAf8AAAEB/gEAAAABAAD/AP8AAf8BAAAAAAEAAP8AAAEAAf8AAAAAAP//AP4AAf4B//wAAv8B+/wA+v0A//+32ADR6v8AAAACHSYCFBkAAAD///8AAf//AAEAAQD/AAABAgD//v//AP8AAQAAAQEBAgEAAAD/AP//AgABAP//AP8AAAH+/v//AP4AAP///wAAAf///f758ewBAP8BAAAAAAEAAAAqKyr/AQECAQEA/wAAAQL/AAD/AAEAAAEAAAEAAAAAAAH//wAAAQD/AP8AAAAAAAAAAAD//wAAAAAA/wAA/wD/AQAAAQABAQD+Af4AAAD/AAD/AAH//wEAAQH/AP8AAAABAAABAP//AAABAAAA/wABAAIAAAEBAAEAAAD///8B/wD/AP8A/wEAAAEAAQABAAABAAAAAQABAP8BAP8B/wD///8AAQD//wAA/wD///8A/wEAAAAB/wIAAAAAAAAAAP8BAAEBAAEA/wAA/wAA/wAA//8BAP//AAABAAAEAAABAAD/AAAAAAABAAABAAAAAAEC/wEDAQH/AP8BAQAB/wD+AP8AAAAAAP7+AgYDAQEATE5NJiYnGhYYBQIDAAAAAgEB/wAAAgIAAQMCAQAAAwICAAIBAgEBAgICAgIBAQACAwICAQEBAQEBAQEBAwEB/wEAAf8AAAEBAAABAgH/AAACAQEAAQAA/v8CAAEAAQAAAAAAAgECAQL///8AAgAA/wAAAf8BAAEA/wAAAAABAgAAAP8AAQIAAAAA/wAAAQEAAAAAAf8A/gAAAAAAAf8AAAEBAP///wABAQL///4CAQL//v/9AAEBAf8B/gD/AAD//v7++fn4/v//BQME/v7+3N3dOzj2CgsLAP//AgIAAAACAP8AAAAAAAH+/wADAf4AAAD//wAA////AP/+/v7//v79//7+AAAB/v/9/f7/AP//AAAA/wD/AAEBAAD/AP8AAAEAAP//AAEBAgEBAAAAAAIC//7+/v7/9Pbz9/f48vLzAwYHDAsL3+DgAQIB//8AAAABAgIA//8AAAAA/wAAAv7//wEAAQAB//8AAQEA/wAB////AAEBAf8A////Wltby8rKycnJ////AQAB/wL/vb7AkpOUfn17/wD/AAABAAD/AP8AAAD/AAAAAP8A/wAAAQEB/wAAAQAB/wH/AAEBAP/+AAABAQIAAP8AAAEAAAAAAP8AAAEAAQAB/wD+AP8BAQEBAP8AAAAA////AQEAAAACAP/+AAEBAP8AAAAAAgEA/v8AAQAAAQIB//7+AAIAAf8CAAH/AQAB//8AAQH/Af8C/wH/AQABAgAA////AAEBAAD/AAABAQAA/wABHBscAAAA/wD/AAAAAAAB0tn//PwAAwQB/wAAAQIBAP/+AAEBAAD/Af8BAQH//gAA/gD+AgAE/wAAAgEB//8AAQEAAP/+AAABAAABAAAA/wAB/wAAAf//AAAB//4AAQD/Af8BAP8A/wAAAP4BAQAAAP7/AAABAQAAAf8B//4A//8A//8AAP4AAf8AAP4BAP//AP0B//0AAf8BAP4B/wAAAP0AAP8A/v3+AP8BAf4C//////8BAP4A//////8B//7//wAA/v4BAP8AAP///v8A/////f8A//8B//4A/wAAAP8A/wD///8AAAAA/v8B/v//AAAB//8AAAH+AP8CAAAAAAD+/v4A/wH/AP4AAAH9AQEA//8A//4AAQABAQAA/wEAAP//AAAAAAAAAQEBAP//AQEB////AAEAAAAB//7/AAACAAD/AAH/Af4B/wD/AAABAQAA/v//AgAAAAEBAAAB/wAAAAAAAgIA/v4A/wD/AAAAAgAAAAAAAQD//wAAAP//AQH/AAD/AP///wH/Av8A////AgEA/gAAAwEA/v7/AQEAAf/9AAH8AgT9AgH9AQP+zOMBgacCu80C/wD/AAD9AAMEBwUBbUEDe0gFDwkCAAAA//8BAQECAP8BAP8A//8D/f8I/AEE/wAAAAEBAf///wAAAAH///8AAf8AAAEBAQEAAv///wABAAH+AP8AAAEAAAABAAAA/wL/Af8A//4AAQECAAAAAQH//wH/AP7/AAH+Af///wEAAgD//wAAAQH+/wH+AQD+AfT2//39+fv/ps///wABAAD/BCMqAAIB////AQL///0BAAH//wABAf/+/gABAgIAAAAAAAAB/wAAAQAAAQABAAH/AAD//gABAgAAAP8AAAD+AP8B/v//AQH+/wAB/ffz+e7m/wABAAAAAAD/AQEBLSwsAAAAAAD/AQIB//8AAAD+AAAAAAEBAP///wABAAEBAf////8AAAEBAAAAAAABAAD+AQAAAAABAQD///8BAAD/AAABAAAAAgAAAAEAAP8A/wEAAP8A/wAAAQAAAAABAAD//wABAQIA//8AAAIA///+AQAB/wH+//8BAQEAAAEAAP8AAAD/AP8AAQAAAAD//wAAAQAB//8AAQIA//8AAgEBAP8AAQEA/wAAAQAAAAEA/wAAAQH/AAAB/wAAAQAAAAAA/wH/AAAB/wAAAQAAAAAA/wAAAP8BAAH/BAAAAAAAAQAAAAAA/wAAAAEBAgABAgABAAD/AQEBAP///wABAQH///4A/gUFAwEBAjQ4NT9BPhMREQoJCf//AAMCAgAA/wIBAQADAgMAAQIBAgICAgICAQEBAgMDAgH/AQIDAQIAAQICAQABAQIBAgEAAQEB/wABAQEAAP8CAQEAAQABAQAAAAAB/wIAAQEAAAEA//8AAQAB/wAAAQABAAD/AQEB/wEAAf8AAQEB//8AAAL//wABAP8BAP//AAEBAP8AAAH/Af8BAAH/AAAA/wABAQAA/wAAAP8AAAEAAf8AAAD/AAIAA/4BAAD//gH///7/AP7//e/x8Pz9/AYKB/35/Nzc3Nrc2iknKvj//vz8/Pz9/Pr5+fv6+/n6+Pn5+vn5+Pr5+/v8+/3+/f79/P79/v39/gAA/wD/AAAA///+/gECAQABAgMBAQEAAf8CAQEAAQEB/wAAAQECAgMBAgEBAQACAQEBAfz+/vz8++vs6uvt7BodIAMGBeHk4/39/QYFBP3+/v8AAQECAf/+AAIBAAACAP4AAP4A/wAAAAEAAAD///8BAQD/AAAA/gABAA0ODHBxcW9vb+np6f///wD/AQAAAKKhpGJiYRoaGQEBAAABAQD//wEAAgD//wEAAQAA//8A/wEB//8AAAAAAAH///8AAQEBAf/+AAAC/wD/AQAA//8AAAIA/v8AAQEAAf8AAAD//gAAAQEAAAAAAAD/AP///wECAf///wEAAQAAAAD//wAAAAEBAf///gIBAv8A/wAAAAABAP8A///+AAAAAQEAAAEAAAAAAP8AAAABAAAA////AAH//wABAQAAACYoJQAAAAAAAQAAAQAAAOrtAAH+/wEA//7+/wD9AgADAAEAAf8BAAD/AP8AAAAB/wH/Af8CAQD+Af8BAQAAAP//AAD/AQEAAAAAAQD/AAEAAAEAAf8AAAD//wEAAAD/AQD/Af//AQH//wD/AP//AAD/AAD+AAAAAP/+AAH//wH/AQD9AAD/AQD+AAH/AP/9AAD+AAH/AAH+AQD////+AQD+AAD+AAD+Af/+AQH+/v/+AP///gAAAgD+Af/+AP8AAP/+Av////8AAf////7+AP8AAP//Af4AAP4A/wD/Af7+AAABAP8AAP7/AAD///4A/////gABAv7+AQEA//8AAf//AQD/AAEC//7//wD/AAAAAf///gEAAQEBAf4A/wH+AQABAAAA////AAEAAQABAAH9//8AAAAAAAEC/wAAAQAA/wD/AP8A/wAAAAEAAAD//gAA//8AAv4C/wD9AAEAAP8A/wABAP3+/wAAAAAAAf8A//4A/wH//wEBAP0BAAAAAQH+AAIAAP8AAP8AAAEA/wAAAQH//f8A//0AAAAB/wH//gEB/wUD/gEC+/D5/Z23BJSy/e7yAQAB/wAAAAABAwgGAYFPBHFCAwQBAgEAAAAAAQEBAAAAAQD/A/7/BP3/Bv0ABf7/AQAAAgEAAP8AAAAB/wD//wABAgAA//8AAQAA//4AAQH//wECAP8AAQEA/wAAAAAAAAH+Af8A/wACAAD//wEBAP8A/wD+/wAAAAIAAP8A/wAA//8AAQIB/gEB//4C/gD4+AD1+QD9AL7bArve/gAA/wAMFAEiJAEA/wACAAD9AAAB////AAEB/f//AQL/AP8AAAAAAAAB/wH/AP4BAQIB///+AQIAAP8A/wAAAf8A/gEAAv4AAQIAAAAAAf////nu5/zx6wAA/wEAAf8AABcVFCYnJgEAAAAAAv8A/wEA/wAAAQAAAP//AP8AAQEBAAD///8BAAEA////AAAAAf8B/wH/Af8BAQH///8BAgEB//8AAAAAAAIAAP8BAf//AAAB/wAAAf8BAAH//gABAAAAAP//AAEBAAD/AQAA//8AAAD/Af8BAAAAAQEAAAAA///+AAABAQAAAAAA/wAAAQAA/wEAAQAAAAAAAAD/AAABAAD/AAAA//8AAAABAAD/AAAAAQAAAAAAAQAAAAEAAQD/AAEBAP4AAQAAAAEAAAD/AAABAQAA/wAB/wEBAAQBAQD///8AAP8AAAABAgMAAgMAAQEBAAEBAv///wAAAP8BAAH+//8BAgEEBQYaGhdXWlcRERAQDQ8BAQACAQECAAAAAwMCAQEBAQECAgICAQEDAgIBAQIBAgACAQACAQECAQIAAgAAAQICAAEAAQEAAAABAQEBAgEAAAABAAEAAAABAAABAQEAAAEBAQAAAAEAAAABAQEA/wABAAABAQEAAf8AAAAAAAAAAAAAAAEBAAD/AAAAAQAAAAABAAD/Af8A/wEBAAAAAAEAAf7+AAEBAAD//wAAAP8CAQH+/wABAQAAAP///wAA//4AAP8AAAH8/fz7+/3i5OIBAAAFAwQDBwL4+vjQ0M7x8fD29fX9/fz+//79+/39/v7//v7//wD///////7///8A/gD+//4AAAD/AP8A/wD/AP8CAQEBAQEBAAIBAgECAQEBAQEBAAIAAgACAQEAAQICAAACAgIAAQH/AQECAgEA/wD4+fjS1tT1+fj8/v4GBQbV3tTR0dI0NDABAAEB/wD/AAABAQD/AAAAAQEB/wADAAD+///+/wABAQD///8AAAEBAAEAAP//AQErLi1bXFyRjo79AAAA//8AAAHd3d+RkJKKiocAAP8AAAEAAAD///8AAQEAAAAAAAAA/wD/AAH/AQABAQH///8AAAD///8AAQAAAAABAQD//wEBAf///wIAAAAAAP8AAQAA/wD/AAACAAD/AAEA/wABAf////8BAAEBAAEAAP//AAECAQD+AAAA/wEAAf8AAAAAAP8A/wAB/wEBAAD/AP8AAf8A/wAAAf8A/wH//wEAAP8BAQEAAf//AAAB/wAyMTMAAAEAAAAAAQAA///c3wHa3gEpJ/8BAQAAAAAA/wEAAAEAAf8B/gD/Av4A/wAAAAEA/wD/AQAA//8B/wIBAP8AAAIBAAD//wH/AP8B/gAAAAAB////AAAAAQEA/v8A/wAA//8AAAAA/wEB/QABAAD/AAEA/v8A/////gIB/wAA/wAB/QH//wAA/gAA/QEA/gAA/wD//v8B/QAA/////gAA/wAA/gAB/gD+/gAA/wAA/wEA/gD+AP/+/gD+/wEBAAH+/gD+////AAH//v/+AAD////+AAD/AAD+/f//AAD/AAH//wD////+AAEA/wL+AP///gEAAP/+/wABAAD/AP///wAA/gH//wABAAAAAgD+/gEBAf4A/wAAAAAC/gAAAQD/AQAA/wEAAP8AAQAB/wD//wAAAgAB/f//AAABAAAA/wD+AQEAAP8AAAABAQEB/wD/AAD//AABAf8AAP8BAAAA/wAA/wD/AgAA//7/AAABAAACAAH///8B/wD/Av0B/wH8AP4AAAAA////Av4B/gEAAf8AAQD///8AAP4CAP8HBPwBA/vI3gGGqQLF1f4AAQIAAgAA//8AAAEKBwKFUwNuQAMBAQEB/wAA/wEAAQEA/wD//wP+/wb9AQf+AQIAAAEBAAH//wAA/wAAAQD//wAAAAECAAH/AP8BAQAB/gEBAP//AQAB/wAB/wH/AQAAAP8AAQH///8BAAD//wABAAD/AP//AP8BAQAAAP//AP//Af8BAQABAf4AAf7/Af0A//3/8/b//f7x+ACPwv/2/P4AAAEDMDsDDQ4AAP4B/wEBAP8AAQD/AgAB/wEAAQD//wAAAf8CAAIB/wAAAQAAAP7+AAEBAQD/AAABAAH+//8AAQEA//4A/wL/AQEA//8AAAD46N8AAAAAAAH/AAEAAAE8PTwdGxwA/wD/AP4AAQH/AQIBAP///wABAAAAAQEAAP//AP8BAAEA/wAAAQEB/wD/AAEAAP8AAAD/AQAAAP8AAAAAAAEBAAD+AQEB//8AAAABAAH/AAACAP8AAQEA/wAAAAAAAQAAAAAAAP8AAAAB//8AAgH//wAA//8B/wEAAQH/AQAA/v8AAQEBAQH/AQAB/wH//wAAAf8AAgH///8AAAEA/wD/AgAB/wAAAAEAAAAAAP8B/wD/AQEAAP8BAP8AAQH/AAAB/gD/AP//AQEAAAEB/wD/AAEBAP/+AP8E//8AAAD/AAAAAAACAAECAQAB/wEBAf//AP8BAAD+AP8A//////7/CAkJBgcFVFpWGxoaDg0NBAQDAf8BAQMCAAEBAgABAQECAwECAgIBAwECAQIDAgIAAQEBAwECAQEBAQICAQAAAv8A/wIAAQEAAQABAQEBAP8AAQEBAAD/AQIBAAAAAAAAAf8BAAAAAAAAAAECAAD/AAH/AAACAf8BAAEA/wABAQAAAAEA//8AAAAAAQEAAAABAAD/AAEAAP8BAAH/AQEBAAD///8CAf///wD/AAEAAf8A//8AAf///wAB/wEAAP//AAEAAP8A/////v3+6u3q3uHfAf8AAgEBBgcGCQgJ7u7u/v79AgEDAgMCAQAA//7+/v/+/v3+/v7//v7+/v//AP7+///+/v////7///7+/gEAAf8A/wAAAQEBAQIAAQACAwICAAABAQEBAAEBAQEBAAEAAf8B/wIA//7+/f///v7++vz77fDv4+boDhAP9PX2BAQE+Pf3vb++NjU0/f/8/wICAAD/Af8AAAEB/wD+Af8AAQEB/wEAAwIC/v7+AgEA/wEA/wAAAP8BAP7/AAAAUlJSxMTEzMnJ/wAB/wD/AAD/mpqbRkZDREVF/wAAAgEBAAH//wAAAAAAAP8AAAABAQD/AP8A/wH/AgAA/wEBAP8AAAEAAP//AAH/AAAA//8BAQAAAAAAAAEBAf//AAABAQAA/wEBAP//AAABAAABAQEB///9AAABAP8BAQEA//8AAQAA/wH///8AAQEBAP8A/wEBAQL///4BAQABAP/+AAEBAf8A/wH/AAAAAQAAAAAAAP8BAAAAAAD/GRkYAAACAAD+AP//AAAA+v4A3eADKSf8AAEAAAABAf4AAAH+AP4BAAAAAP4AAQL/AQD//gEAAf8AAP8AAAEA//8CAQAAAAAB//8AAQEBAAABAP8A/wABAf/+//8AAf8A//8AAv8BAP8A//8AAAAB//8AAP8AAP8CAf8A////AP8AAP8BAP8BAf7/AP4BAf8AAP4AAP4AAf4B//8B//3/Af8B//3/AP8B//4BAP8A//7/AP8A/f4AAAAB//8A//8A/v/9/v8B/f4A/wAA//8B/v///v8A/wAA//8A/wAB/v7//gAA/v8A/gEAAP8A/gD//v4AAQD+/gAC/wABAAD/AP7//wAB/wD/AQAB/gAB//z/AQAAAAADAf/+AAEBAAD//wAAAf////8AAQACAf8B/wH/AAH/Av0B/wEBAf8B/wD/AAEA//7/AP////8AAQMAAf////8BAQEA//4AAAL/AP4AAQEBAAD/AP7/AAAAAAAA////AAAAAgABAP/+AP8B/wD+AQAAAv8A/wEA//0A/v/+/wEAAQD+///+AAH+BAL92ej+or4Es8b69fcAAAABAP8BAAIAAP4BFxEBjFUGXDYCAP8A/wADAAD/AAEB//8DAP8E/QAF/QAF/wAD/v8BAAABAAEAAAABAAD+AP8AAQAAAQAB/wD+/wEA//4AAgD/AQH/AQH/////AQD/AP8AAf8A/wD/AAEAAAABAQH/AP7//wAAAQABAAH/AAD//wAAAAD/AAD+AAD/AAH9AAL9APX4AfT4/wABo80BveP6AQABABIZBS4yAAH/AP8A/wH+AAIAAP4BAQEA//8AAQEBAAEBAf8A/gD/AgAAAP8AAQIAAP4A/wH/AP4BAQD+/wACAf//AAABAAH//gABAQD+AP7/+e3mAAAAAAEAAf8AAAD+Kioq/gAAAAAAAgAB//8AAAD/AAAAAAAA/wAAAP//AAD/Af8C/wH+AQEBAQAAAAEAAf///wAAAQD//wAAAQAA//8AAQEAAP8AAQH//v8AAQEBAAD/AAAAAAABAP8A/wEA/wD/AgABAP8A/wAAAQEAAAACAP/+//8BAQABAAAA/wD/AQABAAIC/wD/AP8AAQAAAAD/AAEBAQEBAAAAAAAAAP8A/wEAAQABAP8AAAAB/wD+AAABAQL/Af//Af8B/wIA//8AAQEAAQAA/wABAQAAAAD//wD/AQACAAABAAAABAAA/wAAAAAAAAABAQEBAv8BAQEBAP8AAAD/AAD/Af8A//8A/gcIBwMDBCwsKTM0MQkHBgsICgIAAQEDAQEBAgEBAQMBAQEBAQICAQIBAQIBAQECAQMCAQABAgEAAQEBAAEBAAEBAAEAAQECAgD/AAIBAf8A/wIBAgEAAP8AAQEAAAAAAAAAAgIBAP8AAAAAAP8AAAEAAgAAAAIAAP4BAQL/AAACAAAB/wAAAQEA/wAAAAAAAQD/AP//AAABAQABAAH/AAAAAAAAAAH/AAAB/wAAAf//AP8BAP8A/wH/AP4A/wEBAAAAAQEAAP8AAP3+/Pn7+tfa1/X09AECAgcDBQQHBQQEBfX39vj5+QIBAf7/AP///gD/AP7///7+/f7+/vr+/f39/v79/vz8+/39/f7//v7+/v8AAP/+//3+/f//AAAAAAEAAQAAAAECAgEBAAEBAP8AAf8AAP8A/wAAAP/+//7///7///8A/wAAAAUICAABBPf3+AMEAgYGBrKvsV9cXBoZGf79/v8CAP4A/wH//wEAAQAB//8AAQICAP//AAEBAQAAAP//AAH/AQAB/wACAf/+/xASEGVmZtjV1vLz8wACAQEAAfPy9YCBhTY1Ng4PDv4AAAEAAAEBAAH///8AAAAA//8AAP8AAAEAAP8AAAD///8AAAH/AQABAQEA/gAAAv8BAAH/AP8A/wAA/wABAQD/AAABAf///wAAAAEB/wAAAAAAAAEAAwEA//8BAf8A/wEAAAABAf8AAQEBAAD/AAAC/wH//wD/AAECAAAAAAEAAv8A//8AAf/+/wEBAAAAAQEA//8BAAIAAP8AACsrLDU2NszKyf8A/wAAAQEA/9feAkz/AQH+/wAB/wACAP/+AAECAAD/AP8B///+AAEC/wH+AP8AAgAAAAD/AAIAAP4AAAD/AgH+AAEC/wD+//8AAQEA////AAH/AQH/AAD+AP8B/wD/AQD/AAD+AAAAAAD9AAH/Af///gH/AQD//wD9AQH9AP7/AQL+Af/+AAH////+Af//AP/+/gH+Af//AAD+Af/+AP///wD+//7/Af79/gD/Af7/AP1cDvOhAAEAAElEQVT/////AwAA//3+///9AP0A//4AAP7//wD/Af0BAP7+Af8A/v7/AP7/AP3/AP4AAAD///7/AP8AAP4AAAAA////AP/+/wH/AP8B/wAAAv4BAP/+/gACAgL/AAAAAAAAAgD+AAAA/wEBAv///wEB//8A//8AAQL/AP//AQEBAQD//wAB/wD/AAABAAAAAP8AAAL/AP/9/wD/AgAAAAAAAAAB/gD7AQACAAH///8AAAEAAP8AAP8AAQIAAP7//wAA/gABAAH//gD/AP8B/wD///8B//79/v8A/gD/AP8C/gD//+Ht/K7F/rTH+/P0AAABAgD//QAAAQAAAAD+/yodAJhZBj0lAv//AAEAAQH//wABAwD/A/7+Bf7/BfwBBgAAAf//Av8AAAEAAAD/AAAA/wAAAf8A/wEBAAD+/wAAAAEA/wEAAAEA//7//wIAAQEB//8AAAAA////AAEBAQAAAAD//gAAAf8BAAAAAAEA/v//AAABAAEAAAABAAEB/wIA/gAB///9/AHw9P/9/8/mAYW/+v8AAAAA/wIvNwEHBgH//wABAAD/AQAB/wAB///+AAEA//8AAAD/AAAAAAEBAQAAAAEAAAAAAAABAAAAAQAB/wAAAAEA//8AAQEA/wD/AAAA/gABAP/9+vrv6AAAAQD/AP8AAAICAysqKwABAAEAAP///wAAAf8AAAABAAD/AAAAAAAA/wABAQD/AAEAAQABAAD//wAAAQACAAD/AQD//wEBAAD/AAABAP///wABAAH/AAAAAQEA//8AAQAA/gD/AP8BAAEBAAD/AAAAAP8BAQD//wAAAP8A/wEBAQIAAP8AAP//AAEAAf7/AAIA/gAAAQABAP8A/wAAAAD/AAAAAP8AAAEAAP8AAAEAAP///wABAQEAAAEBAf//AAD/AQD///8BAP//AAEAAP//AAAAAQH//wABAAABAAEAAQAA/wAAAAEBAAQAAP4AAAEAAAEBAQIAAAEBAAEA/wAB/wH///8BAQEA/v4BAwMHCQkKCgdKTkoIBwcMCQsDAwIBAQEBAAEBAQACAQABAgECAwMDAQACAwICAQICAQABAQEBAQADAQAAAQEBAAIAAf8BAAEAAAEBAQAAAgECAAABAAD/AAACAQIAAQAAAP8AAAH/AP8BAAEB//8AAgH//v8AAQH+AAABAAD/AAAA/wAAAAIBAP8AAQD//wEAAAAAAAABAQAAAP8AAAAAAAH/AP8BAAH/Af8BAAIAAP4A/wAAAAAAAAEAAQABAP///wAAAP/////8/f37/P3r7erZ2tn///4GBgUDAwQA/wL7/Pz8+/wAAAAA/wAAAAD9/v37/v39/Pz5+vr6+/v3+vv4+vr4+vn5+vn//v/+/////////wABAQD/AAECAf8AAgMBAAABAgICAQEDAQICAgEBAgECAQQDAwECAwIDAAIDAgICAwQDBAMEAwQCAQL9/v75+voHAQUKCgvi29m5urxiYF4AAgABAP8AAgL//wAB/wABAgEA/gAAAQAAAQAC/wD//wACAP8AAAD+/wAAAP8BAgD///83ODdNUFCnpKT//wABAQH+APzGx8iYmZp2dnQAAP8BAQH/AAAAAAH/AAAAAP8BAP8BAAIAAAAAAf8AAAAB/wAAAP8A/wD+AAEA//8BAQH/AAD/AQAB/wEA/wH/Av8BAP8BAAAA/wAAAQEAAf8A/wABAQD+AAAC//8AAQD+AAABAP4A/gEAAQH/AP8B/wD/AQABAAAAAAAAAP///wAAAQH//wACAQH/AAAAAf8AAAAA/wD/AAABAQALCwkkIyPLysgAAAAAAP8AAALg4gQA/vz/AgIBAQEA/wAAAAAAAAH/Af8A/wACAP/+/wD/AAAAAQABAAD//gD/AQEB/wD/AP4BAQH//wEA/wABAQEA/wAAAAH//wAA/wEBAP8A/QEA/wAAAAEA/wD//wACAAD///8A/gEB/gH//wACAAH//wEA/f7+/wIB/v///AEA/wH///8A/wH//gAA/wAA/gH//v////8A/wD+/f///gH//wL+/gD/AQH9//4A/v/+/wD9AAD+AAH9/f/+AAD9///+/wD9AAD+/wH9AP8A/v/+/gH9Af8A/wH9AAAAAAH+/v//AQAA/wAA/wEA/wAAAP//AQAA/gAAAQL+/v8CAQIA//8BAQAA/wD/AP8A//7/AAEBAP8AAAEBAf////4BAgIA//8BAAD+/wABAQAB/QAAAf8A/gH/Af8A/wEAAf8AAAAAAv8B/f8BAQAA/gD/AAAAAAD/AAABAf/+/wAAAAD+/wACAAEA////AgEA///+/gAAAAD9//4AAAAB/wH8//7d6f22y/y7y/zy9P4A/wAAAAAA/wAA/wEAAAAAAAAsHQOmYwMsGwQAAgAB/wEAAP8AAAEA/wL+/QX9AAf+AgMA/wL/AAEAAAAAAAAAAQH///8AAAABAQAA/wAAAAD/AgAA/wABAAABAQABAAAAAAIAAP///wEAAP8AAAEBAQH/AP8C///+AQEB//4AAQEAAP7+//8CAgH/AAABAf4BAf4AAf7+Av8A/v0A8PUA+Pzu9wF+vv3r+v8AAAEAGiMEKi4AAf7/AAIA//8BAAD//wD/AP8BAAAAAgEA/v4AAAIAAAD//wD+AAACAAAAAAEBAAEAAP8BAQD+/wEBAAACAAD/AAAAAAABAQD///768On88OsAAP8AAAAAAQEPDhEqKyoB/wAAAAAAAAEAAAAAAP8A/wABAAH/////AAEAAP8BAf//AAEB//8AAAABAP///wEAAP8AAgD+/wABAf8AAAAAAQEAAAAAAAABAf/+/wEBAf4A/wEAAQAB/wD/AAAAAAEAAP4CAAH+AAD//wABAf///gABAgEA/gABAAAA/wAAAgH///8AAAAAAAAAAQEB//8AAQD+AQAA//8AAAEAAAAAAQAB/wH/AAD/AP8B/wABAAAAAP7/AQEBAQAB/wEBAQAA/wD///8AAf8B/wEAAAD/AAEBAv8A/////wIEAAAAAAD/AAADAQECAAEBAAAAAP///wABAQEB/v/9AQEACg0MAQL/ODo0JSUkBgcHBwcHAQEBAgECAQEAAgIDAgEBAQMCAwEBAwIBAQEBAgICAQEBAwEDAAIAAP8AAgEBAgL///8BAAECAQEAAAEBAQAAAQABAQABAQEA/wEAAQEAAQAB////AQABAQEBAAABAP//AAABAQEBAf8A/wAAAQEB//8BAQL+AP4BAAD/AAEAAP///wEBAP8A/wEAAP8AAAAAAAAAAQAAAAEB//8AAf8B/wH/AQAAAAAA//8AAQAA/wAB/wH/AP7//v39+/v6ztHN7OvrAwMCAQIC/P7+///9//3//f38+/z9+fv6+/v8+/z7/Pz9/f79/P3+/v/9/P7+/P7+/f38/wAA/wIA//0A/wAAAAEB////AAH//wEBAP7/AAECAP/+/wAE/gD///4BAwIB/v/+Af4DAAEAAQH/AP7/AAP/Av79/gIC/v8D/v/+/f8B/P3+DQ4OAP8Br66sUlFPDQ0M/wAAAP7/AQEA/wEBAP4AAAAAAAEBAP8AAgEA/gAAAQEB///+Av8A/wAB//////8BAQH/XF1byMfI3t3c/v//AAABAP7+j5GTTlBOJyYn/wAA/wD/AAEAAf8AAAAAAAACAAAAAP//AAAAAAEAAQAA/wABAAH/Af8B/gIAAgD//wAAAf//AAEBAAD/AQAAAP8AAAAAAAIAAAD/AP8AAAEA/wD/Af8A/wEA/wABAf//AAAAAQIAAAAAAQABAQD/AAABAAAAAP/+AAEBAAEAAP//AAEA/wAAAAABAQABAP8AAQAA/wEA/v//Af8AJSYiAAAAAAAAAAAAAQAB3uX+AP3/AQIA//0BAAH/AQAC/v4AAQEBAQAAAP7/AQH/AAAA/gD//gABAwEBAP4BAAEAAf///gEAAP//AQEA//8AAP8AAP4BAQAAAP8B//7/Av8AAP8AAP//AAABAf8BAP0AAv8B//////8AAf4B//4AAP//AP8AAf7/Af8A//7/AP7/AQAB//7/AP4BAP7///7+AP8B//4A/v4A/v4A/v8C/v7///8A/f4AAP8B/P8A/v4A/f///gD+/f4B/f///f8A/gAB/P8B/f/+//8A//8A/v8A/v8A/gEAAP4A/gD//wAAAQD//////wAAAAAAAAAA////AAD/Af8AAP8A/QD+AAAAAP8AAAEAAAABAAAAAP//AAEBAP8A/wD+AQEBAf3//wAAAP8AAQEBAAD/AAD//wACAQAAAAAB/wAAAf0A/wH/Af4B/wABAAAAAAAAAAEAAAEA////AAD///8BAAD/////AAEA//////4A/wD/AP8A/wH//v8B9/n90+H/wM75xtT69fb+AAABAP8AAAH/AP8AAAH/AP//AAAAOyUBnF8DKBgEAAD/AP8BAAEAAP8DAP8D/f4E/QAH/gED//8BAAEBAAAAAAAAAf4A/wD+AAABAQD///8BAAAAAP//AAAAAf8AAAD//wABAQEAAAD//wAAAAAA/wAAAgAB/wAAAf8A/gABAQD+AAEBAQAA/wAAAQH+/wACAQD+AQH/AAD+AP/+Af7+APf5/vP59/oBdrb9t97+AAAAAAMHAT1DAQgG//8BAf//AAAAAQEAAP7/AQEAAAEB/wEAAQEC/wEAAP8AAAD/Af8B/wAAAf8A/wD+AQAB/wD/AAEBAP///wAAAP8AAAEB/wD/AgH/+OfgAP78AAAAAAEAAAAAKisoKywsAAD/AAEAAP8AAAAAAAABAAEA//8AAAABAAEAAf8CAAEAAAD/AAABAP8A/wEAAP//AQEB/wD/AgABAAEB//8AAf8B/wH/AAEAAf4BAAEAAAABAQAAAAAA/wD/AQAB/wAA/wAB/wD/AAH/AgEB//4BAAH/AP8AAAEA////AAABAf//AAABAP8A/wEAAf8B/wEAAv4BAQD+AQABAP//AAEAAP8BAAAAAP8AAAEAAAEAAf8B/v8CAQIA////AAAAAP8AAAABAQEA//8B/wH/AQABAAD+AAABAAABAQEABAAAAQAAAAABAQACAQEBAP8A/wAAAAD////+/wAAAAcLCgICARQUEj0+PQoLCwoGCQICAwIBAQABAQIBAQICAgECAAICAQIBAgECAQICAgEBAQICAgAAAAIBAQAB/wEBAAD/AgECAAD/AAEBAQEAAf8BAAEAAAAAAQAC/wIAAgAAAAD//wEAAAABAQAAAAABAQAAAAIBAP8AAAABAAEA/wD/AQEC/wD+AAACAP//AQAAAQAAAAD//wAAAAEAAf8BAAEAAAEBAf7////+//8AAP8BAAD/AQABAf/+/QABAQAAAP8A///9APz9/f8A/9/j3tbW1v3+/gEBAvz+/fv8/f37/fn6+vv7+/z9/v7+/v7///7+/gAA/wAAAAEBAAAAAQICAQL/AP0BAgEB/v/+/wACAQH/AAD///8A/wABAgD/AAAAAAAA/wAAAQAA/v//Av8B/gH+AQMDAv3//QH+AP0CAQAAAQD9/QEBBQD9/gMD/v38/QEAAPwCAQkMCwECBNXS0ru8vFFRUf//AAEB//8AAQEA//8BAQP/AP4A/gIBAv//AAEBAQEA//4AAv8A/QH/AQAAAAEBAP//AB4fHmhpZ316fPn5+P8BAQD/Aero6ZSSlpWVkf//AAEAAP8AAAEAAP8AAAEB/wD/AAABAAD/AAD/AQAAAAAA/wD+AP8A/wIBAP//AP8BAQH//wAAAAAAAAH/Af8A/wAA/wAAAQAAAAAAAAD///8AAQAA/wL/AQEA/wAAAP4AAQL/AP8B/wD/Af8BAAAA/wD/AAEBAf//AAD/AP8BAAH/AAECAf3/AAL/AAAB/wD+AAABAQEAAAEBAC4tLQAA/wAAAQAAAf8A/9DZ/ejpARgbAQH///8AAf8BAAD+AP8AAAEBAf8B/wD+AAABAAEAAgL/AP8BAAEB////AQD/AQEAAQD/AAEA/wH+AP8AAf8A/wH+Af8A/wEAAgD//wD/AAH/AP/+AQH+AP//AQD/AAD9AQH+AAD+AAH/Af79AAH9AgD////+Af/+AQH+AAD+Af/9AAD/AAD+Af/+AP7////+Af7/Af/+///+////Af3+AP4AAf7//v3+Af4A//z+APz+AfwAAP3/Af3+AP//AP4A/vz/AAD/AP3/AP7/AP8BAv7+AP7/AP///wAAAAABAAD/AP8BAQAAAAD/AP3+/wECAgIA/gIAAP7/////AQECAQD+AAEA//8AAAEAAP//AQAA/wEAAv7/AAD+/wABAQACAAH+AAABAQD/AP8B/wH/AP8AAQEAAP4A/gEAAQAA/wH///8AAQAAAAAA//8AAAAAAP8AAQEC///+//4A///+/////wABAAD/Af4A/+Lt/cnT+8XT+93h+/3//gAAAAAAAAAA/wABAAD/AAAAAAD//wAAAEIqAaBhBB0QAwAAAAABAgD//wABAgD/Af7+BP3/Cv4AA///AQABAgAAAQAA/wAA/wECAf//AAD///8CAAEAAP/+AAEBAAABAP8AAAEAAQAAAP7/AAIA//8A/wEAAAEBAQAAAAAA//8BAAAA/wAAAQAA//8AAAAAAAEBA/8B/AD//////gEB/gAA/v/6+wHx9gH7/pbJAqHW/AAAAP8AAgI3PAIcH/8A/wAC/wD/AQH/AAD//wACAf4A/wEB/wH/AQAB/wD/AQEAAAIAAAAC/wD/AQAB/wD//wAAAP/+AAECAP//AAEAAP8AAAEA/wEAAf7/Avjq4wAAAAAAAAD/AAABATExMP8AAAAAAQIA/wAAAP8BAAD/AAD///8BAgEA/gH/Af8B/QEBAQD/AAABAAD/AQAAAAABAf8AAAH/Af8AAAD+/wECAgD/AAD/AP//AAABAAAAAAEAAQAA/wAAAQEAAP8AAAD//gAAAAAAAgAA//4AAAAA/wEAAP///wABAQEBAf8AAAH/AQAB//8BAAH/AAAA////AP4B/gAAAQAAAP8AAAIBAf//AP8A/wAAAAABAf////8AAP8B/wD+AAABAAD/AAAAAP8A/wAB/wABAQEAAf8AAQEAAf///wAAAAD+/wQAAAAAAAIAAgIAAAEA//8AAAABAAD/AP8A//4GCgkGCAf//v44NzQhISIIBQgHBwYBAgEBAQICAQEBAQICAQABAQICAQEBAwEBAQECAQEBAAEBAAEBAQAAAP8BAQEAAQL/AQADAAL/AQABAAABAgAB/wABAQH/AAAA/wIAAgAB////AQABAAEA/wABAQH/Af8CAAD/AAEA//8BAgD//gEAAQAAAAAAAgIBAP///wEBAQD/AQABAQEBAAD+//8CAAD/AP////8B/wEAAgEAAP8A/QIA//////4BAQD+//4AAQAA/v////3/Af/z8/PIysnz8/MAAP/8+/z5+/z7+vv7/P39/f3///8AAQAAAgIC/v3/AgH//gABAgABAAIC/v///wEBAgIE/v/8AQIAAQAA//3+AAEAAP4AAQICAAAAAQEAAP8CAgEAAAAAAAD/Af8CAQIA///+/v0BAQH+AP8C/gAAA/8A///+/vwCAgX8/P4AAfwB/f8BAQEICwkPFBLw6umsrK1LS0sGBQYA//8AAAD/AAEAAP7+AQIA/gH/AP7/AgD//wAAAAABAf8DAAP/Av/+/QEDAf//AAH/AABISkmzsrTDwsEAAAAAAAH//wCqqqxjYmAxMjEAAQEBAP//AAABAAEA/wAAAP8A/wEBAAD/AQD+/gABAQAAAQEBAQAAAAD/Af8B//4AAQIAAAAAAP8AAP//AQAB/wEAAAAA/wAAAf8AAAECAAAA/wEAAAD/AAAAAP8BAQH//wAA/wAA////Af8BAAIAAP//AAABAAD+AQAAAAD/AQD//wACAP8AAQEA/wEAAf8A/wABAQH///8xMDAMDg/08vIAAAD/AP/o7QDS2QEYGwH///4BAAL+AAAB////AQAA//8AAAACAP79//8AAv7/AQEB/wIA/wEB/wD/AQEB/wAAAAAA/gH/AAAA/gAB/wD//wAB/gAAAAD/AQAA/gAA/gEA/gEA/gAB/wAA/gABAAD//wEA/////v8B/wEB/gD//wD//f8B/wAA/wD//gAA/wD//gD//wD+/wD//QL+//7+/v///wH+/v/9///9/wD9/wH9/v/9AAD8/f/+AAH8///9/wD8/wH/AAD9AP/8/wD//gD/AAH8/wD9/wD//gAAAP/+/wD/AAAAAAD//gH/AAABAQH///8AAQAAAQEA/v8AAQIAAP///wAA/wAC/f/+AQABAQAA/gAAAQAAAP//AAEB//8BAQH+AAEB/////AAAAQABAAAAAf8A/wEB/wD+Af4A/wEAAQH//v4CAQH//wABAAAAAf/+AP8BAAH//wAAAQAA/P8CAAH8/wD/AAD//wDu9QHP3PzO2vjP2Pfz8v0AAAAAAAAAAAAA/wAAAQEAAAAA/gAAAP8AAQAA//41IwKiYgUbEAMAAAEAAAAA/wAAAQEA/QP+/gf9/wX+AQL+AAEBAAL/AP/+Af8B/wACAP//AAEBAAEAAf///gABAv8AAAAAAQAB/wD/AAD/AAAA//8AAAAAAAAA//4AAQIA//8AAv8A/wAB/wD/Af8AAAAA//8AAQAAAQEAAPwCAP4BA/0A//8BAQD//f4C8/f9+/zC3gGLw/3+AAAAAAEBHyYBNT0BAv8A/gAB/gAAAf4AAAEAAQEB/gAAAAAAAQD+AAACAAACAP4AAAH+AAECAAEAAAAA/wAAAAH//wABAgD///8AAQD//wAAAgD///8AAP/9+PX66eEAAAAAAAAAAAEA//48PTsBAQD///7/AAEA/wABAAABAAD/AAEA/wAAAAEAAf8AAAIA//8B/wD//wEBAQAA/wAAAQAAAAD/AAAB/wD/AQH///4AAQEBAAAAAAD/AAACAAD+AP8BAQD/AP4AAQABAAAAAQD/AAEBAP8AAAH/AAAAAQEAAAAAAQAAAAD//wAAAQD/AP8BAQEB///+Af8BAAEBAP//AAECAAD/AP8AAQD//wAAAP8BAAEAAf8A//8AAAD/AP8C/wH/AQAA/wABAQAAAAAB//8A/wH/AQD//wABAf8AAP8BAAL/AP8BAQACAAABAAECAQIBAP8A/gAA//8A///+AP7/AgcGBwgI///+HBwZOTo4CwoLCAkIAwECAgACAgECAQECAwIBAQICAgIBAgMBAgACAQECAQEBAAMCAAEBAQECAQECAgABAgEBAgECAAH+AgIBAAEAAP8BAAIBAAABAQEBAgD/Af//AAEAAQEBAQEBAQIA/wEAAf8B/wABAAD/AAABAP4AAgIBAP8AAgEAAQD/AP8BAQL/AAEBAQEBAQAA/gD/AQEC/gABAAACAgACAQABAQAAAP8AAQH/AAEA/wEAAQEBAP8B//4A/v3//v7+AP7/0NXR3+De/P39+vv89/j6+fn7/P3/AP8BAAABAAECAQEBAQEAAAECAQEAAQICAAACAQABAAEAAAIBAAABAQEBAQEBAQECAQACAgEAAQIEAgEBAQABAQAAAAABAP8AAf8AAAAB/wAAAQD//gH+AAD/AAEA//7/AAAA/f/9/v/+/////fz9/v78/v7+/////f79AAD/FhsZAAADy8fFvb29AAD//v/////+///+AAAA//7//wEAAAEAAP4BAgABAAD/AQAAAAH///8BAAEA/wEA/wEAAP//AgIDTU9OBAQFAP//AP8BAAAA7e3slJWXAAAAAAD/AP8AAv8AAP/+AAH/AAAAAAH//wH+AAD/AAH/AAABAQEAAP8AAAD/Av8BAQEC////AP//AAAA/wD/AQAA/wAAAAAAAAAAAP8BAAAA//8A/wEA/wABAQABAAEBAAAAAAEAAAAAAAD/AQABAP//AP8BAP8A/wAAAf8AAQABAAAAAQD/AAAAAP//AQAAAAABAQH//wAAAAH/ISAgLSssAAAAAAAAAAAAAgAA0dkBAAD+Af4CAP8AAf4AAAABAQABAP8AAf7//v7/AAD+Af8AAP4AAP8AAP8AAP8AAP//AP8A//4A//4AAP4BAf8AAf8AAv8AAAAAAQD/AP4BAP4C//8AAf////8A//4BAP0B//4AAf8AAP4BAP4AAf3//v/+AP7/Av4B/v0A//4B//7/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AAAAAAAAAAEA/wAB//8C/wEBAQABAAEBAAD/AQD/AgAAAQH/AAH/AQD/AAD//wD/AP8AAAAA//7/AAABAgH/AQAA/wEAAAEA//8AAQAA//8AAAAA/wD//wD/AQD///7/AP8AAP8BAAH09PPh4+L6+vsAAAD//wD//wH//wD/AAAAAAD/AAD/AP8AAQD/AP8AAQAAAAD///8A/v/+AAD//wD//wD//wAB/wD+/gAAAgD//wABAQD/AAAAAQAAAAEBAAAB////AQABAf//AQAAAAD/AAEBAAL/AAAA//8AAf8AAP8A/wAAAP//AP//AAH/AAD//v//AP8CAP//AAEA////AAD//v8AAP7+/wD+/////v7////+/wD//gD////+///+/v7//v7//////gD9/v4UFxgCAwK1sLDZ2NkBAQAAAP8AAP8AAP8A/wEA//8A/v8A/wD/AAD///7+/f7/AAD/AAD/AP////8CAf8oKSoAAgMAAAAAAQEAAADW1tfCwcMBAP4AAQEAAAEA/wAAAAABAgEAAAD/AQAA/wAAAAH+/wAA/wAAAf8AAP8A//4AAAD/AAEA/wABAP8BAAAAAf8AAAEAAAAAAAAAAP//Af8AAAEBAAAA//8AAP8A/wD/AAD/AQAAAQAA//8AAAAAAAAAAQABAAAAAP/+AP8AAAD/AQABAAAAAQEBAAD/AAAA/wAAAf8AAQEA/wBlY2IKCgoAAP8A/wAA/wD/AACuvAH8+v///gEA/QAA/wD//wAA/wAA/v8A/wAA/v0A/P0B//////8A/wAB/v8B/gH//QAAAAAA/gAA/gEA/v7//v///gAA/v8A////AP8A/v8A/////wABAQG60vmHru8A/wAAAAAAAAAAAP8AAAEPEROen51YWFUCAQIAAAH///8AAAAAAQABAAAB/wEAAQH///8A//8AAQD//wH//wAAAQH///8AAP8BAAAA/wAAAQAAAP8AAQAA/v8AAf8B/wAAAf8AAf///wACAQH+AAABAQAAAAAA/wEBAAEA//8BAAEB/wEAAAAAAAAAAAH+///+AAEAAAAAAAECAgIAAQAA/wD//wAAAADn8/MBAAH//wAAAAEBAP//AP8A/wAA/wAAAAABAAD/AAABAQABAP8C/wD//wAAAQEKBgj9AQL/AAH+Af7A4N19sK3x8/MA/wERDQWWYAE7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//8B/wAA/wAAAAD//wD///4A/v8AAAD//wAAAAD+/wAA/wD/AP8AAP8A/wD//wAA//8AAQD//wD//////wAAAAEAAP7/AAAAAP8A/wD//wAAAAD///7///7+///////+/wD/AAD/AAD/////////////AP7///7/AP4A//0B/v8AAP/////+//7//f7///8A/gD+/f7+/wD+//3+AwgGCAwNAQEAxsXD/gEAAQD/AQEAAQD/AP//AQAAAQEA//7/Af8AAP/+//8A//7///7+////AAABAgEBHBwdAAEBAAD/AAD/AAD/5ubnz87QAP8A/wAA//8AAAAB//8AAgAA/wABAAEBAAAAAQEAAQH/AP8BAAD/AAABAQAA/wD/AP//Af//AAEAAQEBAAACAQEAAQAAAP4AAf8AAP8AAP8BAAAAAAAAAAAA/wEBAAAAAAAAAQD//wH/AAEAAAEB//8AAAEAAQD//wABAP8BAAEAAAEAAAAA/wAA/wAAAAAAAAAAAAAAAAL/EA8ObGpoAQEBAAD/AP7/AP8A+foAiKP/9/f+Af7//wAB//7/AP8AAP4CAP//AAEAAP//AP7+///+Af7+AP3/////AP4A//7/AP7/AP//AP//AAAA/wAA///+Af//AAAAAQAAscz33OX+AAACAAD/AAAAAAACLS8ydXFvAAAAAQD/AAAAAP8BAQEBAAEAAAABAAABAAEB//8AAgAA//8AAAABAAAAAAAA//8AAP///wABAAECAAEAAAABAAABAf8AAQEAAAEAAAABAAEAAQABAQAAAAEAAQD//wD/AgABAQAA/wAA/wEB/v//AP8BAP8B/gD/AAD/AAEB/////gD/AP8AAQEAAAEA////AAAAAAAB/wEAAAAAAQABAP3+AP/+AP8AAgAAAP8AAAEBAAAAAQD/AQH/AQIAAP///wH/+v794vDuAP8AExAQhLOyudbP/wD/AAEAVjwGk172Cgn+AAAB//7+//oJ/fcQ//sJ/v4D/gD/AAABAP8BAQAAAQD+AAAAAP8BAAABAAD/AAH//wD//gD////+AQD8AwD5BAL0AgT0/wH7AQD8AAD/AP8B//4BAP8B//4AAPz/y9r+aJ76TJf2p9D29fv9/gID/jMo/WdL/2JEACQVAAH8AAEAAAD/AAECAAD/AAD/AAAAAAIAAAH/AAH/AAH9/wD+/wL+AAD/AAD/AAEAAAD+AAD/AAH//wL/AAD/AAD+AAD/AAD/AAAA/wD+/wL+/wH+AQAAAAD+AAH+/wH+/v//AAEBAAAAAQABAQEAAAD//wD/AAD+/wD+/wEA////AAAAAQAAAQAA/wEB/NXRAPHsAAAAAAAAAAAAHRwcZGVhAAEBAP8AAAAAAP//AAAAAQAAAAAAAAAAAAAAAAAAAAAA/wD/AAD//gAAAAAB//8BAAEAAQAAAP//AAAAAf8B//8A//4AAQEAAAD/AQABAQH//gAAAAAAAAABAQEAAQEAAP8BAQD/AQD/AP8AAP8AAQABAP8AAAH/AAABAP8BAP8AAP8AAAD/Af8A/wAAAAAB/wAAAP8A/wAAAQD/AQH/AAD/AAEBAAD/AAEAAAABAQEAAAAAAAEBAgAA/wEAAAABAAAAAP8AAf4B//8A/wD/AAEAAAH//wD/AQAA/////wAA////AAD/AAD/AAIA/wD/AP8BAAEAAAH/AQH/ABaE6XsCAQEC/P3+QkJADg4O//7/7OzqAAEAAgEBAAD//gH/AQEBAQD/AQAAAQD/AQEA/v///wAB/wEA/wAAAf8AAP8BAAAB/gH/AAAAAAABAQAB//8AAAD///8BAQEA/v/+/wIAAAAA/wAB/wH/////AQH+AAEA/wD//wIA//8AAAAA////AP///wD/AQEA//8BAAEBAQAA/gH///8AAAD/AQEA/wAA/wABAP//AAEBAAAB////AAAA//////8AAQAAAAAA////AP//AAEAAQH+Af//4ePh9Pb0////AQAA/wD//wD/AAAAAAAAAAAAAAAB/wEAAAAAAQAA/v//AP/+AAAAAP8AAAAAAf//AAAB//8BAP8A/wEAAP8AAAEAAAABAAABAAAAAP8A/wAA//8AAP7///7///7+/v/+AP8A//8BAAAAAP8BAQECAAD//wD/AAAB/wD+//8A/wAA/wEAAP8AAQAAAP8A//8A////AAAAAP///v////////8A/v///gD///8A/////gAA/v/+//7//v/+/f7+///+//3+/wD/AP3/Cg8OAAEC3t7d5uXkAgICAAAAAAABAQMBAAABAAABAQEBAAEA/wEAAAAA/wAA//////8A/wH+///+JSUlAQABAAABAAABAAAAAP//1tXW/wABAQAAAgEAAP//Af8A/v8AAgEA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AAAAAQAAAQEAAAABAQH/AQD//wACAAD/AP8A/wD/AP8AAf8A/wD//wAA/gEA/wADAP8AAAABAAEBAP//AADx8fDj4+P8/f///wD//v8B/gABAAD/AP8A//8A/wECAQEAAP///wD///7//gD//wAA/gH///8BAAL/////AAEAAAH//wAAAP//AQD+AP8AAAAA/wH//wD//wAA/wAAAP7/AP0BAQAAAP///v//AAD///8A/v7//wAA/////v8AAf/+/v8A//8AAAEA/wD///8A/v8A/wD///8A/gD//wD/AP8A/wAA/wAA/wAA/gH//v//Af/+/QAA//////7+AAD+AP7+/wD//v/+AP///gD+//////4BAP///fz+/f0CAgEDAwMBAgIBAQIBAAEAAAD///4AAP8BAgH/Af8AAAAAAP//AP///v8AAAD//v8VFRIdHB4AAAAAAAEAAP/////a29wAAAIA/wAAAAABAP8BAAABAQABAAD+/wD//wABAQEBAAAB/wAAAAEA/wD//v4AAAEAAf8BAAAA/gD/AQEA/wAAAAEAAQAB/wAAAQD//wEAAAH//wAAAAAB/wH/AQEBAAEAAAAAAAABAQECAAEA/wAAAQH///8BAAAAAP8AAQEA////AQABAQEAAAD/AQD+AP8BAQD///8BAP8BAf/+/wBHRUVSU1QAAAH///8B//8AAP7D0PyRrP8B/wAA/wEA/v8AAP8A/v///wAA//8A//7///0A//0A/gAB/v8A//4AAP8B/wD////+//8AAAAA/f8B/wAA/wAAAP/I2fv0+f8AAAEAAP8AAAAAAP9fXloLCQgAAAD/AAH/AAAAAAAA/wD/AAEAAAEA/wD/AP8AAAABAQEA/wAAAQECAAH+AAL/AAEA/wEAAf///wEBAAH////+/wAAAAABAQD+AP8A/wD/Af8BAAAAAAD//wABAP8A//8AAP8A/wAAAP8AAAABAQIAAP8AAAAA/wEAAP//AAEB/wD///4A////AAD/AAD/AP/i4uL/AAAA/gEAAAAA/wASCAwBAAACAAD//wD/AP4AAgABAQEA/wAA//8AAAAAAAEB/wH+/gDA3tsAAQH09PTx9PIAAAAiGgSdbgAjFvgAAP8AAAAA9wn99RL//gYBAAEBAQEAAAD/AAIA/wEA/wH/Af//Af8BAAAB/wEAAP8BAf4C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Av7//wAAAgEAAAEAAP//AAAB/wAAAAEAAQD/AAEBAP4AAAAA/gIBAf8AAAD+AP4B/wL/AQAAAP8BAAD/AAAAAAH/AAABAQAAAAD///8AAAEAAAH/AP8AAAEA/wEAAAD//wABAAD//wAAAQEA/wAAAAAAAQEA//8AAP4AAQEAAAAAAQEB/wAAAAAAAAAAAQAAAAABAP8A/wD//wD/AgAB//8AAAEAAQD/AAAAAAH/AAABAP8B/wAAAQEAAQAA/wEAAAD///8B////AQEA/wAAAQD/AAEA/wAAAgAB/gABAf//AAH//wABAv8B/gEA//39/hgZGS4uLf/+/9PT0/8AAQD/Av8BAP8B/wABAQD//wD//gD/AAEAAAAA//4A/v//AAABAAEAAP8AAP8CAP8BAAABAP7/AAD/AP//AAD//wAA/v//Af8B/wD/AP8A/wH/AAAA/wABAP4A/gAAAP///wAAAAABAgD/AP///wD//wAAAP8BAP8A/wH/AAAAAf8AAP7//wH/AP8BAP//Af8A//4BAP7+AAEA/wAA/wABAP//AAEAAAEAAAAA/wACAP//AQAAAfLy8vj6+//+/wAB/wEAAf///wAA//8A//8B/wEBAf8A/wD/AAD/AAEAAAABAP8A/v8A//8AAP///wAAAAABAAAAAP8A/wAAAP//AP7/AAAA//4A/wD/AP/////+AP7+AP7//gD/AP7+AAD+AP8AAP//AAD+/v////7//wAAAP7/AP///wAA////AP8AAAH/AP8A////AAAAAAAAAAAAAAH//wD/AAAA/wAAAAD/Af3+///9//8AAAAAAf7+//8BAP7+/gD+///+//39/gD/AP8A/gEAAfb19QD/ACQlJB4dGwQCAgcFBcrHyIuLin16e8HBwf////8AAQD/AAH///8BAQAAAP////8BAP///wAAAhQUFgABAAAAAQAAAAAB/+vr69vb3AABAP4AAAEB/wAA/wD/AP8AAP8AAP8A/wEA//8B/wABAP8A/wIBAP//Af8BAAABAgABAAEBAf8AAQAAAAAAAQD/AQEAAP////8BAP8BAAEA/wEA/wABAAAAAP8A/wAA//4A/////wEAAAD/AAAAAAAAAAH+/wD/AP///wABAAABAAEAAAAAAP//Af8BAQABAAEAAQAB/wH/AQEA/wAA/xwbGl9gXQAAAQAA/wAB/wAA/+/z/YCf/PX3/QL+/////wAAAAD//wD+/wH/AAEAAAH//wD+/gD9/gH+/wH//wAA/gAA/wD/AAAB/wAB//7//gD+AP/+/tbk+gAA/wAA/wAAAAAA/jk4OBsZGf//////AQEAAQAAAf8BAQAAAAD///8B/wAA/gAA/wABAQEBAAH/AQD/AP4BAAAAAQAAAAAAAAD/AAAAAf8BAQAAAQEA/wAAAAD/AP8A/wH///8B/wABAAABAAD/AQABAP//AAABAQD//wD//wAA/wAAAf8A/wD/AP8AAAD/AAAAAP8AAAAB//4AAAAAAQD/APz8/NPT0wD/AAD/AAEBAQMCAxkODgEBAQD/AAABAQD/AP//AQAAAAD///8BAQAAAAH/AfT6+5vIw/j7+AD/AAAA/xsVBphpATMi+AAA/wD+AAD2Cv31EP7+BAD/AQABAf8BAf8B/wAA/gAB/wAB//8A/wEAAAAA/gIB/QQD+QUE9wMB9AIA9wEA+/8A/f/+/QAA///+AQH+AOPrAISwAUaN/IG2/OX1AgIA/wEFBf48KwByTQFiPwAkFgADAAAAAAAA/wD//gD//wACAAABAAH//wAA/wAA/wD//wAB/gAA/wEB/wAAAAABAAAAAAABAQABAAACAAABAAABAAAAAQABAAAB/wABAAACAAAAAAAA//8AAAABAP8AAAAB//8B/wABAAEAAAD/AQAA/////wAAAP///wABAP8BAAAC/wAB/wABAAD//wAAAAEBAAECAAAA/gABAAEB/wDw7//a1gAAAAAAAAAAAgAA/15cWyEjIv8A/wAAAAAB/wAAAAAA/wABAAAAAAD/AAIAAAABAAECAP//AAD+AAAAAQABAQEBAAD/Af//AgAAAAACAf8AAAH//wD//wD+AQEBAAH/AAEAAAEB/wAA/wEAAAAAAQAAAP8AAf//AAAB/wAAAP8AAQABAf//AAD/AQAAAQEAAAEAAAEAAQABAAAAAQIBAAAA/wEBAQEB/wAA//8AAP8A/gD//wAAAQAAAAEAAP//AP8AAAEAAgIAAQAA/wEBAAAAAAAAAP//AAD/Af8AAAEBAAABAAAAAAAA/wAAAAAAAf8AAAAAAP8A/wH/AP8AAQH/AQH/Af//AQAAAAABAQAAAgEAAAL//v///v7/AAEA//80MjEAAADHxsff4N//AQAAAAAAAAEC//8AAAEAAQL/AQAA/wD//wAA/wEA/wD////+/wAAAAAA/v8B/wD//v0BAf8AAf8AAQD/AP///wD/AP8A/v8AAAD/AAAAAAAA/wD///8A/gD+//8AAAH/AAD/////AAABAQD/AAAA//8A/gAA/wD+/////gAAAAABAAH/AQAA/gAA//4AAAAB/wD/Af///wEAAAAA/wAB/wD/AP///wAAAAH//gABAAD//wDx8vL6+vsAAP8AAAD+////AAAAAP//AAH/AAAA//8AAQH/AAAB//////8A/v//AAEA//8B/wD////+/v7+//7/////AP///////wABAAD//wAA/wD9//7//////gD//v///wH//////v7/Af/+/v7///7/AAAA/v////8A//8C//8A/gD+/gAA//8A//7///8A/wAAAP///gD///////7+AP//AQD+/gD//gAAAP4BAAD+AP8A/wH+//7//wD//v7//v7/AP/+//4A//7//f8A///7+vr38vMAAP80MzMFBQUAAAAAAP9bWlgxLzDLysqCgH92c3Kzsa/w7u3/AAH//wD+AP///wAA/wABAAAAAQAZGRgAAAEAAAAAAAAA/wD/AP7k5uQBAAEBAAH/AAAAAAAAAQD//wAAAAAAAAAAAP8B/wD+AAAB/wAAAQEBAAAC/wAA/wAB/wAA//8A//8A/wAAAP8AAf8AAAACAAAAAAD/AAAAAAABAAABAAAAAQABAAAAAP8AAQAAAQAAAQH/AAAAAAD//wABAgABAQABAQAAAQAA////AQD//wAAAf8C//4AAAAAAf8B/wAAAP8A/wD/AAH+//9hYl8pKioAAP8A/wEA/wAAAAC2x/metfz+/gD+/gD//gAB/wAA/wEA//8A/v8AAP4AAP8AAP4A//0A//7//v8A/wAAAP8A/wAA/v8BAAAAAf/6+/7h6/4AAAEAAAAAAP8AAAAsLiv/AP8BAQEBAQD/AP8AAAAB/wAAAAAAAQAA/wABAAAAAAEAAP//AAABAQD/AAAB//8BAAAB/wD/AAAAAP8AAQABAP8A////AAEAAP//AQABAAH/AQAB/wABAP8AAAABAQAA/wAAAf8AAP//AQAAAAEAAAH/AAAA/wEAAQABAQABAQAAAQABAAAAAAEBAAD/AAAAAADp6uvh4OMAAAAAAAEAAP8LBQgSCQr/AAAAAQEBAAD/AQAAAP//AP//AAAA/wEAAAH+AACq086519IAAf8ABAEVEwadcQc+KvcAAf///gH/9Ar88hH+/QUA/wIAAgEAAQEAAQAAAQH///8BAAAAAAAAAf8AAP8CA/8FA/cFA/MCAPUBAPv///0AAP8AAAEAAf////7v9P6Wuv5PkPp+s/na7P4AAP8CAAL+LSH/bkoAYT8AJBb///4A//4AAf8AAf8AAf8AAgEAAAEA/wAAAP//AQAAAf8AAf8AAv8AAAEAAv//AP8AAgAAAP4AAv8AAP4AAf4AAQAAAP8AAP8AAf8AAP8AAQEAAf8A/wAAAf8AAP8AAf8AAAAAAf8AAQAAAQAAAP//Av8AAv8AAf8AAgAAAv8AAf//Av8AAv8AAgD+Af8AAQD+AQAAAAAAAAD+Af8AAwEAA/8AAQD80swA9PMAAAAAAAAAAP8kIiRhY2ABAAABAQEA/wAA/wEAAQD//wABAAAB/wAAAgAA/////gAA/gEAAP8AAQD/Af8AAf8A/gAAAf8AAf///wAB//8BAQAAAQH/AAD/AAD/AAAA/wD+AAD/AQAAAAH/Af8AAP8BAAAAAP8AAAABAAIA/wAB/wAAAAABAQAAAP4A//8A/wD/AQAAAAAA/wABAQD//wAAAQEAAAAA/wEAAAEAAAACAAEBAP8A/wABAAD/Af8AAAABAP8AAP//AP8AAAIAAAABAAAAAAAAAAEBAAEBAAAAAAAAAP8BAP8A/gEB/wABAQAB//8BAf8AAAD/AAAAAAEAAAD/////Af8A//8AAAAA/wAAAAEE////////AQD//wABMjMxAgMD7+3syMjJICAf////AQAC/wH/Af8A////AQAAAAIAAP8BAAEAAP//AP8AAAH/AP/+AAAB/wH/AgECAAEAAAEAAP//AP4BAAH/AAAB/wAAAQAAAAD//wABAAEA/wAAAgEAAAAAAf7//wICAAAAAAD//v7/AgEA/wEAAf8CAAD//wAAAP//AAAAAAAAAP4B/wH/AQEB//8A///+AAABAAD/AP8A/wH/AQAA//4AAAD+AAAB/wD/AP4A/wAA9/f4+vv6/wAAAf8AAAAAAQAB/wAAAP8AAAH///4AAAAAAP4A/wAA////AAABAP///wAAAP/+/wAAAAH/AP4A/wAA//////8A/wD//v7////////9AAAA/v//AAH////////+/////wD///4BAP7/AAAA/v//AAAAAP//AP8A/gD+AP8BAAD///8AAP8AAAH///4AAgIBAAD///8A//8AAQIA////AQAA//////8AAAEBAgAC/wD/AP8BAQH+/wEBAAAB/v7/AQMA//8BAAL/AQAC9PHx+/f3AgICODg2AQEBAAAAAAAAKisrl5eUtrW4pqamzMrKycjJpRujRkhJPT9AJiYm//8C//7+/wL/AgABBwgJAQD//wAAAAAAAAEAAP8A6urqAAAAAP8AAAAAAAEBAP//AQEAAAAB/wAAAAABAQD/Af8A/wAAAAABAP//AAEBAAD/AQAB/wEAAf//AQEA/v8AAf8AAAEA/v8BAAAAAQAAAAEA//8BAAH/AAABAAD/AQABAAABAAAA/v//Af8AAQIAAAEB////AAEAAAD/AP8BAAABAQAAAAEA/wAA/wEBAv8A/v8AAAAAAAABAQH//v//AAACFxcYjYyJV1da8/PzAAAAAv8A/gAAf6H8JBwCSDUEAP7///8BAAH+AP0CAP7+AP8CAP/+AP//AP8CAP4CAf8AAAD/AAAAAP4BAAABAAABAQAA6fH+4+3+AAAAAAAAAAAAAAAALy4sAQAA/wAAAQABAP//AAEAAAAAAAABAQD//wD//wECAf//AAAA/v//AAAAAQEAAP8AAAAA/wAAAQEBAP//AP8AAAAAAAEB/wD/Af8BAQD/AAEAAP8AAAAAAAABAAD//v8BAQD/AAAAAAAAAQABAAAAAQAA//8AAAH/Af8B/wABAAD/AAH/AP8BAQAAAAAA/wAAAAAAzczN6+ztAAD/AAD///8BHxQVKRYZAQD/AAAAAAD///8AAgEB/wABAQAAAAD///8BxeXfkcK9AP/+AAACCgkCjGEHRyzy//3+AQED//UH/vUQAQADAAEB/wIC/wAB/wEAAP8CAAAAAAEA/wAAAf7/AgIAAQP7BAL7Af/0AAD7////AQD/AQEB//4AAAAA9PgCnsH/m8L81+r8AAD/AQABAQD//iAZAEEqADojAAMCAP//AAD/AAEAAP//AP8AAAAAAP8AAAH/AAEAAP//AAAAAAEAAAAAAAH/AP8AAQL///4BAAEAAAD+AAABAAD/AAH/AP8BAAH+AAABAAABAP8AAQD//wABAAH/AAAAAAD/AAACAAAAAAH/AP8BAAD/AP8AAAABAAEBAQD///8AAAABAAH/AAABAP///wD/AAAAAAIA//3+AQIB//4AAAAAAAAA/wAAAv4A/+7t/9PRAAAAAAAAAAAAAQACbm9tJiYn/wAA//8AAgEAAAH+//8BAQAA/wABAAD/Af8A/wEBAQEAAQD//wAC/gD/AgABAP8BAAEAAf8A/wD//wD//wAB/wAAAf//AQEA/wABAAD/AAEAAf8B/wD+Av8CAAEA/wD//wABAf///wEAAP//AAEAAAAB/wD/AQAAAAABAQEBAAD/AAAAAP8A/wEAAP8A//8AAv8AAAD/AAEB/wAAAf8A/gEAAQECAAD+AAAAAf8BAAEAAAABAAAAAQEB////AQAAAAAAAAAAAAH///8A//8AAAIAAf8B/wAA/wL/Af8B///+AAEBAAACAAD/Af8BAAH//wEAAQABAAAB/wEAAAD+/wEBAP8BAv///wAAAQD/AP///ykoJywrKv8BAcnIxwEBAQEAAgEAAP8AAAABAQABAAABAP/+AP8A/wAAAAABAP8AAf8A/wAAAQEBAP8AAAAAAP/+AgD+AQAAAf8AAAAAAAD/AAEBAf8A/wD/AAAA/wD/AAIAAP7//wAAAP4BAQEA/gD//wEBAAAB/////wD/AgAB////AP8AAAEA/wD//gD///8A/v8A/////wD//wAAAAD+AQABAP8BAAH///4A/wEB/wAAAf///wD//wEBAP////T19P39/gD///8AAAAA//8AAAD+/wD//wD9AQAAAP8AAAACAP8BAQEBAAAA/wD/AP//AP4AAQD/////AP8A///+////AP/////+/f8AAP//AP/+AQD+///+//7/AP///////f8A/v/+AP///f4A/v3//v/+/v/+/gD+AP/////9Af8A/gD//wH/AP8BAAD/AAEAAP3+//7+///+AP//AP/+/wD+AP//////////AAD/AP4A/wD+AP///wD/AP//AP///v/+///+/////gD/APz6+vTs7QD/ADs4OTk4OQD/AAAAAAEBAf/+/w0LDlhXWJubmXl6eSosLOfo6Z+en3FsbImGhdHQzP7//gEAAf//AAoKCgAAAgAA/wAB/wD/AAD/AeHh5AAAAP8BAP8BAAAAAP8AAAD/AAH/AAL/AAEA/wAAAAABAAABAAD//wABAP8A/wAAAP8A/wD//gAAAP//AQEBAAAAAAEAAAAAAAEAAAAAAAD/AAAB/wAAAP///wAAAf4AAQD//////wEAAQABAP//AQD//wABAQD/AAH/Af8AAAEAAQH/AQD/AAEAAAH/AP8BAAEAAAAAAAAA////AQEBAQEBAAH/AEdISGlqaQAA/wAAAP4A/wAAAPD1/naZ/Ojq/gH/AAAAAQD+AAAAAAD//wD+/v///gD+/gD//QAA/wD//wD9/wD/AP8A/v///gD//v8A/vH2//n7/wAAAQAAAAAAAQAAAAcFB///AAEAAQD/AAEAAAAAAAAAAAAA////Af8AAgD///8AAAAAAQEBAAABAAEAAAAAAf8AAAEB/wEA/wABAQABAAABAQD//wEAAQAAAAAAAf8AAP8AAAABAP8AAAD/AAEA/wABAQD/Af8AAAEAAAAB////AAEAAP//Af4AAAAAAAAAAf//AP8A/////wAAAAEAAAAAANXU1v8AAAABAAAAAgEBARgLDQQBAAD//////wABAAIAAgD/AAD/AAAAAQAAAOv19Ia+uO/18wD/AQABAHVQB1w78//9/QEAA//1Bv/1DgD/Av8CAf4DAP8B/wEA/gEB/wAB/gAB/wABAAIB/gID/AME9wUC8gH+8AD/+v/9/v///wD/Af/+AQD/ALvS/06O+XOs+NXq/AAA/wEAAAAhGP1fQP95Tf8+JgACAQD//wD//gABAAD+/wAB/wAAAQD//wABAAD+/wAA/wABAAAA/wAA/wAAAAAAAAAAAf8BAAAC/wAB/wABAAAB/wACAAABAQABAAAAAQAC/wAB/gAC/v8BAAAB/gABAAAC/gABAQADAAAB/wAAAAABAAABAAACAAACAAD//v8AAAADAAEB/wAAAAAA/wAAAAEBAAEAAAH/AAAB/wEBAAAC/v8B/wAAAAD//////fzIxQDw8QAA/wAAAAAA/jQzMl5fXf4A/wEBAAEBAAABAAAAAQAB/wAAAAH//gAAAQAA/wEB/wAAAP//AQD//wIAAf//AP8A//8AAAABAAD/AAL/Af///wEBAP8AAAAAAAAA/wAAAQAAAQAC/wEAAf4B////AAH/Af//AAABAAAAAAABAAEBAAD//gEAAAAAAAEAAAAA//8AAAAA/wABAAEAAAEAAAIA//8A/wABAP//AAAAAP8AAAEAAf8A/wAAAf//AQAAAAAA/wABAP//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AP8A/wD/AAAA/gAAAQD/Af//////+vr6/gD/AQAA/wD/AP8AAAD+AAABAP8A/wAAAAD/Af4AAAH+//8AAf///gD/Af8A/wAA//8BAP7//gAA/v8A/wAB///9//////7//////wD/AP8A/v////8AAAAAAP7+/f/+AP7//v//AQD////////+//8A//4AAAD/AP8AAAAA///+AAEB/////gD/AAEBAP//AAD///8AAAEB////AAEAAf///gAAAv0AAAEA/wEAAP8AAAIBAP8AAQH+//8CAAD+//4DAgIAAv8B/fv89e/yAAAAPDw8QD8+AAH/AQEB/wAA/wAAAAD/AAAAAQD/AAAA////Hx4fcXBwPD08q6qswb7A9PP2x8bGyMfGAwMDAP8A//4AAAEAAP//AAAAAAAB+fn6/wAAAAEAAP8AAQH/AAABAAAAAP8AAAEAAQEAAf8A/wD/AAAAAP8AAAAAAQEA//8AAAL/AP8AAP8AAAAAAAEAAf8AAP8A/wH+Af8B/wAAAQEB//8AAAD/AAEA//8AAAAAAQAAAAAAAAEC/wD/AAEB/wD/AP8BAAEAAAABAP//AAH//gAAAf8AAAAAAAD/AP8AAAAAAQIB////AAEAAAABAAD///8AAQEBERESg4SBUVBT8O/vAAD/AAAAAP8BpLz8JhoFd1T9AAABAQABAP7/AAD/Af4B/wAAAf8CAQD+AAAA/wD+AQABAAABAAD/AP4B/gH//f0BAAD/AAABAAAAAAABAAAAEhISAQICAAD/AAAAAAH//wABAP///wEAAQAB/wAAAQECAP8AAAD//wAAAQD//wAAAf8A/wEA/v8AAQABAAEAAP8AAQAAAQEA/wD///8AAAEAAAABAAAA//8BAQH/AAABAAAA/wAAAAAAAP8AAAAAAAEBAP//AAEBAAD/AP8BAAH/AQEB/////wAAAAEAAAABAQAA8/Pz09PUAQIA////AAACAP//Hg4RAP7/AgAAAQEB/v///wEAAP4BAQEB/wH/n83Ipc/HAP8AAAD/HxgEh175DAf//v0BA/gDAPgEAAD+AAL6AQEB/wD/AP8AAQEDAQAC/wEDAP8AAQIBAQH///76Av35AAD///8AAQAAAAEA/wD/z98DmL3+qs738fwAAAD/AgAAAA8K/j4pAEEpABAHAAD/AAD/AAEAAP8AAAD/AP8AAAEAAP4BAAD/AAIAAP7+AAAAAAEAAAAAAP8AAP//AAIAAP4AAAEAAAH+AAABAAEAAP7+AAAAAAAAAAH+/wABAAEAAP8BAAL/AAAAAP8BAAAAAAAAAAEAAAD/AP//AQAB/wAAAAH/AP8AAAAAAAAAAAEBAAAAAP/+AAACAAD/AAH+AAAAAAEAAP4AAP//AQAB/wIAAf8AAAAAAAIAAf7+AAEC/wD//9PTAP38AAABAAD//wAAKigqWVtZ/wAAAQAA//8AAAAAAAAAAQEB////AAAAAgIA/wAAAQAAAP8AAQAB/wAA/wEAAP8AAAAAAgEB/wAA/wH//wABAQD+AQEC////AgAB/wD//wAAAP4AAQEAAAEBAf8A//8A/wAAAAD/AAEB//8AAQABAAEAAP8AAQEA//8BAQEAAAEAAf4C/wAAAAH/AAAAAQAA/wD//wAAAAABAAD/AQEAAAAA/wAAAP8AAQAA/wD/AQACAAD/AQAA/wEAAQEA/wABAf8A/wEB/wABAAD/AQAB/wH/Af8AAAAAAf8AAAEAAQAB////Af//AAECAQD+//8AAQEB//7/AQAA/wEAAQAB/wH+AQABAAAB/wD/Av7/AP//AAAA//8AAQEAAS8wMTg6Of///snJyQEAAAACAQIAAAD/AAAAAAAA/////wEBAf8AAP7//v7//wD//wAA/v//AAD//wAAAAD/Af8A/wH/Af8AAP//AAAAAAD//wAA//3/AP////4AAf7///8AAP//AAD/AAH/AQAAAP///wEAAAAAAAD/AP//AP8A//8AAQEBAP8AAP7/AP7///4A//7//wAAAAH///8AAAAAAAAA/gEA/wECAP//AAAAAAH//wD//wEBAP7///7+/gEA/wD/AAH/AAIAAP8BAf8A/v////////8B//4A/wH+AQD+AP//AAAAAAAA/////wD+//8B/////wD//gD+/QD/Af7+/v7//v7//v//AP3//v//AP///f///v3//QH+/////gH//v78/v/+/f/+/////wAA/f/+//7//v///v7/AP79/f///wD////+/gD//wD+/wD//wD////+/gD9//7+/wD///7//////////wD+/v/9/v8A//8AAP////8AAAEA/////gEAAPLu7/z7/A8PD25uawgHBwAAAf4AAAEBAAEA/wD+AAD/AP//Af8A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/wEA/wD/AP4BAQIAAAAA/v//Af8CAQL/AP8BAAH/AAABAQEB/wD/AP8A/wAAAQEB////AAAA/wAC/wD/AgEAAP////8A/wABAAD+AAEB///+AP8B/wEBAP8AAAH/AAAA/wD/AAEB//8BAP8A/wEAAAD/AP8A/wH/AQEA/v//AQAA/gAAAgID////AAAA/v8AAQD/AP8A/wAAAP//AP8A/wEAAAEB///+/gAAAAEA////AP7//wD//wD//////gD+/////v////7//wD+//3+/////v7+///+//7///7//gD//wD///39AP4A/v////8A//7+/////v/////+AAABAP///v8BAAD/////AAAA/wD/Af8AAAAB/wH/AP8B/wH/AQAB//3+AgEBAAD/AAEBAP8AAP//AAH/AQICAP///wD/AP4CAQICAAEB/v7+8u7u/vv8FhgXWVlV/gAAAf8A/gAAAAD/AP8A/wABAQAA/wAAAAAB/wD/AP////8B/wD/AAAA////AAAAAgABGhkaGRkaAQAAAAABycjJ0tDQAAEAAP//AAAB/Pn7/f39AgMDAQAB//8AAQAAAAEAAAAAAAAAAQD/AQEB//8AAAH////+AQEBAP8AAAD/AQEB//8AAAAAAAD/AAAB/wD/AQAB//8B/wH+Af8CAAAAAQAA/gD+Af8B/wABAAAB////AAAAAQAB/wIAAf////8BAQAA//7/AQIAAf8AAQH//gAAAQAAAAH/AQABAP///wD/AAABAAAAAAAAAAD/AAAA/wD/AP8BAQEA/wAACQgIgYCA8e/wm5ycAAH/AP/+AAAB9vn/dJ35BQQHZEUAAP7//wABAAAA/wD/AP8BAQD///8BAAH/AP0BAP//AP8AAAAAAwP/AAAAAAD/AAABAAAAAAEB4uLh/wEAAAABAAAA////AAD/AAAB/wD/Af8BAAD/AAAA/wEAAAAAAAD/AAAAAAAAAQABAP8AAP8B/wL/AgAB//8B/wEAAAAB/wAAAP//AAABAAEAAAD/AAAAAAAAAAH/AAABAP8AAQAA/wABAQEAAf8A/wH/AQABAP8A/gH/AQABAf8A/wH/AAEA//8BAAAA+fj7xsfJAP7+AAEAAP8AAQABPB8jEQcH//8A//8AAQH/AQEBAQEA3+zsarKt1ujmAP8AAQEBakf+aUP8Av4BAP0BAPcFAP0D/wL+AQAB/wD/AQAAAAAAAAD/AAD/AP/9AAABAP0B/wD///8BAQACAQD//vwAzuAEkr3+r9H89vz+AAAAAAAB/hsQAD8mADkh/w4GAP7+AAEBAAD/AAEAAP8AAAH/AAAAAAH/AP4BAAD/AAEAAAAAAAH/AP7/AAEBAAABAAAAAAIAAP7/AAABAAIAAP//AAABAP//AAH///8CAAEAAP8AAAH/AP3/AAIBAAAAAAD+AP8BAAL+AAECAP4AAAABAAAAAP//AAEAAAABAP8AAAH/AAEBAAAAAP/+AAEBAP8BAAEAAAEAAP7/AAABAAH+AP8CAAEAAAD+AQEC//7/AAABAAAAAQD//wIBAP///+XlANPX/wD/AAACAQAAAQD/bWtrKisrAP//AP8A/wAAAAAAAP8B/gH/AP8AAf8AAAEBAAAAAQD///7/AQEB////AQIB/////wEAAAABAf7/AQEBAP//AAEA////AQABAAABAAH//wAAAP8AAAABAAEBAQD///7/AQEBAQD/AAABAAEAAf8AAAD//wH/Af8B/wAAAAAAAAD//wEAAAABAQAAAAEBAQH/AAAAAAAAAAAAAP4BAAEA/v8AAQEA/wH/AAABAAD/AQEBAP8AAQABAAAA/wAAAQABAP8AAAEA//8BAQD+AAABAAD///8BAQEAAAEA/gD/Af8AAP8AAQIB//8BAQAAAAEAAQAAAAAB/wEA/wABAQEA/wAAAf8A/wAB/wH/Af8AAgAA//8AAP8A/v7/AAAAAP8AAQ0NDT9CQgABALW0s/Hx8gEBAQD//wAB/wIBAAAAAQAAAQABAP////8AAAAA/wEA/wEA/wEA/gAAAP/+AQAAAAD+//8A/wAAAAAA//7+/wABAAEB//8AAP///v///wAAAAAAAAD///8BAP7//wD//QEAAP7+AAAAAP8A/wD//wAAAf////8AAP8A/wH//wEA/gD/AAAA///////+//8A/wAB/wAA/wD//wEA/wAAAf7//wH/AAAAAAAAAAMDBP4BAP//AAEB////AAABAQD/AAD+AP8A///+/wD///8A/////v4A//8AAf4A///+//79//8AAP/+//7//gD///8A/v/+AP4B/v7///8A//7/AP3+/////wD+/v/9/v7/Af3//////v/+///////+/wD+/v/9///9///+///+/P/8/f79/wD//wD+///+/v/+///+AAD+///+AP7//gD/AP//AP/////+//7//wAA/wAAAf/+AAAAAP//AQD//////wEAAfn19fjz8gEBAWhlZCUmJAD//wAAAAEAAAAAAAAAAQEAAf//AAH/AP///wL/AAAA/wAAAAAAAAD/AQIBAQAAAAABAQAAAP////7//////wwNCwAA/wD//wABAQAA//r9/Pv8/QIAAQD/AQEAAP8BAf8A/wEAAAH+AAEBAAAAAAAB/wAAAAIBAQAAAAABAAD/AQAAAAEBAAAAAAEAAQEB/wEAAQAA/wEA/wD/AQEAAAAB/wAAAAEBAQEAAQEBAAAB/wABAAAB/wEA/wAA/wEAAQIA/gEB/gEBAAAAAQEBAQD//wAAAAAAAAH/AP8A/wAAAQEAAQABAAAAAAAA/wAAAAAAAQD/AQEBAP8AAAAAAAAAAAkJCH1/fS0tLQD/AAAAAAAB/wAA//f8AXKb+qa9/QD//wEAAQAAAAD+/wD+/wD+AAD+/wD+/wAAAAEAAf8AAAEBAAUEAAAA/wAA/wAB/wAAAAD/APj5+QEAAQD/AAAA/wAB/wAAAAAA/wAAAAAAAAAAAAEAAQAAAQAAAQEAAAAAAQAAAAABAAABAAEC/wH/Af7/AAEB/wD///8AAAEA/wAAAQABAAD//wAAAQH/AQAAAAH/AAAAAAEB//8A/wAAAAAA//8B/wAAAP///wAA/wH/AQAAAP8AAQD/AAD/AAEBAAD//76+vsjHyQABAAAAAAAAAQEAAUAfIwD//wD/AAD////+AAD//+Tu7Xq7s9Dn4AAA/wIDAE43/4FS+wIAAQD+AQD7BAD/Av8C/wD+/wAA/gAAAAAA//8A/gAB/gAB/v8AAQD+///+/v/+AgD//wH//9roAXar/0uV+qPN+fT8/gAB/v8ZDf5YNf94SP9IJwAOBwAAAAAC/wAA/wABAAAA/wAA/gD//gAA/gD+/wAA/wAB/wD//wAB/gAC/wACAAAA/gAC/gAA/gD//wACAAAA/gAA/gABAAAA/gAB/wAAAAAA/wD//wEB/wABAAADAAAB/wAAAAAB/wAB/wAAAQD+/wAAAAAB/wAA/wABAAAAAAEBAAEC/wAAAAAB/wAA/wAAAQAB/wACAAACAQAAAQABAAABAAD/AQAAAAAB/wABAP8A/wAA/wEB/wABAP8A/wAB//8A/gDIzgD//QAAAQAA/gAAACEfHl9hX///////AAAAAAEA/wAAAAAB/wH/AAEAAQEBAQAAAAAA/gAAAQEBAP8A/wABAP8A/wAAAAH/AAH//wAAAP7///8BAgAAAAEAAQAA/wEAAAAAAAEBAQECAAABAAAB/wAAAQECAgAAAAAAAAAB/wAA/////wAAAQEAAAAAAAD/AQAAAAAAAQH/AQH/AAAAAAAA/wD//wD/AAD/AAEAAAAB/wEA/wEBAP//AAD/AgAA/wAAAAD/AP8AAAAAAAAAAAEBAQEA/gABAAAAAAAA/v8AAf//AAAAAQABAP8AAP/+AAH/Af8AAP8CAf//AQIAAQAAAf//AAEAAP///gH/AQEA////AQEAAAAAAAAA/wAAAP8AAQIA/wAA//4A//8A/v//////AP8BAABFQkEMCwzS0dG9vbv/AP7/AP8AAAAAAP8AAP8AAAD/AAAAAP8AAQD//wD+/wD+/wD///////7+AP7/AAD/AgH//wAA/wH/AAAAAQD////+/gD///8A/wABAP//AP8A/wD/AAAA/gABAQD/AAH+/v8AAAD//wAAAP//AP8A/////wAA///////+AP//AP/+AP/+/gABAAAAAAAA/v///v8AAP///wD/Af///v4A/wD/AAD//v8A/v8FBAQA/v8AAP8A/v8AAAD///7+AP8AAAAAAAABAAD+/wAA/gAB/wH//QD///7///7+/v//AAD9//7+/f///f//AP7/AP/+//7//gAA/v/+/f7//f4A///9/v79/v/+/v///v3//v7+/v/+//3+/v7+/v////7//v///v3//f3+/f///wAA//3+/f7//v///wD+//7+/v7/AP8A//4A/gD///7//v3//v7+/wAA/gD/////////AP/+/v8A/////wEAAQD8/Pvy7e8A//87OztUVVL+//8BAP8AAAD/AP8BAAAAAP7/AP8BAAD+AP8AAAD+/v//AAD/AP8A/wH/AQD//gD/AAH//////wAAAQEAAAEBAf8TExQAAP8AAP8A//8AAAHq6Ojs6+v/AP8AAP8AAQAB//8B/wH+AP7/AgD/AAH/AP8A//8A/wD//wAA/wAA/wAAAAAB/wD///8AAAD/AP8A/wAAAAAAAP8AAAABAAH/Af4AAAD+AP8B////AP8BAAD/AAEA/gEA/wD/AQABAP//AP8AAAH//gEAAQAA////AAD/AAEB/wH////+Af8AAAD/AP4A/wAA//8AAQEAAAAAAAAA//8AAQD/AAABAAAA/wAAAAAAAAEcHByPj44XFRUAAP8A//8AAQAA//70+QFxnfqiwQIA/gAA/wEBAAEBAAIAAQABAf8B/wABAAAA/wACAP8AAP8aDwAeFQIAAAEA/wAAAP8AAP/Z19j/AP8AAQAAAAEBAAH/AAAAAQEB/wABAP8AAAAAAAAA/wABAP8AAAABAAAAAAD/AAEA/wAAAAEAAQABAAD/AAH/AQAB/wAAAAEAAQABAAD/AAD/AAD/AQAAAQH/AQEAAAAAAAEBAQAAAP8BAAEA/wH/AAAAAAAAAAABAQAA/wABAQD+AAEAAQABAAABAACtrq////4A//8A/wABAP8fEhU+HiEA/gAAAP8BAAAB///W6eZ1urDB39sA/wABAQE1JQGSXfwMBQIA/QAA+gEA/AAAAf8AAP4BAgAAAP8BAf4A//4AAP4AAP8A/v8B//8A/wIBAQQBAAD2+AGWvgBIj/uOv/zr9f0BAP4BBgL+QCb/ekQASiYADQMAAP4AAP0A//8AAAAAAP8A/v8AAP4AAAEAAAAAAP8AAf8AAf8A//8AAP8AAf8A/v8AAP8AAAAA/v8AAf8AAf8A/wAAAQAAAAAAAAAAAAAAAQEAAAEAAP8AAQD/AAAAAAAA//8AAAAAAf8A/wAAAQEAAP8AAP8AAf8AAP8AAQABAf8AAQD/AAD/AP8AAv4AAAAAAQAAAf4AAAAAAQAAAf8AAf8AAf8AAf8AAAAAAf8AAAAAAAEAAAAAAgD/AQAAAP8AAQAAAf4B5eQA1dkAAAEAAAAAAAAIBweFhogeHh8BAAABAQD/////AQH/AQAAAAABAQEAAQD//wAAAP8AAQIAAf/+AQAAAAD//wAA/wAAAAEAAAAAAAAAAQABAQABAP8AAAD/AP8AAAEAAAEAAAAA/////wABAP8A/gEAAP8A//8AAP8AAAAA/wD//wAAAQEA/////wEAAAEAAQAA/wH/AAAAAQAAAQAA/wAAAAD/AAEAAAH/AAD+/wABAAH/AAEAAAEAAQAAAP8AAAEAAAH/AAEA/wAAAAD/AP///wD9/wH/AAAA/wABAAEAAP8AAQH//wAA//8B/wAAAP8AAAABAAEA/gAAAP7+//8AAAABAAD+/wD/AQEAAQD//wABAAD/AAD/AAAA/wABAAAA/wACAP///wAA/wAAAAD/AQD/AQD//wAAMTIvNjY1AP//rKqu9vX3AAAAAQEAAP8BAAAAAf8AAP7/////AP7+/wAA///////+/wD//wAA//8AAAAA//3+AP8BAP//AAAAAP8BAP//AP8BAAAA/wAA/v8B/wAAAAD//////wAA/v4A//8AAQEAAP///wD+//4A///+/wEAAAABAAEAAP8AAP8A/f8BAf4AAAD//v8A/wD+AQD//wAA//4A/wAA/v0AAP/+AP////7//wEB/wEBBAQE/wAA/gAA/wEB//8AAP4AAP8A/wEAAP8A///////+/wEA/f/+/wD+cadKigABAABJREFU//////8AAAD+///+//7/AQAA/wD//v4A//3///7//v7//f7+//////8A/v7/AP7///3//////v7//////v3+//3///0A//3+/f3////+//7//wD//v79/v79AP///v7+AP7+/v7//v7+//7+/v39/v7+/v/9AP3//f7+//8AAP7+AP////7//////////wD//gAA////AP3/8+3u/vn4EhEScnJwCgwMAP8A/wAA/v/+/wAB//8AAAAB/wD/////AAAAAAD/AQMA/wABAf8B////AP8A/wEA//4AAP8A/wEBAP8AAAD//v4AAgICAAAAAAABAAEBAAD/9fX1+Pj4AQAAAAAAAP8BAAABAQAAAf8BAP8AAAD/AP8AAP8AAAAAAAAAAAAAAAAAAQEB/wAAAQEBAQEB/wAAAQAAAQH/AAABAP8B/wD/AAABAAABAQAB/wEBAAEA//8AAf//AAH/AAEAAP8AAP8CAAAA/wAAAQIAAP8AAAAAAP//AAAAAAH/AAEBAP8C//8AAf8CAAEBAAAA////AAAAAQAAAQEBAP8AAAAA/v///wEAAAAAAAEAAAAAQUNBmJuZEA8QAAAAAP8AAAEBAAD+6/X/bpn2kLP8/vz+//4A//8AAP//AP8AAP8B///+AAAAAP8B////Egr/KBcBAAD/AAABAAABAAD/3t/hAgAAAQD/AP///wAAAgEBAP8AAAAB/wABAAABAAH/AAH/AAAAAP8A/wD/AAEAAP8AAQAB////AAD/AAH/AP8AAQABAAAA/wAAAP8A//8AAQEAAAD//wD/AAD+/wD/AP8A/wD///8A/wAA/wAAAAH/AQABAAAB/wEB/wAAAQAA/wAAAgAAAAAB/gAA1NTYr62xAAD/AP8AAP//AAAASiUpFQkMAP7/Af4AAAH/3O7rb7Wuv9za//8AAAIBOyz+q2v2HhH/AP7/APwBAP4BAAAA/wH+AAH/AAL+AAH/AAD/AAL+AAH////8AAAB//8A/v4A//7+1eYAW5n6bKr44PD8/wH+AQH/ACcaAGU5AGA1AA8JAAD+AAIBAAD/AAABAAH/AP//AAEAAAEAAP8AAAL+AAL/AAAAAAAAAAD/AAEAAAEAAAD/AAAAAAH/AAD/AAEAAAAAAAAAAAEAAP//AAEAAAH/AAL/AAH+AAD/AAH/AAAAAAEAAAD/AAIAAAD/AAAAAAL/AP/+AAD/AAEAAAD/AP//AAAAAP8AAAD/AAD/AQH/AAAAAAH/AAEAAAICAAD/AAD/AP8AAAD/AAH/AAH/AAH+AAAAAAIAAAABAAL/AAH/AQD/AAEAAAL/AAEB/9LaAPz8AAABAAABAAABQT8/VVhVAAIAAAEB/wABAQEAAAD+AAAAAAAB////AQD/AAIAAQEBAAD///8AAv8A/wAAAQEBAQAAAQAAAAEBAAD///8AAQD//wAAAAAAAQABAAAAAQAAAAAAAAEA/wAB/wAAAQH/AP//AAEAAQAAAAAA//8BAQEAAP8AAAEAAQEBAQAAAQH/AQEAAQAB/wAAAf///wEBAP8BAQAA/wAA/wABAAAAAP8AAP8AAAEAAQAAAQD/AAEAAf8BAP//AAAA////AAABAAAAAgH/AAD//wD//wAAAP8BAQD/AQAB/wEB/wAAAQEAAAAAAAAAAQEBAAABAAAAAAH/AAABAQAAAQAAAQD/AAEA/wEAAAAAAQEAAAAB//8BAAEAAv4B/wAA/wAA//8BAP8AAAAAAAAAAAD+/kdGRgEAAc/Qzr7AvwEAAP7/AAABAAD/AQABAP8AAAD/AP///wD9/v//AAABAf//Af//AAEAAP/9//4A/wEAAP///////wD///8AAP///v///wAAAAD//wD/AP8A/wAA/wD///8B/wAA///+//4AAAH/AAAAAAAAAQD//////v//AAAAAAAA/wEA//8B/wAAAAAA///+AP7/AAD+AAD//wD//wAB/wABAP4A/wABAP///gAA/gcHBwAA/wD/AQD+/wEB//8AAP8AAP/+/v7//v4A////AP/+/gEA//8BAAD/AP7////////+/v/+/v///QD/AP/+/v8A///+/v/+/v7/AP///v7+/v/+/v3//gD//v7+/v/+/v79/v/+//3+/v///f/////+///9/v7+/v38/gH+/////v39/QD+/////wH+/gH+///+//7//wD+//78//4A/wH/Af/+/v7+//7//v7//v///gD//wD+/gH/AAEBAff09Pn19QABAVtcWy8uLQEA//8A////AQAAAgAAAAAAAP/+/wEAAAABAAAA/wAAAP7/AQD+//4A/wABAf8A/wAA/wEA/gAAAP/+//7+////AP7/AP7+/wAAAgABAAEAAAAA//4A/v8AAP7/AAABAQAB/wAA//4A/wAAAQAAAQAAAAAAAAABAQAAAQAAAQAAAAABAQAA/wAAAAD/AP8A/wEAAQABAf//AQEAAAECAAEB/wAAAAD//wABAAAAAAEAAf//AP8AAP8BAQD/AQABAP8AAAAAAQAAAP8AAAAAAAAAAAD/AAAAAAD/AAEAAAAB/wAAAAABAAAA//8A/wEAAAAAAP//AP////8A/wAA/wIAAQEAAAABAAD/AAAAAAH/AU9PTqutqiQjJAAAAAD/AAAA/wEAAPP5/Xal94ev/f78/wD+/gD+AQD/AP///wH/AQAA//8A/wEAAAECABsRAQAAAAAA/wAAAAAAAdTT0+Hh4v4AAQABAAH/AP///wAA/wEA/wEAAP8AAP//AAD/AP//AQAAAf//AQEAAQABAP4A/wAAAAD/AAD/AQAB/wD/AAAB//8A/wAAAP8A//8AAAAAAAEAAAAAAgIAAQAB/wAAAQABAQH/AQEAAAAAAAEA/wABAAD/AAD/AP8AAAAAAAABAAD//wD/AKCho/Dw7wD/AAAAAAAAAA0GCVInLf7//wAAAP8B/9jt6W+3rtTp5AABAQAB/kcz/aBi+x0SAQD+Af//Af/+AAAAAAAA/wEA/QAB/QAA/QAB/gAA/QAA/wD//wAAAf///gD/AOryApG9AFCV+rLX/P8B/gEB/gEVDf5ZM/9yPP83HAAD/wAB/QAC/wAB/QAAAAAC/wD//wAB/wAA/wAA/gAB/wD//wAA/wAB/wAA/gAA/wAA/gAA/gAAAAAB/gACAAABAAAC/wABAAAAAAAA/gAA/wAA/QAA/wAAAQD/AAAA/gAAAQAAAAAA/wAAAAAAAQABAQAA/wAAAAAC/wABAAAB/wAB/gACAAAB//8C/wAAAAAB//8BAQAAAQAB/wAB/gAA/gACAQAA/wAB/wAB/wABAQAAAAABAAAB/gAA/wEC/gAA/wD///8A/gAC/gABAQDx8QDQ1wAA/wAAAAAAAAAA/01PTQEBAgAAAAAAAAABAP8BAAD/AgH/AQAAAAAAAAD/AAD/AP//AAEAAAAAAQAAAQEAAQAA//8AAP///wH/AAAAAQEBAP8AAQEAAAAAAQAAAQD/Af8AAAAAAAD/AAIA/wD/AAD/AAABAgD/Af8AAQEAAQAA/wD/AAEB/wAAAf////4AAAD/AP/+AP///wEAAf4BAQEA/wAAAAAAAAEA/wIAAAD/AAAA/wEAAAD//wAA/wD/AAD+//8B/wECAQAB/wABAQAAAAD///8AAAAAAQIBAQD//wABAP8AAP8B/wEAAAABAAAAAv8AAAAAAAAA/gEA/wEBAP///wD/AP8AAAEAAP8A/wAAAAH/AAAAAP//AAAA/gEA/wAAAAIA///+/gD+/wAA/wEAAAH/AAD/Af/+AP9CREEcHh4A/wGjoqT29/gBAAAAAP8BAgEA/wEBAQD/AAH/AAD/AQAAAP////8A/v4AAP/////+Af4B/wD+/v//AP/////+/wAA/wD/AAAA///+/v8AAP///////wAA/gD/AP4A////AP8AAP8A/v7+/wD+//7/AAD/AP8BAP8A/gD/AP//AP///v8A/////v/+/gAAAQAAAQD/AP//AP////4B////AAAA/wAAAP8A//8BAAEICAkA/wD/AP79//7+/v4AAP8A////AAD/AAAAAP//AP///wD+AAAA/P8AAP4A///+AAD///8A///9/v/9/v7/AP///f/9/v7//v3//vz9/QD//v/9/v7//f39/v7+/v3+/v///f/////+/v79/f79/f3+/f7+/////f7///7+/////f8B/gAA/v7+/v7+/v4A/v8A/v8A/v/9/v4BAP///f/+/v3//v4AAP////8A/wAA/v4A/v8A/wH///77+vn18O8A/f40MzJiYV/+//7///8AAP8AAf8A///////+AP//AQD+/gD+/wAA/wD//wAA/wAAAQAAAP//AP8B/wH/AAD+AAH/AAAA/wD/AAD/AAD//wD//wAAAP8A/wD///8AAAEAAQH///4A//8AAP8AAAEAAQACAAH/AP8AAP8AAAABAAEAAQEAAP8AAAAAAAD/AP8AAAAAAQH/AAAAAAAAAP////8AAP//AAEA//8A/wIBAAEAAQEA/wAA/wH/AAABAAABAAEB//8BAQABAAEBAP8AAAAAAAD/AAD/Af8AAAAAAP//AQAAAAH/AAEAAAEAAAAAAAAAAAABAAEAAQAAAQAAAAD/AAABAQEAAAD/AQAA//8AAP8A/wAA/v8AAAD//wFDQkOYmpcSEhQAAP8AAAH/AP//AAD7/f+Crfdvn/fu8v7//v//AQAAAf///wAA/wABAAD//gD//wEhFAMAAAAAAAAAAAEAAALw7vDQ0NEBAAABAAEAAAD/AAAAAP//AAH/AAABAQABAQEBAP8BAAAAAP8BAf//AAAB//8BAAAAAQD/AQAAAf8A/wEBAAAA/wEBAP//Af8BAQAAAAEA/wAAAAEBAAD/AAAAAAAAAP8BAP8AAP8A/wAB/wD//wAAAP8BAQD/AQAAAQAAAAABAAD//wDY2NmfoaMAAP8AAP8AAP8AAf5CIyUrFxkB////Av7L5eFvtKvO5OAA/wAA//5ONQCjZfsiFP8A/QEA/QAB/AEBAQEAAAAAA/4AAAABAAAAAAAAAP7/AAAA//4AAP4A/v/+/gC51AJQlPhxrPfd7PwCAf8BBQL+Qyj/dUAASiYACwQAAf8A//4AAP8A//8A//8AAP8A//8AAQAAAf8AAP4AAf8AAP8AAP8A/wAAAf8AAAAAAP4A//8AAAAAAP8AAQEA/wAAAf8A//8AAP8AAf8AAAAAAQAAAgAA//8A//8AAf8AAQEAAf8AAP8AAQAAAP8AAf8AAQAAAQAAAQAAAAEAAQAAAQAAAAIAAP8A//8AAQEAAgAAAQAAAf8AAP4AAAAAAQEAAQAAAAAAAv8AAf8AAgAAAAAAAQAA/wAAAQAAAQD/AAAAAQEAAgEAAgAA/wEAAP4Axs8A8/MAAAAAAP8BAAA2MzRUVVUAAQH/AAEAAP8AAP8B/wEBAAD/AP8A//8AAQD/AAEAAQABAAAAAAH/AAD/AAAAAP8AAAEAAAAAAQD/AP8AAAH/AP8AAAH/AAEAAP8AAP8AAv//AP4AAQAAAAD/AP8AAQAAAAH/AP8BAP7/AAAAAAABAQEAAQEAAQAAAP8BAQEAAAAAAAAAAwAAAQD/AP8AAAH//wD/Av//AAAAAAD/AP4BAQD/AgH/Af8AAP8A/wEBAQEAAQAAAAAA/v8B/wEA//8BAAABAf8A/wEB//8AAAABAgEAAAAAAAAAAAD/AP8BAAD/AAAA/wAAAAD/AAAAAAAAAP8AAQIAAP8AAQEAAAABAAEAAAAAAf4AAAABAf8BAAH/AQEAAAACAP8BAQAAAQAB/////wD+////Av8AAAABGBYWQkNB/wD/0tLTv7/C/v8A/wAB/wAAAAEAAAAA/wEAAAAA/wH/////AP7//gAAAP7/////////////AAD+//8A//7/AAH//v/+AP////8AAAD///8B/v/+AP8A/gD/AAAAAAD//v4A/gD//wD/AP//AAEC///+//8A/wAA/wL//wD/////AAH//wD/AAH/AQD//v/+//7+AAD//v//AAAA/wD/AP7/AQAA/v///wEAAAAACwoKAAD///4AAQABAP8AAf//AP//////AP4A//7/AP//AP8A//0A/wD//v7///7//v7+/f///f7/////AAD+/v3+/f/////+/f7//v7/AP7+/v/9AAD+//7//v7///7///7+//7+/fz9/vz+/v7+////AP/+//3+///+//3+//3+//79/v7///3+//39//7//f7+///+//7+AP8A///////+AP///v8B//7+AP////4A/v8A/v//////Af7/9+7wAPz9AwMCXFtaDA0LAAD//wABAAAC//8AAAEAAAAAAP8AAAABAQABAAAA/wEAAAAAAP/+////AAAB/wD//////wAAAAAA//8BAAD/AAAA/v8A/wD////+AAAAAAAAAAABAAAB//7+AP//AQIAAP8AAQD+/wAB/gD+AgEAAQEA//8B/wAAAAAAAQEBAQD/AAEAAP8A/v8AAAAAAQAA//8AAAH/AAD/AQH/AAH//gD//wAA/wD/AAAAAAH/AQH/AP//AAEAAAH/AAEA/v//////AAAAAAD+/wEBAf8AAv8CAAEAAQIBAP//AAAAAf//AP//AQAA/wAAAAABAAAAAAAAAP8BAAAAAQEAAAD/AAABAAAAAAABAAABAAEAAAIB/wEAAQAA/gAAQkFCpqekKikqAAAAAAAAAAAAAAAA+/3/lb36XJT42eT9Afz/Af4BAP///wD//v7/AQAAAAAALBwDAAD/AAABAAD/AAAA/wD/zczOAQAA/wAA/wEAAQAAAAAB/wH/Af//AP///wAAAAAB/wAAAAABAAABAP//AAEBAAEBAQABAQABAQAAAQAA/wAAAAEAAAACAf8A5eXm5+fnAQEBAAAAAAAAAAD/AQAAAP8B/wAAAQAB/wEA/wEAAQEBAQAA/wD/AQAAAAAAAAAA/wD/9/j3fX6A7+zqAAAAAP8BAP//AP8AQyMoAP7//gH+qtXPYa+k0uflAP8CAAAAUzf/mmD7FQgBAP8A//8AAP8A/wD/AP8AAAD/AP//AAD//wD+AAD//wAAAP///wEBAf8C2OcDb6UCV5n5yeL8AAD9AQH9/hYN/2A6AF4yABkJAAD9AAD+AAD/AAH/AAAAAAAAAAEAAAD/AP/+AAD+AP7/AP//AAD/AAD/AAH/AAD/AP8BAAD/AAABAAIAAAD/AAAAAAD+AP//AP8AAAAAAAD/AAD/AAH/AAH/AP4AAAEAAAH/AAD+AAH/AAEAAAD/AAEAAAAAAP8AAP/+AAAAAAEAAAH/AAH/AAD/AAH9AAH/AAAAAP/+AAAAAAD/AP8AAAH/AP//AAD/AAABAAH/AP8AAAH/AAAAAAH/AAH/AAIAAAEBAAAAAAD/AAH/AAD/AAD/AAL/AObpAM3UAAAAAAABAAAABwYJdHZ0FBQUAQAAAAD///8BAAAB/wH//wAAAQABAQH/AAABAAAAAf8A/wEA////AAH/AQEAAAABAAAAAAABAQAAAAEAAAD/AAACAQD/AAD//wAAAAABAP8BAQABAP8BAP//AgEBAQABAQIAAP8B/wABAQAB/wEA/wH//wAA/wAA//8AAP//AQAAAAAAAP4AAf8AAv8AAAD/AQEBAf4BAQAA//8BAAABAAAAAP8AAQEB//8BAAEA/gEAAAABAf8A/wAA/wIA/wABAAAAAAABAQEAAAEBAAD/AP8AAQAAAQAAAQAAAAAB/wEBAAD/AQEA/wABAQEBAAAAAAACAP7/AAEAAAD//wAA/wEBAQAAAAABAAAAAQAA/wEAAQAAAP/+AgAA/wAAAAD//gAA/wD+AAEA/////wD//////0hHRQICA/7+/ZeXl+Pj4gD/AAD//v////8A/wH/AAAA///+AP///////wAA//4A/wAA/wD/AP8A//3//v8A//8B/wD+/gD///8AAP8B//8AAP8A/wEAAf8A/wAAAP/+AP7/AAEAAP//AP8AAf8A///+/v8AAP///////////v/+AAAAAf//AP/+Af7+/////wD/AP4AAP///wEBAP8AAAD/AAAAAf8AAAH/AAD//wAAAAkJCQUFBQAA/gAAAP8B//7/AP7//wAA////AP//////AP7//v///v7////+/v/////+/v/+/v8A//////39//3////+/P79/f/+/v/+/v3+/f/+///9//7+///9/f39/v7+//3+/v////4A/v7+/v7+/f7+/v/+/f7+/v/+///+///9AP/+/v3//v/+AP/9/gD+/wD/////AAD//v/+/wAA////AAEA//8AAP/+AQD////+AAD+/gH///Xw8fz59wAAAFJSU0NFQ///AQH/AQD/AP//AAD/AP/+Af/+/wABAQD+/wAA/gAAAQD/AP4AAP8AAAD/Av8AAAH+AAAA/wH//wD/AP8A//4A/wAA/wD+AP4AAfT09gAAAAABAAAA/wAA/gD//f38/gEAAQABAAAAAQEA/wIBAf8AAP8AAAEB/gAA/wEAAP////8BAAD/AAEBAAIBAAD//wAAAQABAP//AQAAAP//AgD/AAIBAQAB/wD/AP8A/wEAAf8AAQAAAQAAAAD/AAD/AAEBAAABAf8AAf8AAQEAAP8AAP8B/wD/////AAEAAQAA//8AAAIAAAAAAQAA/wAAAAAAAQAAAP8A//8AAAAAAf8AAQAAAAAAAAEB/wEA/wABAP//AAEA/wAAAAMBAAAA/0VEQ6SmozIzMgIAAQAAAQAAAAAAAAEAALjU+kmN+LbO/v///gABAAD/AAEBAgD//wH/ACEWBAcEAQAA/wAA/wAAAQAAAMnLzP8A/wAA/wAAAAAAAAAB/wEAAP8BAAEA/wD/AP8BAQAB/wABAAD//wAAAf8AAAD/AP8AAAD/AP8AAAAAAAEAAAD//wAA/wEBAXp7flhZXsHExQEAAP8AAAAAAAAAAQAAAAEAAQABAAEAAAAAAf8A//8AAAAAAQAA/wD//gAAAAEAAaSjpq6srgAA/wAAAAAA/wAAAhsOE0EeJPb9+Z7Ox3q6ru328wD//gIB/mhFAZti/hcKAAD+AAH+AAH/AQD/AAEAAP8A/gAA////AAABAAAAAP///wD//gAA//r7/5jAAEqM+pXB+PL7+wAB/gEDAv81HwB1QwA+HgAD/gABAAAAAAAA/wAA/wAA/wAA/gAA/gAA/QAA/gAC/gAC/gAB/wABAAAB/wAB/wAAAAAB/gAC/gABAAAB/wAAAAABAAAA/wD/AAD/AAABAAABAAABAAAB/wAA/wAA/wAB/wAA/wAB/wAAAQD/AAAAAAACAAAAAAAA/wAA/gAA/wACAAAAAAAA/gAA/wD/AQABAQAA/wAC/wAAAAAB/gD//wAB/wABAQAD/wAAAAAA/gAA/wAC/wAAAQAAAAAAAAABAQAC/wABAAAB/wAC/gAAAAAC/wACAAACAADEzwDy9QAAAQAAAAEAAlVWVFRVVgABAQAAAAD/AAEBAAD/AAD/AAEA//8A//8AAgD/AAAA/wABAAD+/wEAAAH/Af8AAAAAAAEA/wAAAP8AAQD/AQAAAQAAAP8AAQH/AQEBAAEAAAAA/wABAAEA/wAAAf//AAAAAP//AAAB//8BAAABAAD//wIAAAEA/wD+AAEBAQAAAP8A/wAAAQEA//8AAP4AAAAA//8B/wAAAAAAAQEBAAEA//8AAAEAAAD/AAAAAP//AAL/AAEAAf8A/wAB/wD/AAEAAP8AAAAAAf8AAQAA//8AAf8AAAAAAAD/AP8A/wH//wH//gEAAAAAAAH//wD+AAAAAAD//wAAAAD/AAEAAQD/Af//////AP8A/wEAAP4AAQD/AP8BAAAAAQL/////////AAAA////AP///wD/AAAA/wD/AAA0NDM1NTMBAADa29uGhoja29oAAAD///4BAAD/AP7/AAAAAAAAAAH/AP///gD//wD/AP/+AP////8AAQH+/wD////+///+/wH+AP///wD+//7//f3+//7//v4AAP//AP////////8AAAAA////AAH/AAAA//8A////AP/+/gD/AP/+/v7//wD/Af8AAAH/AP8A/wAA////AAD//gEAAAD/AAAAAP////4AAAAAAAH/AAAUExQODg///wAAAAD+/QAAAAD/AP/+/gD/AP3//wD//////wD//v8AAP/+///+//3///3//v7//v3+/v79/v3//v7+/v/+//7+/v/+///+/v7+/P78/P3+/f/+/P7//f7+/P3//v7+/P0A/f7//f7+/f///v3+/v/+/f/+/f7+/v7+//7//v0A/v////8A//7///////8A//////7//////f///v///v7///////7+AP8B/wACAQH69vb79vUAAQExMzNxc24FBgf/AP//AQD///8A/wD/AAEAAf8AAQH+/wD/AQH+/wEA//4A/wACAAAAAQH+Af7////+AAD/AAD//wAAAAAA/wAAAAD/////AQAB//////4AAQAAAAAAAAAAAAASEhQSExL/AAEA/wD/AAAA/wD//wAA/wD//wAAAAH/AAD+AAABAQAA/wAAAQEA/wD//wAAAQABAf8CAAABAQAAAAIAAQABAQD//wAB/wD/Af8BAAAA//8B//8BAP8AAf8AAQH/AQH//wABAP8BAQABAAAAAAAAAAH//gAAAAEAAAEAAAH/AP8BAQD/AQAAAP4AAP8AAf4BAP8A/wEBAP8BAAAAAAAB/wAA/wAAAP///wD/AAAA//8B//8AAAEAAP//AAAAAQEBAQIwMDCYmZcnKSoAAAAAAAEAAP//AAAAAAHg6/xYl/R7p/r19f8A/wAA////AQEBAf8rHQUtHAUAAAAAAAAAAP4AAADT0tPl5eYAAAD//wEAAQEAAAIA/wABAf//AQEAAP///wAAAAEAAAAAAQH/Af8A/wAAAP8BAAAAAAAA/wD/Af8AAQAAAQH/AQDZ2dqzsrXEwcFRUVOkpKYA/gAAAP///wAAAf///////////wABAAAA/wEAAAAA//8A/wABAQIA/wDX19mDg4YAAAAAAQAAAP8AAAAAAP9MLi/p+vJntKiBwLX2+vsA/v8NC/+DWf+LV/sPBwAA//8A//8AAAAAAP7/Af//Af4AAAAAAf8BAf4A//8A/wABAAEA/wHZ6QBknwBto/zg8QAAAP8A/gIAHBP/ZTsAZjoAFwoAAP4AAf8AAAAAAgAAAf8AAQAA//8AAP8AAP8AAAAAAQAAAP4AAAAAAv8AAf8AAAAAAP8AAP8AAf8A//8AAf8AAP8A//8AAP8AAQAAAQAAAQAAAP8AAAAAAf8A//8AAf8AAP8AAAAAAf8AAAAAAQAAAv8AAP4AAP8AAP4AAgAAAQAAAQAA//8AAP8AAQEAAQAAAv0A//8AAAAA/wAAAQAAAQAAAf8AAf4AAf4A/wAAAP0AAf4AAAAAAAAAAv8AAP4AAf8A//8AAAAAAf8AAQAA/wAAAAAAAAAAAQAA5OgA0NgAAAAAAAAAAP8LCgpjZWMAAAD+//8A//8BAQD/AAABAQABAQH/AAEAAAEA//8AAQAAAAEAAP8BAgEAAQEBAP8A/wAAAP//AAEBAQAAAP8BAP8BAAAAAP8AAAD/Af8AAAH/AQD//wAA/wD/AAD/AQAAAAAAAAAAAP8BAAAA//8A/v8AAAD//wAAAAABAQAAAAAAAQABAAEAAP4AAQIBAQEAAAAB/wEBAAAAAQAAAP////8BAAEAAAD/AAH/AAAAAgAAAAH/AQD/AP8AAQAAAAEB//8AAf8BAQAAAAAA/wABAAIBAAEBAAD//wD/Af8A/wD/AgEAAAEAAAAA/wAAAQAAAQAAAQEAAQAAAQD/AAAAAP8AAf4A/wAAAQAA/wH//wAAAAAAAQEA//8BAQACAAAAAAAA/wD//gABAAAAAP/+AAAAAAAA////CAkHZGNgCAkJAgEAwMLEb3RyyczLAQEC/f7/AQEBAAAAAP///wD//wAA/wH//wD+//4AAP4A/v4B//3+AP7+//8A/wAB/wAA//0AAP7+AP8A/wAB//8A/wAA/v8AAP8AAAD//wD////+/wD/AP//AAD//////gAAAP8AAP////8A//8AAQD///7+///+/v///wAA////AP//AP/+AAD/AP//////AAD//wH/AP//AP//Dw8QFxUV/f/+/gD+AAD//v7/AP8A/wD///8A//7///7+//7+/v/+/f39/wAA/v8A//8A/v///v4A/f/+/////fz++/v9/f3////9/fv9/f3+/v79//7//v39/v7+/v7+//7+/v3+//7+//z+//7/AP////3///3+AP7+AP7/AP3+AP/+//////8A/v///f//AP///v7/////AP8BAP//AAAA//////////3/AAD/Af//AP//+vn4+PTyAAD/FhYVe3p3EhISAAH/Af8B/v7/AAAAAQAAAP///gAAAAAAAQAA///+/wAA//8A/wEA//8AAP//AAEBAAABAP//AP8AAAAA/gAA/wAA//8A/v8A/v/+/wAB9fX0AP8AAAAAAAD/AAEAExMUDw8OAQD/AQEAAQAAAAEAAQAAAAEAAQAAAAAAAAAAAf///wAAAAEBAQD/AQAAAQAAAP8A/wAA//8AAP8BAAAAAP////8AAAAAAAD/Af8BAP8BAAAAAAAA/wAAAP8B///+Af//AQEAAP8AAP//AAEB////AQEAAQEAAAAB/wD/AAD/AAAB//8AAAAA/wABAAABAAAB/wAAAAH/AAAB/wEA/////wD//wH/AP8BAQAA/wABAAEBAAIAAP//AQEBAQAAAAAAAAEAAAAANDIzr7GtQ0REAAAAAAABAAABAAAAAQAA8/j/h7f2XZf12OX+AP//AP8AAP8CBQMBNyMFAAAAAAAAAAAAAAAA5+fnxcTHAAABAQH/AAAAAf8AAAAB//8BAAAA/wABAQD/AP//AAD/AQAAAQABAAAA/wEB////AAEAAAAAAAAB/wAAAAD/Af8B4d/h8O/tAAAA7+ztZmdriIuO+/r8AAEAAP8BAAEBAAEBAQH//wAAAAAAAAAAAAEAAQEB////9/j4goOG5eXlAAD/AAAAAAECAAD/Ew4QExIOYa2mu9nU/Pz8AP//GRb8p3D/eEr8CwYBAQD/AAD//wIAAP8A/wAAAAD/Af8AAAD+//7/AAAAAAEAAAAA/gD+t9MAS47/pMf9/AD/AQH9AAP/AD0jAHdAAD0gAAkDAAIAAAD/AP8BAAD+AP/+AP//AAD+AAH/AAH/AAD+AAD/AAH9AP//AAD/AAD/AP7/AP//AP//AAH/AP4AAAD/AAAAAAH/AAEAAAD/AP//AAH/AAH/AAAAAAD/AAD/AAEAAP8BAAIAAAD/AAABAAD/AAD+AAAAAAAAAAH/AAAAAAEAAAEAAAEAAAD/AAH/AAD/AAD/AAAAAAEAAAABAAP/AAD/AP//AAIBAAABAAAAAAEAAAABAAAAAAH/AAAAAP//AAEAAAAAAAEAAAAAAAEAAAH/AAIAAQH/AQEAAAABAM3WAPr7AAD/AAD/AAABR0lIPz49AAAAAgEAAAEA/wAAAP/+AP//////AQAAAAD/AAEA////AQAA//8B///+AP8AAAABAQAAAAH/AQEA/wD/AAAA/wEA/gH+AQAAAP//AQEA//7/AP8AAQEAAP8A/wD/AAEAAAAB/wD+AAAAAAAAAgAB/wD/AAABAAAAAAEBAAAAAAAAAAABAAAAAQAC/wH/AP/+AQEAAAEAAP8AAAAAAAAAAAH//gAAAAD/AAD/AAAAAf8BAgIA//4AAAEAAQABAAD//wEBAf8BAP4AAP//AAEA/wD//wEAAAABAQEAAAABAAAAAP8AAAAAAP8AAAEAAAAAAAD/AP//AAEBAQAAAQAAAAAAAP8BAAEAAP8BAQAAAAAAAQABAAD/AAD//wAAABaE6XsCAP///wH/AQABAQAAAAAAAAAA/////wD/AQAAAP//R0dHOjw7/wECAwQE7e7ykpubr7i2+fv6AAD/AP//AAAAAP//AP8A//8A//8A/v///v//AAH//gD//wD//v/+/v7//v/+/wD+/gD//v4A/wD/AAD///7//////wD+//7/AP7/AP8BAP7//f79/wAA/wAB//////7/AQAAAAD+AQD////+///+AAAAAP8A/wD+Af8A/wAA/wL//////wEA/wH//wAB//7//v/+6eno09TS9fT0//z8/fz9/v/+/gD+/v7+/////v///wD+/v///v/+/v////7+/v39//7//f7+//7//v79//3//fz+/gD+///9//7+/f3////9//7+/f3+/v79//7+/v7+/v39/v7+/v79/v///v/+//79//39/v79//7//v7+/v79/gH+/v7+//7//v/+AP3/Af8B/wD+AAD/AP/+////AP8A/v7/AAD/AP8AAP8A/vz+/v7//f36+vPzAP79CAkIeHd3LCwrAAAAAAAA/wH/AQEB/////gAAAAAAAAAAAAAAAAD/AAAAAQD//wEAAP8A/gAA//8AAP///wD/AAEA/wH///8AAP///wD/AAABAAABAAAB////9fb2AAAAAP//AAAAAP//BQUEBQUH/v8AAAAB//8AAAAB/v8AAP8AAP8A//8AAQAAAAD/AAAAAP4A//8B/wAAAAEAAAAAAQAAAAEAAP//AP//AAEBAAAB/wAAAAABAAAAAQH//gAA/gAAAAEAAAEBAQACAAAB/v///wEAAAAA///+AQAAAAD//wAAAAD/AQAAAAAAAf8AAAD/AP8AAQEAAQEAAAAAAAEA//8A/wAAAf8BAQEBAAAAAP7//wEA/gAAAP//AP//AAD//wEA/wAA//8AAQAAAAD/AAAAAAEAJiUlp6ekd3l3DAwMAAD/AAAA/wD/AAD/AAEBsdH8Ror2m7/4/////gD//gAAQCoFAAD/AAD/AAD/AAAAAAAAxcjH/wD/AAD/AQAA/wEAAQH/AAABAAAAAQD/AAEBAQEB//8A/wAAAAD/AAEAAgD/AAEBAAAAAAAAAAAAAAAAAAAB/wEA1dfWAAABAAAAAAAB9/b2fX1+ZGRq3dzfAAEAAf/+/wAA/wABAAAA/wEAAAABAQAA/gAA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AP8AAAAAAAIAAAAAAAEA//8AAf//AAEA/wAA//8AAgAAAAEAAf//AAAA/v8BAAEAAQEAAAAAAAD/AP8CAAH+AP8AAQAAAP///gABAQD/AP8A//8BAAD/AAEAAAABAAAAAAAAAAD/AAABAQABAP//AAABAAEA/wABAQH/AAABAAIBAf8A/wEAAP8AAAD/AAAAAP8AAAH///8CAQIA//8BAAH/AAEBAP/////+AP8BAQEBAgH///8A/wAAAQEBAAAAAAAA////AAAB/wACAAAAAQD//gEBAf//AAABAAH///8BAQAAAQH//v8AAQAEAP//AAEA//8AAQD+9vj8hYyMtrm6DQ0OChANAgUE/wIBAQABAQABAAEAAQAB/wP/Av8BAQEB/wEAAf4AAAEAAP8A/v8AxMnJ4eLkVE9NNC4vAAAA/////wEBAQD//v//AgAB//8AAAEBAAL/AP/+/wAB/wABAAD/AQD+AP4BAAH/AP8BAAAAAQD///8BAAAAAAD//wAAAf//5uXmycfH0dDP7u3sAAABAf8A/wH/FhcYLS8uJScpIyMkCwsLAAAA/////wABAP8A//8AAP8AAAAA/v8AAAD/BwcJNTQ3NTQ3V1foxcXGw8TFy8vL8/Ly/f79////AAIBAgABAgQE/wICAgEBAAAA/f7+AP3//v7+/fz//f0AAf7+//7+/wAAAf8A///+/wAAAAEA/wAAAf8A/wAAAAL/AAAB//4A/wABAQEBAP/+AP8AAAABAQEC////////AAIAAAD/Af8B/wEAAP8A/wAAAf8B/gD+///+//37AAAAAwUEc3V2PDw9AP8A/wEA/wH/AgEBAAAB//8BAAEAAQAAAAAA/gAAAAABAP8A/wEBAP///wAAAQAAAAD+//8AAP8CAAH//v8CAAD+AP8AAAABAAH///8A/wAA/wD//wAAAAABAAD/AQED+vr7/wD/AAEBAP//AAACGhgbAAABAAD/AQEAAAD/AAACAAEA/wD/AP8A/wAAAQABAAABAAD/AAABAQABAQEA/wEA/wABAQEAAAD///8AAQD/AP8BAQEAAAD/AAABAQEA////Af8AAAAAAAEAAAEAAP8AAAD/AQAA//8A/wH/AAEAAf4AAQIAAP8A//8A/wIAAQD/Af8AAAH/AP8B/wABAQD/AAABAQD//wABAAEA////Af8BAAD/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AAD+AAECAAAAAAH/AAAAAP8BAP//AAEAAAD/AP8BAAD/AAABAAAAAAEAAAAAAP8AAAAAAAABAP8AAAEAAAABABYM/00MAEIfAcvnAMjn/9HmAf8AAAD/AAAA/wAAAAD/09TSVldYcHFxdXZxDQsNAAAA/wD/AAEC//8AAf//AAEBAP8AAAD/AAACAAEAAP//AAAAAQEAAAAAAP8AAP8BAQIAAP8A/wAAAQAAAAEA/wAAAP8BAf8AAAD+AQABAAEAAAD/Af8AAAAAAAAAAAAA////AQEA//8AAAD/AAABAAD/AP8AAAACAQH/AAAAAQABAAD/AAD/AAABAAAAAAH+AAACAAD/////AAEBAgAABAAAAQAA/wD+/////v0BAP8A/QAAAAAFAQABAAD8AQEAAP7/AAD//wEEAAD7AP/+//4EAAL///7//wABAv8F/wD9AAEAAP///wIDAgH+AP8AAP8CAQD+/QECAgL/AQABAf/+/wABAf//APLs7vv5+QwKCiAgIf8A/wD/Af8A/wD/AAEBAP8AAAAA//8A/gAAAf8AAAD/AAAB//7+AAEB/gAAAP7//wEAAf/+AAAAAAAB//8AAAEAAP8AAP8A///+AAAA/wD/AP8AAf4AAAD//wEAAP/+AAAA/gEAAf4A//4BAQH//gAAAf7+/gD/AgEBAP3//wD///8AAf8AAf////8AAf7//gEAAP7//gEAAf////8B//////8AAQAA//8A///+//8AAAD/AQD///8AAP8AAP7+AQAA////AAAB/gD/AgEBAf4A/i8xNgsND/Xy8AAAAfPz8P/+AAEC//////4AAgEAAAAAAQH///8C/gD/AQECAAAA/gD/AQAAAP8BAf4A/wEAAQP/Af3+/wEB/wP///8AAQECAQAAAf////7//wAAAP8AAAAAAP//AAAB/wAAAP4B///+AAAAAf7//wD/AP//AAAAAP8AAP4A/v8A//7+APb09NfV0gD//wAAAAABARQXAI6T/drV/qipA7KuAPz9//Ly9Gppbff4+FxbWwAA/wEBAAAA//8BAQH/AQD/AAABAf//AAIAAP8B/wD/AAABAP4A/wEAAAEAAQEA//8AAAEAAf//AAEAAP//AAABAf8AAAH///8AAAEBAf8B/gEAAQAB/gH/AQAAAP8AAAAAAP8A/wEBAQAAAAH/AQAAAAAAAf4A/wEAAQEBAP//AAEBAAD//gD/AQIAAQAA/wD//wAA/wEAAQABAQD///8A/wD+AQEC/wD/AQAA/gAAAQAAAAD/AAABAP//AQEAAAEBAAACAQAAAP8A/wD/AAABAf///wL/Af8AAP8BAAEBAAAAAf8A/wD//wEAAQAA//8AAAEAAAECAf///wAA/wD/AAEB/wD/AAEBAAEAAP8AAP8AAQAAAAEBAP8A/wEAAQD/AAABAAD/AQABAP8B/wH/AAAAAAABAAEAAAD//wIBAfv7/IKAhKKiogAA/wAAAQAAAAD//hUXBJaK+ici///+AAEBAQABAgD/AgEAAv/+AAAAAAAA/gEA//8BAAD//QEAAAD+//8BAP8B////AP//AAAAAP7+/wAAAf7///8AAAD/AP4AALC4C/T0BAcOBAFZHvQvDQD9/wACAQAA/wABAQEA/wAAAP8AAQAA/wEBAf///gACAgD/AAAB/wD/AAD//wABAAD/AAABAAD/AAABAQAA/wD/AAAAAQAB/gD/AQAAAQAAAQAB/gD/AQD//wABAQD/AAAB/wAAAAAAAAABAQD//gABAQAA/wAAAQAAAAABAAAA/wAAAAAAAQD5/AG03P+y1wD8/QAA/wAA/wIA/wAAAf8uFwBSJP8mEQAAAQD//gACAQD//wAAAAAAAQAAAAABAP8CAAAA/wD/AAAAAAEA//8AAQAAAAAA/wD/AAAA/wABAAABAAABAQD+AAAAAAAAAAAA/wABAAABAAD/AAAA/wAAAAAAAAAAAAACAAD+/wAAAAAC/wD/AAAA/wAAAAAAAAAAAAAA/wAAAQAB/gD/AAAAAgAA/wAAAAAAAQD/AAAB/gAAAQD/AQAAAAAAAAAAAQAAAAAAAAABAAABAQAAAAAAAAAAAAAAAQAA/wAB/wAAAAAAAQAA/gAAAAAAAAAAAQALBf9AHgBAHwHL5v+v2QDe7gEAAAAAAAAAAf8AAPP084ODgs/Nzo+RjiIjIgIBAf8AAAEA/wABAAAAAQD/AAACAAD//wEAAAABAAAAAP8AAAEAAAABAf8A/wD/AAAAAQD//wAA/wAAAAABAAEA////AQABAQAA/wD/AQAAAAAAAAEC/wAAAAIBAf4A//8AAAIAAf8AAAAAAAAA//8AAQEBAP/+AAABAAAA/wAAAAAAAgAB/wEAAP8AAQEA/wAAAAAAAQEAAP//AAQBAP//AAAAAQH/AAH//gAB/P39AQAA/wABAQUAAf7+/QAA/wH//gD//wEDA///AAP//wD/A/4BAgICAwT++/8AAgAB/v4DBAL9AP//AgADAAAB/v//AwIB////AQMBAf8AAQECAgD8+vr18vQAAAAkJScfHh7/////AP8B/gD/AQEA/wD+////AQAB/wEBAP//AAH/AP8A/v8AAAD/AAD+/wEA/wD//wAAAAD/AP///wAA//8BAP//AAD/AQAA/wEAAQD//gAAAf////8AAAD+AAACAQD//gD/AP7+Af8A///+//8AAQAAAAH/Af7//gEBAP//AP//AP8A/gD/AP8AAAH/////AP///wD/AAD/AAD//v//AAD///8AAAAAAP7/AAH///8AAAH//wD/AP7/AAD/AP8A/wD/AAEB/gH/AP8AAAAA/wAWGhknKSvOycUAAP/n5ub/Af/+/wEBAAH/AP//AAECAP8AAAAA/wABAf//AAH//wD+/wEBAgABAAAA/gABAgD/Af8AAAAB/gD+AgABAAAA/v8AAAAAAAD/AAD/AP8CAQH+//8AAgD//v///wAAAAD//wD+//7//wD+/wD////+/v/+////AAD+/gEA///Pzczq5ucAAAEAAAAA/v4kJgMFAfcqLQGFLQAsKgOQjgLx8gLs7e1tbHAGBwZXVFX/AP8AAAIB//8AAAAAAf////8BAQH//wAA/wAAAAABAQEBAP8A//8AAQEBAAH///4AAAEAAAD+AAACAP//AAD/AAABAAABAAAAAP8BAAD+/wABAAEAAAH/Af8A/wAAAAABAAIA////AAEBAAAAAP8AAAABAAD//wABAAAB/wD/AAAAAAABAQAA////AQABAAABAAH//wD//wAB/wEBAQAAAgD//wABAP8AAAEBAf//AAEAAQEA//4AAAAAAAAAAP8A/wABAQABAP//AQH//v4BAQH/AP8A/wEBAQAA/wAAAAACAQH/AAEBAP//AAECAP//AAEA//8BAAAAAQEA//8A/wEAAP8AAQD//wABAAAAAQD//wAAAAAAAAAAAP8AAAH/AP8BAQEAAP8B/wD+AQABAP8AAAEAAAAAAQD6+/yEhYePkpIAAP8AAAAAAAEAAAEaGwOck/s2Mv8AAAABAAL/AAIB/wP//gH/AQIAAAD/AP///wIAAQAAAP4AAAH//wAAAP//AP8A/wH//v//AAAAAQD/AAH9/gH/AAH//wD+/wEBAQDQ2AYBAgEAHw34LA4A//wAAgMCAP//AAD/AP8BAQEA//8AAAAAAAD//v8AAAEAAf4A/wIAAAAAAP8AAAEA/wAAAAAAAAAAAQAAAAAAAQEAAP8AAAAA/wAAAQAA//8AAP8AAAAAAAAAAAAA/wAA/wAAAQEA/wAAAv8A/gAAAAAAAf8AAAEB/gD/AAAAAAABAQD/AAEA8PgAotYAyeMBAAH/AAEBAAD/AP7+Gg4BTSP/NxgBBwMA/v4AAQEAAf8A/gAAAQAAAQEAAAAA/wAA/wAAAP8AAAEAAf8A/wH///8AAQAAAAAA/wAAAQEAAP8AAAEAAP8A//8BAQD//wAAAgAA/wEA/wAA/wAAAP4AAAEAAf8A/wEAAAEA/v8AAQAAAAAA/v8AAQAAAAEAAAAAAP4AAAAA/wEAAf8AAQEAAAEA//8AAf8AAAIAAP8AAQEAAAAAAP8AAQAA/wAAAQEAAAAA//8AAQEAAf8AAAEAAP8AAQEA/gEAAf8AAAEA//8AAAAAAQAAAAEAAAAAAP8A/wAAAAAAAQAAAQH/NBsAKRQBsNv/vN0A+PsAAAAAAAEAAP8AAAC0trXs7O2foZ0oJyYBAQH/AAAA/wAAAf8AAQEAAAAAAAAAAAAAAAABAQH///8AAP8BAf///wABAQL+/v8BAgEA/wD//wEAAP7/AAEAAf8B/wEAAQH///8AAQEBAAD//gEAAQD/Af8B/wD/AAEAAP8AAAAAAAAAAAEAAQAAAP8BAAD/AAAAAAACAAD/AP8AAAD///8AAQEAAAD//wABAQD/AAAAAAACAP8BAAACAP8BAP8AAP8A/f3+/fv9/f38/fn7/fv8//v9/fz9AP39/vz8/fz8/vv8/vz8/f39//7+/fz7/v38/v38//3++/z9/vz9/fz8/fv8/f79/vz+//3+/v79/f79//7+/v7++PX2+/v7/v7/HR0b/wD//f//AP////8AAP/+/gD+AP//AP///gD//v///v/+//8A/v///v////4AAP/+AP8A//7//v7///4AAP8AAP8A/wAA/QAB//4A/v////7//wD//v/+AAD//v8A/////f7+/QD//gAA//8A/////wAA//////7///4AAP/+/f///v////4A/gAA/wAA/QD+//////4A/wAA//7+//3//v////7//////v7//v8B//8A//8A/////v/9/v4A//7///8A/v8AAP///wD+AP/////+//8AAAD+GRobAAAAAAAB5uXlAQAA/////wH//wAAAAD///8A//8A/wAA//4A//7/AP4A/wH///4A///+/wIA/v//////AP///wABAP8A//7///8A/gD//wD//wAAAAAA/v8A/wD+//7//v8AAP8A/v7//f///v4A/v7+///+/v///QD+/gAA/v7//////wAA2tjWAAEAAAEAAAAAAAABJyT9/v4DAP0A/f4AWVr9i4v7FRUAAP8A8vLzZ2VrsLCy//8AAP//AAEB/wD//v8AAAAAAP8BAAAAAAAAAQAAAP//AP8A/wACAP///wD/AAEBAAH/AAABAQEAAAEAAP8AAAAA/gAB/wAB/v7///8BAQAAAAAB/wEA//8AAAAAAAAA/wH/AAEAAgEAAAD/AAAAAQAAAAH/AQEAAAAB/wIAAgABAQABAP4BAQAAAf8AAP8BAP8AAAAAAgAA/wH//wAAAP8AAQAAAAEBAQAB/gABAP8A//7/AAACAAEAAAEB//8BAAAA//8A//8BAAAAAAEC/wAAAAAA/wH/AAH/AP//AQAAAP7/AQD//wAAAQD///8AAAAA/wAAAAEAAP/+AQEBAAEAAAABAAABAAAA/wAA////AAAA/wD/AAABAAAAAAH//wAB//8A//8AAAEBAAABAQABAAAAAAAA9fX2bm5xhIaH/Pv6AAABAAAAAAAAEhL/lYv/SUH/AP8CAP8C//8EAP8E//4CAAAD/wAE/wECAQAEAAEDAP8CAQABAAACAQABAAAC/wAB////AAAAAAAB//4B//8AAAAB/////f///P4A/P0C+fcCAQEC/voAAgH/AQAC/wH//wD//wAAAf8BAP///wABAQIBAAAAAAABAAEAAAABAAD/AAD/AAABAAH/AAIAAAH/AAH/AAD/AP//AAAAAP8BAP//AAEAAAD/AAAAAAD/AP//AP/+AAAAAAD/AQAAAAD/AAH/AP4AAAD/AAD/AP8AAAAA/wL/AAEAAAH//wD/AO/3AJPNAsnj/wAB/wD/AAD/AAAAATQaAHU0/z4bAAcC/wD/AAEAAAH/AP4BAAEAAP8AAAD/AP//AAD/AAD/AAECAAD/AP8AAAD+AAABAP//AAAAAAH/AP/+AAD/AAD/AAEAAAAB//8AAAD/AP4AAAD/AP//AAAAAAABAAABAP8AAAABAAEAAAEAAAAAAAAAAAAAAP8AAAD/AP//AAEAAAABAAH/AAAAAP8AAP//AAD/AP8BAP/+AP8AAAAAAAAAAP8BAP8AAAAAAAD/AAD+AAEBAAAAAQAAAP/+AP8AAP//AAH9AAAAAAD+AAAAAAAAAAH/AAD/AAD+AAABAAD/AAD/AP//AAD+AAH+AAwF/1srAHM3ACYVAQD/AAD/AAAAAAAAAAD/yMrIWFhczc3O/wD/AAAAAQEAAQAAAAD/AP/+AAAAAP//AAD/////Af8B/wEB//8BAQEAAP//AQEAAAD//wAAAAH/AQACAQD/AQAB/wEAAAEBAgIBAQD//wEAAQEAAQD/AAAA/wD/AAAA/wAAAAAAAAD//wAAAf8BAP8AAAEAAAAAAAAA/wD/AP8AAAAAAQABAP8AAAABAAD/AAD/AAAAAAAAAv8AAAD//wABAAEBAAD+/wEAAf/8/f36/f38/f35+/z8/AD+/f39/f/9/v77/v78/f78/f78/vz7/AD9///8/v78/f39/P/8/f38/P77/f79/v38/f38/P39/f79/v7///7//v79/vn09v37+gD+/goJCv7//wH/AP7+AP4A/v//AP/9//7//////wD///7+AP////3+/f////////0A//7/AP8A//4A//8A//8AAP7+AP7/AP3+/wD+///+/wAA//4AAP4AAP4AAf4A/////v8AAP4A///////+///9//////7+/wD/AP7///4A/////////v7/Af7///7/AP/+//79AP4AAP7///3+/v3/AP0B////AP8AAP7+AP8A//7+/v3+/v7+//4A/v//AP8A//7/AP//AAAA//7/AP7/AP4A/wAAAAAB/v4A/xkbGwAAAQAA/vXz8fn4+v8A//7//wAB////AP////7/AP7/AAABAP8BAP4A/v///wAA/v8AAQD+/gAAAP8A////AP4AAP7/AP8AAP4A//7/Af////8A////AP7//wD+AQD/AP8A//3///4A//8A//4A//4A//8BAP0A/wD/Af7///8AAP3//fX19M7IyAD/AAD//wAAAAAAABkZBAD/AP7/AP//Af/+AD9BAICA+hET/wD/APLx821tcsC/wv8AAP8AAAEAAAEAAAH/AQAA/wABAQAAAP8AAQEAAAAAAAEA/wABAQH/AQD/AAAAAgAA////AP//AQAAAAH/AAAAAP8A/wEAAgAAAQABAP8AAP/+/wEA/wABAAAAAAEAAAEAAf8A/v8AAAAA//8AAAH/AAAAAAAAAAH/Af4A//8AAP8BAAAAAP8AAQAA/wAA/wABAP8B/wEBAAEBAAEAAAAAAAD//wAA/wD/AAABAAEA/wAA/wEAAAD//wEBAAAAAAABAAEAAQD+/wEA/wEAAP8A/wEAAP/9AQAB//8AAP8CAP8BAQABAf8AAQABAAH//wEAAAAAAAABAf8A/wAA/wEB/wD//wAB/wABAAIBAAIA/wEAAQD//wABAQD/AQEAAAABAAAAAP8AAAAAAP8AAAAAAPb29m1vcJmbmv/+/gABAQAC/wAAAQ0P/5KL/k9J/f8AAv8BAf8AAwABAgAAAwABBP4ABAD/AgD/A///Af//A///Av8AAv8AAv4AAf4A/wEAAf8AAv7/Af8AAP7///8AAf7//v3/Af//Af4AAP0AARweAgACBP7q+gDu/P4AAQH/AP8AAQH//wAA/wAAAAAA//8A/wAB/wAA/wAA/wD//wABAAABAAAAAAABAQAA/wAB/wD//wD//wAB/gAA/wAA/QAA/wD/AAD/AAD//wAAAAAAAAADAAAA/wAA//8B/wAA/wAA/wAB/wAA/wAAAAAB/wD//wD/AQAA/wAAAADz+gCh1ADY7f4AAgAAAAIAAQMA/wE+HP9mLAAWCQD//gABAAABAAAB/wAAAQABAAD/AAABAAD+AAD/AAAA/wD//wD+/QAAAAABAAACAQABAAAAAAAA/gD/AAAA/wAAAAAAAAD+AAD//gABAAAAAQAAAAD//wAAAAAA/wAAAAAA/wABAQAA/wD//gAAAAABAAABAAABAAABAAAAAAACAAD/AAAAAAAA/wD//wD//wAB/wAAAAAB/wAA/wAB/wAA/wD//wAAAAABAAABAAABAAACAQAA/wAA//8AAAABAAAA/wAAAAABAgAB/wAAAAAA/wABAAD//wAAAAD/AQAA/wABAQAAAAAA/wD+/wD//wAB/wAB/wAtFwB7O/9YLwAIBAAAAAAA/wAA/wAAANHRz1pZXsrKzAAAAQABAQAAAAAAAAABAgAAAQABAgAAAgAAAP8B/wH/AAEBAP//AQAA/wABAAD/AAEAAAEAAAEA/wAAAQABAAEAAAD/////AQAAAgH/AAEA//8AAAD+AAABAQEA/wAAAf8BAAAAAgEBAf8A/gD///8AAAEAAQEAAAD/AgABAP8AAQABAAEBAP8A/wACAAAAAQEAAAAAAQIAAQEAAAAA/wD/AAABAQAA/wD/AAH+/QD8+/z8+/39+vz9+vz+/Pz+/fz//v3+/f39/Pz++/z/+/37+/z9/P39/Pz++/z9/Pz+/P7+/v38/Pv+/f7+/f3+/f39/fz//P3+/P39/f36+vr//wD/AAAeHh7//wD+/wD+AP//AAD+//7+AAD+/////v7///8AAf/+AP8A/wAAAAH//wD//v7//v79////AAD+AP/+//4A//3///7///4A//7+AP/+///+/v////8A/v7+/v//AAD//v3//wD9//7/AAD/AP/+/wAAAAD9//7+AP7+/v7+AP///wD//f7//////v39//8A///9/f3+//8B/wD/AP4A/wD////+/v/////+/f///wAA//8AAP/9/QD9/v/+////AP///v/+///////+/v/+/wD9//7+/wAA/wAdHiIAAQEAAADq6Ofc29kA//8B/wH+/QD//wD/AQEAAAAA///+/v//AP//AAH+/v///wD/AAD+AAD9AP7//v7+/v7//v4AAP//AP//AAAA//7/AAH//v//////AP7+AP7+//8A/wD//////wD+/wD///8A/gH8//8A/v/+AP8A/wD+/v8AAADd29vd29cAAP4AAAIAAQIAAv8tLP7//wH+/wH+/gD9/wH//wFERAB5d/0GB/0AAP/l5eRiY2XKys4AAAD/AP8BAAAAAv8AAQD/AP//AQAAAf//AAAAAQD/Af8B//8AAAABAQAAAP8A//8BAAEAAf//AAAA/wEBAP8BAAEAAgD/AP4A/wABAP8CAQAAAQIA/wAA/wAB/wD///7//wEBAf//AQH/AAD/AAEBAAAAAP8AAAABAAEBAQAB//8AAQABAP8BAQAAAAIA/wAA/wH//wAA/wD/AQABAAAAAQD+AAACAAD//wABAQIA/wD//wD//wH///8AAAAA/wD+AP//AAEAAAAA/wAA/wEAAAABAgAAAQEAAf8A/wD///8B/wAAAAAAAQD/AAAAAAEA/wEA/wAAAAD//wH/AAAAAAAAAAH/AAD//wD/AAABAAAAAQAAAP8AAf8AAAABAAD/AAAA//8A//8A/wDZ2dpZW16gnaEA/v8A/v0A//8A/wASEwCVjf5bVP8B/wAAAAEAAAIB/wQAAAP/AQP/AQMBAAEAAAAA/wEAAQABAQIAAAD//wABAAAAAAEAAAH//wH/AAAAAAH//wH/AAH/AP//AAL//wH9/wD+/wD8AP81NPcDCAP/9wH/0fMAAP//AAAB////AQAAAAD/AP8A//8A//4BAAEAAP8AAAAAAf8A//8A//8AAP8A/wAA/wAA/wEA//8AAAAA/wAAAAAAAQIAAAAA//8AAP8AAQAAAAAAAQEA/wAAAf8AAAAAAAAAAP8AAP8AAP8AAAEAAf8AAAAAAgAAAf4AAAEA9vsAo9cBy+cBAAAAAP4BAAABDAX/YSv+YigACwQAAf8AAf8AAP4A//8A/wEAAP8A//8A//8A//8AAAAAAAAA/wAAAAAAAAAA//8A/gAA/gAA//8AAP8A/wEAAQAAAQEA//8A/wABAAAAAAEAAAAAAAEAAAAAAAEAAAAA/wAAAAAAAP8A/wAA/wAAAAEAAAAA/wAA/v8AAAAAAQAAAAEA/wAAAAAA/wAAAAIAAQAAAAAA/wAAAQEAAAAAAAEA/wAA//8AAgAAAAAAAP8AAP4A/wAA//8AAAAAAQAAAAEAAAAAAAAAAAAA//8A/wAAAf8AAP8A//8AAAEAAP8AAQAA//8A//4AAf8AAAEAAP8AAP8A/wAAAP8AAP8BCQQAUicAdj0AHA8AAAAAAAEBAP4AAP/b3NliXmPLy8r/////AAEBAQAA/v8BAAAAAP8AAP8AAAAAAAAA/wH//wEAAQH/AAH/AP8AAQABAAAAAAAAAAEAAQAA/wD/AAAAAAAAAP8AAP//AAH+AAABAAAAAQEB/gAAAAH/AP8A/wD///4A//8AAAIAAQEBAAEA//8AAQAAAf//AAAB//8AAAD/AAABAAAB/gL/AAH/AAAAAP8CAAD/AAEBAAAAAP////8AAP8AAAABAAAB//7//fv8/Pr7/fr7/vv9//39/v7///3+//39/vz9/f79//79/fz9/v39/v39/vz9/v39/vz9//7+/vz7/v39/f39/v39/f78/f3+//7++ff3AAD/AQD+EhMS/f7////+AAD//v7//gAA//////8A/gAB/v4A/v7///4A//8A/v3///////8A/wAA//////////7//v///f8A//8A/v8A/f8A//7///4AAP4A/v///wAA/wAB/v/+//8B/v//AP///f/9/v///v/+/f7///4AAP4AAAAA/v///v/+/f///v79/v///v///f//AAD//wAA/f////8A/f///v4A/gD//////wH//wAA//8A/gAAAP/+/wEA//8A//4A/gD//v3//////wAA//7+//8A/v8A/v8AIiYnFhcWAAAB+/r45eTh/wAB/f7//wAA/v////z+/v7+/v///QD//v4A/v8A/wAA/f////7+//8AAf8AAAAAAAEBAAEA/wD///7/AP8A/gH/AP7+/wEA/gD///8C/wAA/v///v/+/wD//v8AAP7+/v7//v8A//4A/f4A//7//v7+/v////4A1tDPAP//AAABAAD/AP//ExQCGBz/////AP8AAP///f4A/Pz/AAEBUFABYF0AAAD+AAD+4eDhc3N27uztAAAAAQH/AP8AAP8AAAAAAQAAAP//AAAAAP8BAQAC/wAB/wH//wAAAP//AAEBAAAAAQAAAQD/AQL//wAAAAH/AAD/AQEBAAD//wAA/wAA//8A/wD/AAH//wEAAAEBAAAAAQACAQAAAQAAAAAA////AAEAAAH/AAD/AP8AAAH//wABAAEB//8A/wAAAQAAAP//AQAA/wEA//4A/wEBAf8AAQAA/v8AAQAA/wD/AAAAAQABAAD/AAEBAAAA/wEBAgEAAQABAAAAAQEAAgIA/wAAAAEA//8AAP4AAAEAAQEB/wEA/wD/AP//AAAAAAH/AAEAAAAB//8AAQD/////AQAAAP//Af//AAABAAAAAAH/AQABAAABAAAAAAAA/wAAAgEBAAEBAgEAsbOzTExRs7CzAAABAP//AAABAAAADAwAmpH/XVUBAP4BAAEBAf8DAAAF/wEF//4FAP8E/v8B/wACAAAB/wEB/wAC/v8AAAAB//8B/gAB/gAAAP8B/gAA//8A/wH/AAD/AAAA/f4B/////v8A//8B/v8B//3+Rj/0WlT2/wH/AMDxAef5AAEA/wIAAAL/AAH/AAAAAQEBAv8C/wD/AAAAAAD/AAEBAAIAAAABAAH/AAH+AAD/AAEAAAICAAH/AAH/AAD+AP//AAAAAAIAAAEAAAH/AAH/AP7+AAD/AP8BAAEAAAH+AAD/AAEAAP8BAAH/AAABAAAAAP8AAAAAAPr9AKrZAcTkAAAA/wAAAAAAABUK/28x/0MdAAUDAAD/AAAAAAABAP4CAAD/AAABAP4AAAAAAAAAAAD/AAD/AAD+AAABAAEAAAEAAAAAAAEAAAD/AAEAAAEBAAAAAAD/AQAAAAEAAf//AAAAAAH/Af8AAAD/AP8AAAABAAH/AAIAAAEAAAABAAAAAAEAAAAAAAAAAAAAAAICAAAAAP//AAEAAAAAAP8AAAH+AAD/AQAAAAEAAAEAAAH/AAEAAP//AAD/AAAAAP4AAAAAAAAAAAACAP8AAP8AAAEAAP8AAAD/AP8BAAAAAAD/AAAAAP//AP4AAAEAAAD/AAD+AP8BAAD/AAEBAAAAAP8AAAD/AAABAAEBAP//AAAAAP////3/AP//ACoUAHQ5ACoYAAAB/wACAAAB/wAB1tnXYmJm2NjZAAH//gAAAAIA/wEAAAEB/wABAQEAAAABAAH/AAD/AAD/AAAAAf8BAP8AAAAAAAD//wD/AP8AAAAAAAABAAAB/wAA/wAAAAAAAP8A/wAAAAD/AAIAAAD/AQAAAAAAAQABAP8BAQAAAAAA/wD+AAEA//4B//8AAgAAAQEAAAAAAQEA//8A/wD+AAAAAAAAAgIBAgAAAQAAAAAAAAAAAQABAP8CAgH/AAAAAAD+Af//AP38/vv6+/v7+vz5/P36/P38/P7+/v79/f77/Pz7+/78/P78/f77/f/9/v/8/f78/P77/f3+/fz9/P38/f38/f78/f79/f79/vn39gD/////ABYWFv///v4B//7+AP8A///9AP////8B/////////v7////+AP////4A//4A//8A//7+AP/////+/wAAAP////8AAP//////AP////4AAP4A//0A/f////7+//7+//8AAP4A////AP7/AP//AP7+///+Af8A//7//v0A//39/v7/AP/+AP8A/v0AAf7+/v//AAAA////Af7+/v7///7/AAD+AP8A///+AP4A//7/AP7///4AAP/+AP//AP//////AP////8AAAABAf4AAP////8AAP//AAD///4AAQ0PESMnKwAA/wAAAezr6/////8B//8A//////4BAP4BAP///wL/AQAA/wD///7///8AAP7/AP//AP////0AAP///v/////+//7///7//gD+//4AAAD+/wD/AP/+/gD/AP/////+Af7//////v3+//7/Av4A/v7+//////7///4A/////vr8/M7LyAAAAQABAQAAAQAAATg6BRMSAf4AAP8AAP8AAQD/AP4BAf79AAQCAG1t/VZX/gAA/wAB/8bFxIKEiP7+/v7/AQEBAQEBAAIAAAAAAAABAf//AQAA/wD//wAA////AQH/AAEAAQAAAAAA////AAAAAf///wEBAAAAAAD/AAD/AQABAAEAAAAAAAEA/wEAAQD/AAD/AAD/AQEAAP7/AAEAAP8AAP8AAAABAgD/AQD+AAAAAAAAAAAAAQD//wAA/wD//wAA//4B/wECAAAAAAIAAAICAAD///4AAAAAAAEA/wABAAAAAAAAAf8A/wEAAAD/AAEAAAH/////AAAB/wABAf8BAf//AAEBAf/+/wH/AAABAAAAAQD/AP8AAAEBAQABAQABAP8AAAAA/wAAAAABAAAAAAEBAgABAAABAf8BAP8A/wAAAP8AAf8A/wD//wEAAQAAAAAAAP7///n5+YmLj1tZX93c3AAAAAAA/wAAAAAAABEVA5+ZAlJNAgAABAAAAwD/A/8ABQD+Bf4ABAACBP//AgH/AgABA///Av8AAQD//wAA/gAAAAABAf/+AQD/Af8B/wAAAAAA/wAAAP3///7/AP/+AP3/AP3+APz9Af7+AP3/AQQE+3Vv60xJ9QDp9wG47gH9/wABAAD/AP8BAAABAP8CAP7//gAAAQABAAACAAAA/wD/AAD//gD/AAAA/wD/AAD//gD//wAAAQAA/wAA/wAA/gAA/wD/AAD//wD/AAD/AAABAAD/AQAA/wD//wD/AAAAAAAA/wAC/gAB/wAA/wD//wD/AAAA/wC54AC64f8A/wAAAQEA/wIZDf9yMP4qD/8BAAAB/wABAAD//wD/AAAA/wAAAQD//gAAAAAAAAAB/wD/AQAAAAAAAQAA/wD/AAAAAAAAAAAB/wAAAAD/AAAAAAAA/wAAAP8AAAD/Af8BAf8CAAD/Af8BAQABAAACAAAB/wAAAAAAAAAAAQABAQABAAAAAAAA/wAAAAAAAAD//gAB/gAAAAD/AAABAQABAQD/AgAA////AAABAAAA/wAA/wD//wACAQAAAAAA/wAB/wAB/gAA/wD//wAA/gAB/wD/AAD//wEAAAAB/gAA/wD/AQD//wAAAAABAAD/AQAAAAH/AQAA/gD//wAA/wAAAAAA/wABAAABAAD//wD/AQD/AAAAAAAA/gD+/gAB/gAXDABtNAA5HAAAAAAA/wAA/gAA/tXV1GxrbO3r6wAAAf8AAAAA///+/wEAAP8AAQEB/wABAP8AAAD/AP8A/wAAAf//AP4AAAAAAf8BAAAAAP//AQAAAP8B/wEAAAAAAAAAAAABAQEBAQAAAAD/AAAAAf8AAAEAAAABAAAB/wAA//8AAAEAAQAAAQAB/wACAP7/AP8AAf8AAAD/AAIBAAABAQEA/wABAf4A/wIB/wAAAAABAQEAAQEAAAEBAP8AAQEAAP8AAAD//wEA/wH8/P/69/v5+vn8+/v9/P39/Pz+/v3+/f7//f79/Pz9+/z9/f3+/P38/Pz9+/39/f39+v3+/P78/fz+/v39/f7+/f39/Pv7+vsAAP8AAP//AQD///7//f/+///////+AP7+/////wD//v//Af/+///+//3+///////+/gD+/gD+AP7+/wD////+/v/+//////7+//////8AAP/////+/v4A//////4A//////7+/v7+//7+/v7//v/+/wD+AAD9/////v/9AAD+/f/+///+/gD9/wH//wAA/v/+AAH+/f7+/v/+/////wH+/v/+//3+//7+//7//////wD//gAA/QD+AP/+/v/+//////7/AP/+AP////7///7+///+/wH+AAD+/wD+AQH+/v4AAP4bHh8AAAIAAADr5+j+AAH//v/+//7//////wD//gD/AAD9AP/+/wD+AP8AAP///wD/////AP////8A/wAAAQD//wD/AP8AAQD//////wD+///9/wD9/v/+AP/9/v//AAL+AP7//gD9/wH/AAH/Af/9/wD+AP/+AP///gD+/v7+///Z1dTW1NAAAP4A/wAAAAAAAf8REwj9AQMA//8A/wD/////AAD+/v/8/v/9//4SEgGCgP1TVAIA/wAAAACZmJqvr7MAAAD/AAH/AAH//wAA/wD//wABAf8AAAABAQEAAAEBAf/+AQD/AAEBAQAAAAABAAAAAf8AAAEA/gAAAAABAAAAAf8A/wIAAAABAAEAAQAAAQH//wAAAQAAAP8AAQAAAf/+/wABAAABAQEA//4AAf8AAQEAAAABAP8AAAAAAAEAAAABAQD/AP8AAAH//wAAAQH//wD//v8AAAAAAf//AAABAgIA/wEAAAABAQD/AAAAAQABAAD/AAEAAAAAAAH/AQAB/wAAAP4AAAAA//8CAQEAAQAAAQEA//8AAf8A//8AAP8AAAAAAAEB/wEA/wAA//8A/gAAAAAA////AAAA/wABAAABAAEAAQEA/wD/AQAAAQH/AP//AP///wDu7u1ram54dnj29vUAAAAAAP4AAAAAAAAhJwCblv1TTAEA/wMA/wMA/wX/AQb//wX/AQQA/gP+/wL/AAH/AQH/AP8AAQEAAAEAAQIAAAH/AAAA/wABAQEAAQAA/wH////+/////wD/AAH+/wD+AAD+/gH+AAL+/wEA/v/08wG/wgZ7egrOwwIA+/kCzvAD4fYBAAEAAQABAf8A/wAA/v8AAQAAAP4AAf8A/gAAAAAAAP4AAgAAAQAAAAEAAgAAAAAA//4AAP8AAAAA/wAAAAAA/wAAAP8AAAAAAAAAAQAA//8A//8AAP4AAAAAAP8AAQAAAAAA/wAAAAAAAP8AAQAAAQAA1O4Ar9wBAP8AAAEBAP4CFwsBbS4AHgsAAAAAAP8A/gAA//4AAP8AAf8AAQAA/wAAAQEAAAAAAQAA/wEAAQAAAAAAAQAAAAAA/wAA/wAAAP8A/wAAAAAAAP8B//8AAAAB/wAA//8BAf8A/v8B/v8AAAAAAP8BAAAA/gAB/wAAAAEB/wAAAf8A//8A//8AAP8AAQEAAAEBAAABAAAA/wAAAAAAAP8BAP8AAAAAAf8AAQAAAQAA/wAAAAEA/gAAAAEAAP8AAAEAAP8AAAAAAAAAAQEAAQAAAAEA/wEAAAABAgL//wAA/wEAAQIAAf4AAP8AAP8BAAEA/wAAAAD/AP8AAAAAAQEA/wAAAQAA//8AAAAA//4A//8AAf4AAf8A//8A/wAAAP8A/v8AAP8AEgkAZjABNBsAAAAAAAAAAAAAAAC+v8B3d3z39fQC/wEAAAECAQAAAf8B/wAAAAAAAAABAAAAAAACAQEAAAABAQEBAAEAAAAA/wAAAP8CAv8BAf8A//8AAAEBAAEBAP8AAP//////AAAAAP//AP8CAAH/AAAA/wEAAAAAAAAAAP//AAD/AP8B/wAB/gECAf8BAAAAAAAA/wD/AAAB/wAAAAAB/wAB/gAE/wAAAAABAP//AAAAAAAAAAAAAAAAAQAA/wEAAP8A//8AAQEB/////fr+/v35BQYEBf8F/v4AAQP+AwAEAQIBAP8A/gAAAv//AAICBAT+AP0AAAEBAP8AAf4B+/7+AwIE/wP/AgAA/v39AP8BAAABBAME/f8AAQAAAP///gIAAQAAAP8AAP/+AAAB/v0AAAEAAP8B/wAAAQIAAP7//gAAAP///wD/AQH/AP8A/wAAAP8A/wAAAAAB/v7//wD/AAEA/v8AAP//AAH///8A////AAAA////AAAA//8C/////wAAAAD/AP8C/wD/AP8AAP/+/wD/AP8B/v/+AAEBAAD///4A/wH/AP8CAAH///8BAAD//wAAAAD//////wAA/QABAf7//v//AAAAAAAA/wD/AAAA//4AAAAAAAD//wD///0AAAH/Af4AAAEB/f//JSgqAQIB//7/6+vnAAD/AAAAAP8BAP8A/wD+AAEB/f4BAwH/AAIA/wEA//8BAAAAAAD///4A/wIAAP////4BAAH/AP8AAP8BAAEB////AAIAAP/+AAAC//8A/wAAAP/+//4A/f8A///9/f8A/gD//v7//gH///8A/////v7//gL/1NDM//3/AAABAAABAAAAAAACsa38KioHTEv8/v4AAAH/AP7/AgAA/gD/+PsB//8ADwsCfHn78vIGu7oB+vn6e3t/KCYlLS4s/v8AAQAAAQAAAAEBAP//AQAA////AAAAAP8AAQAAAAD/////AAACAAEAAP7/AAAAAQEA//8A/wEAAP8AAAEAAP8B/wD/AP7//wIBAAEA//8AAQEB////AQAAAQD//wABAAD/AAEBAP4AAAL+//8BAAABAAEBAP////8AAAABAQAAAP8AAAAB//7/AAIAAgAB/wAAAf8BAAAB/wD/AQAAAAAA/wD+Af8B/wEBAQD/AAEA/wAAAf//AP8A/wD/AP8B/wH/AP8AAQABAAAAAP8AAAH/AP8BAf8AAAAAAAABAAEA///+AAEBAQEBAQH/AQAA//4BAAD/AAD/AP8AAAAAAAAAAAAAAQABAAD/AAABAP8A2NjXampuwsDBAAAAAAD/AAD/AAAAAAD/MzYBo5kAJyMBAP4DAP8B/gADAQAD//8E/gIDAP8CAAEB////AgD//wAAAP///wD+AAAAAAAAAAAAAf8A/gEA//4A/wAAAAAAAAEBAAAD/v////8B/gAA//8A/wAB//8BAAH/w8kNh4QP2tv+/QD9/wH9AgMAAAoA/A0EAAL/AP8A/wABAAAAAAEAAAABAAH/AAAAAAEAAAD/AAABAP//AAD/AAECAAD/AAH/AAAAAP8AAAECAAD+AAABAAL+AP8CAAAAAP//AAEAAAH/AAABAAABAAD/AAAAAP8AAAEAAAAAAAD/AAEBAAAAAPH6AKjaAPj9/wAAAQD/Ag0H/2cs/R8JAAD+AAEBAAAAAAEAAP8BAAABAAEAAP//AAEAAAD/AAEAAP8BAP8BAAAAAAAAAAAAAP8AAAD/AAABAAABAAABAAD/AAEA/wAAAP8B//8AAAEA//7/AAEA/wEBAP4AAAAA/wD/AAEA/wEBAf8B////AP4AAAAAAAAAAAEAAP8AAf//AAEAAP8AAAEAAAD/AAAA//4AAAH/AP8BAAAAAAH/AP8AAAD/AAEAAP8AAAAAAQD//wIAAP8AAP//AP8AAAEBAAD/AAEAAP4A//8AAAH/AAAAAP8AAAEBAAH/AAEA//7+AAIAAP8BAAAAAAIAAP7+AAABAP4AAAEAAP7+AAEAAAEAAP8BAAABAAD/AAD/AP8BAAD+AAABAP8BAAkG/14sAO33AN/tAAABAAD/AAABn5+gNzYyZmhnAQAB/wABAP///wD/Af8A/gAAAAAAAQAA/v8AAQEA//8AAAAAAgD/AAABAf8C/wD//wABAQAA//8AAQH/AAEBAf///wEAAP//AAABAQABAP//AQEAAAD//wD/AgACAAAAAP8AAAH//wEBAf///wEBAP//Af///wEBAAEAAAD/AP8BAQH//wAAAgAAAQEA//8A/wABAAEAAP//AP//AP8AAQAAAQABAAEAAP8A/wEAAv/+AP/9//v5+/v5+v78/P/8/v78/P78/f79/v78/vz8+/79+/z7/Pz7+/79/P37/P79/v/8/f79/P78/fv7/f38/QD//gEA/wAAAQD///7//v8A///+///+//7+//4AAP3//v///v/+//7//wD///39/v3///7/AP7///7///7/AP7/AP////7/AP7+AP7///4A/v4AAP7+//////7///79//3+/v8A//7/AP//Af7/AP/+/v///gAA/v4A//7//f/+//8AAP4AAP//Af4A//8AAv/+//7/Af8AAAD/Af4A//7+///+/v//AP7+AP/+AP7/Af7+AAD/////////AP8A///+AP////7+//8A//4AAP7/////AQABAAABAf7/Af7+Af8AARgaHAUFBwAAAezq7Pr6+/7///////4AAP7/////AP////4BAP/+///+AP/+//8A/v7/AP7/AP/+AP7/AP4A//////7/AP4A//8A//4A//7/AP0BAf7//v7+/wD9//3+/v0AAP3///z+////AP//AP8AAf79AP4A//0A//4AAPby9MnEwQAA/gAA/wAAAAABAQACAvPyAIqC/sjFDAIBAwD+AgD///7/AAD+AAD///r8//T5/xISAYB8+i4uAAAA/tvb2ZOVlQAAAAEA/wEBAQABAAH//wAAAP8BAAEBAQAAAQAAAAEBAAAAAAABAQEB/////wACAf8B//8AAf8AAQD/AP8A///+/wABAAD/AAABAgAA/wIBAQEAAAH//wEAAQAAAAAAAgEAAP8AAAEAAAABAAD/AQEAAAAAAP8A/gABAAEAAAEBAf//AAAB/wABAAABAAH+AAABAf8AAAAAAP8A/wD/AP8AAf4AAP8AAQABAAH///8BAQD//wD/AP8B/wEAAP8AAAAAAAEAAQEAAf//AAAAAAAA////AgAAAAAC/wAAAAAAAAAA/wEAAQEAAAAB/wD+AP/+AQACAAAAAAAAAAEAAf8BAAD//wABAAAAAAD/AQD/AL+/wE9QVMHAv/8B/wAB/wAA/gAA/wAAACst/puPASghAv/9A//+Av7/AwD/BP4BBf8BBgH/BwD/BQABBAEBA/8BAP//AP//AAAAAf8AAAD/AP8AAf8AAQEAAQEB/wAAAf//Af7/Av8AAAAAAQAB/wAA//8AAf7/AAAA//7//6SkCdfa//4B+wEC/AAB/P8yD/1rHv8WBwD+/wD/AAD/AAAB/wAA/wAA/wD//wAA/wAA/wAAAQAC/wAAAQAAAQD//wD+/wD/AAAAAQAA/wAA/wAAAAAB/wAAAAAA/gAA/wAB/gAAAAABAAD//wAA/gAA/wAA/wD//wD/AAD//wD//wD/AAD+AAC55gDe8AAAAAEAAAMGAwBkK/0mCwAAAAABAQAAAAD/AAD+AQAAAAAAAAAAAQAAAAAAAAAAAQAAAQABAAAB/wAA/wABAAD//wABAAABAAD//gAA/wAA/wD/AAEAAQH/AQAAAAAAAAD/AAEBAQEAAQH/AAABAAAA/wEAAQD/AQD/AP///wIAAQH+AAH/AAH/AAD/AQEA/wAA/wAAAAAAAAABAQAAAQEAAAEBAQH/AAAB/wAAAQD+AAD/AAD/AAAAAQEB/wACAP8A/wH9AQD+AAAAAQABAAAB/wAAAAD/AAABAAAB/wAAAAAB/gAB/wD//wD//wD//wACAAD+AAD//wAA/gD9AAAAAAAAAAAA/wD/AAAAAAAAAAD/AAD//wD//gAA/wAAAAAA/wD/AQAAAAD9/gD+/gAXCgFfLQASCgAA/wAAAAAAAP8A/nl7f8TDxP//AAEB/wEAAAEB//8AAQIAAQIAAAABAQH/AP/+/wEAAAEAAP7/AQD/Af8B////AAEA/wAAAAAA/wAAAQH/AAABAAH/AQD/AgD/Af8A//8BAAD/AP8BAAEAAf4BAAEBAQABAf8BAgEB/wABAAD//wAAAP8AAQEAAAH/AAEBAQEBAAAAAAAAAQIBAP8AAP8AAAEAAAAAAAAAAQEAAAEA/gAB/wAA/wAAAAEAAAEAAAABAAEA/v/+/QD7+f37+Pr9+vr+/Pz++/v9/Pv+/fz//QD++/7+/v/+/f39/P3+/vz9/Pz+/f3++/z+/f3//fz/AP0AAAAAAQH/AP/+/gD//wD+//////79/v7/AP7+/v/+///+/gD9/f/////+AP/////+/v7+//3+/wD/AAD+/v///wD+/wH8//7+Af/+//7//v/+/v7+///+///+///+/wD//wH+/gH+///+//////7////+///+/gD//v/+///+///+/v7+//7+/////v//AP7+////AP7//v/+/wD//v///wD+/wH9/v///v/9AP8A////AAD/AP/+/QAAAQD//wD+AAD//v7//////wD//v7+//7/AP3+/gD+/wD/AAAAAP///v8YGx0hIyUAAADt6+ru7ez//wD//wD+////AAH////////+/v7+AAD//wD/AAD//wD+AAABAP//AP//AP///gD+/wD////////9/v7+/v///v///v/9/gD+AP/9AP/+AAEAAP////7/AAD+//7+/v7+/v7//wD+/v/+/v8AAADMx8bf2tkAAAAAAQIAAAAAAAEBAAIAAADx8QSMiAPb3gYBAgD/AAAAAf8AAQD+AAAAAQD8+//7+/8bGwJvbPoLDQEA/wCsq67Nzc8BAAD/AP//AAEAAAAAAAAB/wD//wAAAAAAAAD/AAEAAAAA/wEA/wABAQEA/wACAQIAAP8BAAAAAAABAQEBAQAAAAAAAQEAAP8B/wD//wD/AP//AAAA/////wH+AP//AAABAAD/AAD//wAAAAEAAf//AAEB/wEAAAEAAAD///8BAAAAAAEAAP8BAAD/AQH///8CAAAAAQABAAAAAP8AAP8BAQEBAAEAAAEAAgD///8A/wABAQACAAH/AAABAAD/AAAA/wEA/wAAAAAAAAAAAAAAAf8AAAAB/wH/AAD//////wEAAQD/AQEA/wAAAQAAAQAA/wAAAQAAAQAAAQABAAAAAQABAP8AAAAAAQCeoKJXV1rc3NsAAQAA//0A//8AAAIBAQFIRwO1qQQwKwQAAAMB/wMAAQUBAQf+AAb//wj/AAj+/wP+AAH/AAH//wEA/wMBAQAAAv8AAP8BAAD+AQIAAQH+AQD+///+/wABAQAAAQH/AQL+/wH+/wD+/wL+/wH9////AP/+AQAAAQPq6gAA//7//gD//wIAVx38ax3+IAsAAP4AAgAAAAAAAAAAAAAAAAEAAf8AAQEA/wAAAP8AAf8A/gAAAP8AAf8A//8AAf8A/wAAAP8AAQAA//4AAP4A//8AAAAAAQEAAAAAAAAAAf8A/wAAAf8AAAEAAAAA/wAAAAAA//8AAAAAAQEA//8A2/AAt9wAAAEAAP8AAP7/Wyb8NBIAAQEAAAAA/wAA//8AAQAAAf8AAP8AAf8A//4AAP8A/wAAAP4A//8AAAAAAf8AAAAA//8AAQAAAP8AAAAAAQEA/wAA//8AAP8A/v8A/wAB/wEBAAABAQD//wAAAAD/AP8BAP8B/wAAAAABAP8B/wACAQD+AP8AAQABAAAAAAEBAAAAAAEAAf8A//8AAAABAAABAP8AAP8AAP//AQAAAAAAAf8BAQAAAP8AAAAAAP///gAA//8A/wAAAQAAAQAAAP8AAAAA/v8AAf8AAAABAAAAAP8AAf8A/wEA//8AAgAAAQEA/wEA//8AAf8AAQAAAAAAAf4AAP8AAAAAAAAAAP8AAP8A//8AAAAAAgAAAP8AAAAAAP8AAP8AAf8AAAAAAQEAAf8A/v7/JxAAYi8ACQYAAAEAAAEAAADu7u1zcXXo6Ob/AAH/AAD/AAIAAP//AQD+AQAAAP4AAP8BAQAAAQD/AAABAAABAf8A//8BAAAAAAEAAQEBAf8BAAD/Af8B/wD/AP8BAP8AAf8BAAAAAAD/AQABAAAAAAEA//8A/wAAAAAA//8AAAH/AAAAAAIAAAEBAQAAAAAAAQAA/wD/AP8AAAABAP4CAAAAAP4AAAABAP8A/wEAAQD/AQH/AQEAAAAAAP8BAAEAAf8AAP8AAAD/AP8CAf8A//4A/Pn8+vf7+/n8/fz+/fv8/fz6/vv6//38/vr8/fv8/vz8/fv8/vv7/fv8/f79/fz8/Pv7//0AAP8AAP///v8A/wD//v/+/v7//v4A/v8A/f8A/v////8A/gD//wD+/gD//v7//wAA/gAB/v7////9/v79//7//f7+//7+Af4A/////v7//v////////8A//////4A/wD/AP4A/v/9/v7+/v////8B/gH//v7///////8A/v7//wD+//4A//4B/v7+/gD//v8A/gAA/f7//gAA//7+/v/+/v4B/////wAA/gD/AAD//QAA/v7+/v7//wEA//8A//8A//7+/gAA/////wAA/wAAAAACAAAB/wD/AP7///7+/v/+/gAAAgIDHiMkAAD/9vXy5eLj/v8A/gD/AAH//////v///gH///8A//7//v//AAAB//7/Af/+/v////4AAP7///8A//7///8A/v4A//8A/wAA/f/+/v3+///+/v7//f/+/v3++/3//gD//v///gAA/v8B/f///f/+/v///wD/+vr6xsK/AAAAAAAAAAAAAAICAQEC//4CAwACAQEA29sAiIID9PT/AgEAAf4AAP8AAQAB//7//gEB/f///f7/Pz/+VVP+AAD+7+/ukJCTAAEBAQAB/wD//gEAAAEB/wEBAAEAAAH//wAAAP//AAEAAQAA/wABAAD/AAAA////AQEAAAH/AAAA//8BAP8AAQAAAQAA/gD//wH//wD/AQABAAAAAAEBAQH+AQEBAAAAAP8A/wAAAQIAAAD//wABAQH+AAEA////AQABAQAAAAEBAAAAAQAB/wD/AQD/AAEA/wAAAAAAAAEAAAEBAAEAAP//AAD/AAD/AP8AAAAAAAEBAP8A//8AAQAAAAABAQEB/wD/AAEAAAEAAAAAAAAAAf8AAAEB/gD/AQAAAQEBAQAAAAABAP7//wABAAABAAAAAQEAAP8AAP8B////AQAAAP8B//8B+Pj4iYiMb3Bz7e3rAP/+AP//AAEDAAABAQD/ZGMBoJj/HRkF/wAC//8E/wEG//8H//8JAAAL/gEG/v8C/wECAAED//8C/wAB/wIB/gACAP8B//8A/wAA///+////AAAA/wECAAEB/v4AAP8BAP7/AQEBAAAB//////8B//8C/wEC//8BAAEBICT+AgABBQIGBEEW/UoVAAIBAAD+AAAB//8AAAEAAAH/AAEBAP//AP8AAP//AAAAAAAAAP7/AAD/AAH/AP//AAEAAAD/AAD/AAAAAP/+AAEAAAEAAP//AP7/AP//AP//AAAAAP7/AAD+AAEAAAD+AP//AAH+AAH/AAD/AAAAAAAAAP7/ALPiAfj7AAABAQAAAzwd/T8YAAH/AAAAAAAAAAD/AAEAAf4AAAD/AAD/AP8AAAAAAAABAAEAAAABAAAAAP//AP8BAAEAAAL/AAD/AAAAAAAAAQABAQAAAQAAAQABAAABAAEAAAH9AAAA////AAEAAAEAAv8A//8AAAEAAP8AAAABAAEAAAD/AgD/AAD/AAAAAQAAAQAAAQAAAAAAAAD/AQEAAP//AAABAP8BAAD/AAAAAP8AAP7/AAD/AAAAAAL/Af8AAAAAAAD/AAIA//8AAAEAAAEBAAD+AP//AAAAAP8B////Af8AAP8BAAD/AQH/AP/+AAH/AAH/AP8BAAAAAP//AAEAAP8AAAAAAAD9AP//AAD+AP//AP8AAAD/AP//AAD/AAD/AP8AAP//AP//AAD+AAD+AAAAAAAAAP8AADIXAF0tAAsFAQD/AAAAAAD/ys3Ng4GE/v39AQEAAAAAAQEBAAD/AP//AAABAQIB/wAAAP8AAQH//wEA/v8BAAECAAH/AQD/AP8AAAAB/wD/AP8AAAABAAABAAEA//////8A/wAAAQAAAAD/AAD/AQAA/////wD/AQABAAAAAAEBAAAAAP8AAAAAAAAA//8A/wD/AgAB/wAA/wEBAv8AAAAAAgEA/gAA/wD/AP////8A/wAB/wABAAECAP8AAAAAAf8BAP8AAQAAAAABAQD/AAAAAf79//v4+vv6+v78/f77/v39/P38/f78/P78/f78/f38/v78/f78/f/7/f78/P78/v///wABAQAAAP////7//v7///4A/f7//v7////////+//7+/v7+AP//AP7+//7///3//////wD/AP7/AP8AAP3//v////7+//4A//79///+AP7+AP79/v7+//39/v//AP7+//0A/f7+//8A/////v7+//79//8AAP8AAP7+/v//AP/+Af4B//7/////AP//AP7+//7///7///7///wA////AP///f4A//39/gD+AP79AAD+//8AAP7/AP7///7+//7+//7/AAD+AP8AAf7+////AAD///7+/gAA//4AAAAA/wAAAQD///8A/xcYGgAAAQEC/+zs6P8AAP7+//79//7///8AAAD/AP///////wAAAP7+/v8B//8A//////4A//8A//4A/v7/AP3//////v7///7+/v8A//8AAf7+AP7/AP79//7//v7+/f79//7///3+AP3+//8A//7+/v7+//7//9DMyc/IxAAA/wABAQEBAB0MBF8iCHstB0sZByAGBQcAAczLAsDABAICAP8CAAD/AAH//wD/AP////z9AP39/gEBAWJf+yMjAQAAAq+wssPCxP8AAAEAAAEAAQD//wEA/wD//wH/AAIAAAABAAD///8A/wEA/v//AP8BAf8AAP//AP//AAAAAQEAAAAAAP//AP///wH/AAD+AQEAAAAAAf//AAAA/wABAQD//wEBAAAAAAEAAf//AAAAAAL/AAEAAv/+AAEA/wABAAAAAAD//wD/AP///wEAAQEBAAEAAAABAP//AQD/Af//AAD/AAEBAAABAP8AAAAAAQIBAQAB/gAAAAABAAABAAAA/wH//wH/AAEAAf8AAP8BAP8AAQAAAAAAAAEAAf8AAP8B//8A/wEAAAEBAQIB//8B/wAB//////8BAAAA/wEBAf7/AAAB/u3v7XJydXl7e/Xz8gAAAQAAAQAAAwD/AQkKAYKAA42DBRQQBwAABP//Bf//BwAACP4ACf4ACP8BBgAAAwAAAgAAAwD/AwEBAQABAf//AQEAAQABAgABAf//AQABAf//AP/9AQD/AP//AQABAf8AAP8AAP7+Af7/AP7/Af//Af4AAP7+AP8AAP8BABIYAv4CA/0FBvwnDQH//wAAAAABAAAAAAD//wD/AAD/AAD//wECAAAAAAAAAAABAAD//wAA/wAAAAH/AAD/AAD//gAAAAACAAD//wABAQD//wD/AAAB/wAC/wAAAAABAAACAAABAAABAQD//wABAQAB/gAAAQAAAAAB/wABAAAA/wDY8QHN6AAAAAAA/gIaCwBSHwAFAAEA/wAA/wAA/gAA/gD+//8B/wEAAQAAAQAA/wAA/wAA/wAAAAABAAAAAQABAQABAAD/AAD/AQAAAQAAAAAA//8A/v8AAP8BAAAAAP8B/wEA//8AAQAB/wAA/wEA/wD+//8BAAAC/wD/AAEA/wAAAAD///8A//8B/wEBAP8B/gAB/v////4A/gAAAZrLF/cAAQAASURBVAEAAAAAAAAAAQD//gEB/wEAAQH/AQEAAAACAAAAAQEAAAD/AQACAAACAAH+AQH/AAEB/gD//wD//gD+AQACAQD/AAAA/QAA//8A/wD//gD/AP8AAAAAAAD//wABAAAC/gAB/wABAAD+/wAAAAAAAAAAAQAA/wAAAQABAAAB/wD/AAAAAAAAAAD//wAB/wAAAQAAAAH/AAAA/wD+/wD+AAD//wAAAAA/HABWKv8CAQAAAAAAAQAA/5+goYeEhf37/QAAAP///wH/AAEBAQD/AP7//wEAAAAAAAD/AAEBAQEA/wAAAP//AP8AAAAA/wAAAf8AAAAAAP8A/gAA/wABAAABAgEBAAEAAAAAAf//AQAAAAAAAAACAAEAAAAA/wAAAQH/AAAB//8CAAABAQAAAAEBAAL/Af8AAAEAAAEAAQIBAAAAAP//AAEAAQEBAAABAAEA/wL//wEA/wAB/wAB/wAA//8BAAEA//8BAf///wD/AQAA/wAAAAH+/gD7+P35+Pr8+vz+/P7+/f39/P39/Pz+/P0A/fz9/P39/Pv8/Pv9/P3+//0CAQEAAAD//////v/9/gD9/v/+/gD+/wD////+/v79/v7+///+///+//////7+/v/+/v7+///+AAD+/v/+/QD/AAH+/v7+AP/9/v7+//7/AP3+AAD/AAL/////AAD9Af/+//7//gD/AAD9/gH+/wD9/v/+/gD//wD+/wAAAAH+//7+///+/QD+//7/AAD+//7//v///gEA/wD+/wD//v///wD+AAH+/v8AAAD+/wD////+AP///v8AAP8A/wD+///+AAD/AP/+AAD///3/////AP/+AP7/AAD+AAD///7+AP//AP7+AAD+/wAaHyEBAQH//gLs6eoA/wAAAP/+AAD//wD/AP///////wD+AP////7+/////v/9/gH+Af/+///9/wD+////AAD//wD9/wD//v7/AQH//AD+/v7+AAD//v7+AAD+/v///wD9AAD9/v/+//7/AP/+/gD//gD////29vW3sKv9/PoBAAADAgElDgSRNAONOP50MfuYPv1aGQkQAwIAAAOvrgf6+gAC/wEAAQD/AAEAAAD/AAD//wH+/gEA/wAfHAJdXP4AAAH19PONj5L7+/0AAAEAAP8BAAAA/wAAAAD/AQH/AQD//wAAAAEAAQH/AAL/AQEBAAAAAQEAAAEBAAAAAP////8AAQAAAP8AAQABAQEBAQD/AP8BAAABAQD/AQAA/wAAAAD/AAEBAAAAAAABAAH+AAH/AAD//v8AAQAAAAH///8AAf8AAQAAAQAAAAAAAQD//wD/AAEA/wEBAf8AAP8BAAAAAQD//wAA/wABAP//AP////8A/wIAAAAA/wD/AAABAQH/AQEAAgD+AP8BAAAAAAAA//8AAAEB//8BAAAAAAAB/wEBAAD+AQAA/wAA/wAB/wAAAAEAAQEB/wAAAAD+/wABAf/j4+VcXF+Yl5gA/v4A//8A//8A/wEAAAAREwKXkgR3cAQJCAL//wT/AQgAAQn/Agj/AAoAAQj/AAX+/wIA/wMA/wL//wH9/wH+/gIAAQL/AAD+/wD//wAA/wAAAAD//gEAAAAAAf8AAAD/AAH//wH+AAD+/wD+AP///wH/AAH+/wEAAAIAAAL+AQL+AAESFv7/AQL+/wIC8P7/AAAA/wAAAAAAAf8A/wAAAgAAAQAAAP//AP8AAAAAAP8AAP4AAP8AAAAAAf//AP8AAgAAAQAAAP8A/wAAAf8A//8AAQAAAf4AAAEA//8AAP4A//4A/v4AAP8AAP8AAAAA//8AAAMAAf8AAP8AAAAAAf8A/P4AuOT/AP3/AAABAgMBXCT8FQQA////AP8AAAAAAQEAAAIAAf8AAP//AP8AAP8AAP8AAAEAAAAAAf8A/wAAAf8AAP8BAP8AAf8AAAAAAP8A/wAAAAEB/gEAAAAA//8AAf4B/gD//wAA//8A/wEBAQH//gAAAf///wAB/QH/AQD///8AAP0AAAAA/wAA//////8AAAD//wAAAP8C/wAA////AAAA/wAA/wAAAAH//wAA/v8BAP8AAf8A/wAA//8AAAAA/wD///4B//8BAf4BAP8AAAABAAABAAABAf8A/v8AAP4AAQEAAAAB/wAAAP8AAP8B/wAAAf8AAAAA/wAA/wAA//8AAf4AAQAAAAAAAP8AAP8AAAAAAP8A/wAA/wAAAf8AAP8A/wAAAAAAAP8AAP8AAP7/Af8A/wEAAQAAAf8AAAEAAAAAAQEAQh4DQCEAAAAAAAEAAAD4+fmFhomqqKkA/wAAAAH/AAAA/wEAAAACAAEAAQAAAP8AAAAAAP8AAQD/AAABAQIAAQEAAAAAAP8BAAAAAAEAAAEAAQAA/wABAP8AAAAAAQH/AQAAAgEAAP8AAAD//wH/AAAAAQAA//8AAAAAAAAA/wD///8AAQAB/wAAAgEAAAAAAAEAAAACAP8A/wEAAgAAAv8AAAABAAABAAD+AQAAAQAB/wD/AAAAAQEAAAD/AAAB//8BAf//Af8A//8A//4BAf8AAgD///z//Pj8+/j5/fr7/vz8/f38/fz7/Pz6/v38/vz+/fz8//v8/vv9AP8AAP//AgIDAAEA////AP///v8A/v///gD9/v4A//7//v8A/gD+/f8A/v8A/gD///4A/v7+/v7+/v8A/wAA/v7+/gD//v///wAA/v///f8A/v///v/+/f7///////3///4A/v/+/v7/AP/+//8A/wH+/wD+/v/+/v79/f/+AQAA//4A//////8A/v/9/v4A/////////v8A////AP8A//8A/v/+//8A//7//gD///8A/v3+/wAA/v4A/v8A////AP////8B/////f8B//8A/v8A/v8B//////4A/wAA//8BAP//AP8AAAABEBESAgAAAgH+8/Hu/wAA/v8BAAD//////v3//v3//v//AP///v4A/wD//v/////+/v7///8A//7///4A/v///f///////gD//v39/f/+/f8A/f3+/f///f7+/f///f///v7//gAA/v4A/v///v/+/v///f7/0szL08zHAAEAAwIBBQMDTRgBPBv/AQb+/gT+Bwn8EAb4E///EAcB0M8CurwDAQL//wAAAf//AAABAf4BAQAA//8A/v8A/wAASEb9ICD9AAAAsrGzqqqr/v7+AAAA/wEBAAEAAQEAAP//AAAAAQAAAAAAAP8AAQD/Af7/AP//AP7/AQAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAD/AAABAAH/AAAAAQD/AAD/AAH//wD/AAEAAAD/AAD+Av8AAAAA/wEAAgAAAQAAAAAB//8CAAAA/wAAAAEAAP8AAAEA//7+AAH///8A/wAB/wAAAP8AAAEAAQAAAAEBAAD/AP8AAAH//wEAAQABAQAB/v/+AP//AP7/AQAAAP8AAv8BAQIAAAD///8A/wAAAQABAQAAAAAAAf//AAEA/wAAAAAAAAD/AAD+AAAB/wABAQEA09PVVVdaubi5AAH/AAAAAAD/AAABAAEBGyACn5gBW1UCAAADAAAGAAAI//4L/wAN/v8O/QAI/gAE/wECAQAC//8CAAADAAABAQEBAAEB/wABAAACAAEAAAAA/wEB/wEAAAAAAAAB/wEB//8AAP8AAAD///4AAAABAP8C/wABAAABAAAAAP8A/wAAAP8C/wACBgcEAQMEAf8A/fkAAP8AAAABAP8AAAABAAH/AP7/AAD/AAAAAP8AAP//AAD/AAAAAAAAAAAAAAD/AAAAAP/+AP//AAABAAD+AP/+AAH/AP/+AP8AAAD+AP//AAAAAAH/AAAAAAAAAAD/AAH/AAD/AAL+AP8AAAAAAAD/AP8AANzxANLqAAADAQAAAjgX/C8QAAICAAEAAP8AAAD/AAAAAAH+AAABAAEAAAAAAP8AAAABAAH/AAD/AP8AAAD/AAD/AP8A/wAAAP8BAP//AAAAAAEAAAD//wL/AAD+AAAA//8A/wH//wH+AAAAAAD+AAD/AAL/AAEAAQD/AAH/Af/+AAD/Af8AAQL/AAH/AQD/AQD/Af//AQD+AAD//wD+AAAAAAD/AAD/AQH/AQH/AQAC/wEA/wD///8AAf//AAAAAAH/AAL/Av8BAf8AAQAA/wAAAAAAAAD+/wH//wD/AQEAAAAAAAD+AAH+AAEAAQAAAAEA/wD/Af0BAP8AAP/+AP8AAQAAAAABAQEAAAD+AAAAAQAAAAEBAP8BAQABAAD/AP//AQAAAAD+AAD/AAAAAAD/AAAAAP//AAAAAP//AAH/AAH+AP/+AAD+AAMA/VclACERAAD+AQABAAD/+Pr5hYaI19fXAAEAAQABAAD/AAAB/wAB/wAAAAAAAAABAAAAAAAAAQAA/wD/AP//AAAAAAAAAAAA/wD/AQEAAf8AAP8AAP//AQAAAP//AAD/AQAAAAACAAEBAP//AQAB//8AAAAAAAD/AP4AAQD+AAAAAf8A/wAA/v4AAAEB/wD//wH/AgAAAAEBAP8AAP8B/wEA/wAB/wEAAQAAAP4A/v//AP8AAAAAAP///wEBAf8BAf//AP8A/wECAQAC/gEBAP7/AQAAAQD///37/vn5+/z6+/78/f39/fz6/P37/P38/f77//37/P/9/gAA/wAAAP7+/f39/v8A//3///8A//7+AP79AP7//f4B///+/v/+AP////0A/wD+//7//wAAAP//AAAA//7+/v//AP7/AP//AP//////Af//AP/+//8AAP8A//7/AP7//v0B//8BAf//AP8AAf/+//7/AP8AAP4AAf7/AP////z+//4A//7//////v//Af8A//4A//8A//8A//////3/AP7//wD/AP////8AAf7/AP3///8AAf7/AP//AP/+//7/AP3/Af4A//3/AAD/////AP8A//7+/v//AP8B/wH/AAAAAP//Af8A//7+/hcbHhUaGwAAAvDv8P/+/v8A/v7+//////8AAP8AAf7///3/AP7//v7+Af//AP4A//7+//3//f0A//3+/f7+/v/+/v7///79//7///4A//7+/f4A//z+/v7///3+//3///////7//v7//v7+///+//8A//f29LauqQD/AAH/AAsDAyAKAkIfAwcIAAECAAIC/wIEACADAUIFBToaBQAEA7ayCf/+AgQBAAAAAAD///8A/wD/Af8A//39Afn9/xYVAUZFAQAAAv///pmZnPf39///AAAA//8AAQAAAQEAAAAAAQABAQABAf8A//4AAAABAAAAAQIBAP8AAAAAAAAAAAAB/wH/AQAAAP8AAAEAAQEBAQEAAP7/AP8BAP8AAQD/AQD/AgEA//8AAAAAAAABAP8BAAAAAAEAAP8BAP7/AP8BAAAB/wAAAAH/AAD/AAABAAEAAAEBAf8AAAAAAAAA/wAAAAABAP//AAABAAAAAAEBAf8BAf/+/wH/Af8AAAD//wEBAQAA/wABAgAAAAACAP8A/wAAAAAAAAABAQEAAAAB//4A/wEBAAABAAAA/wAAAAAAAQAAAAD/AQEAAAAB/8rLzF1dYMrJygD/AAD/AQAAAAAAAQABADw9AbSp/0tGAv7+BAD+BgD/CP8BCP8ABv/+BQD/BAAAAwD/AgD/A/8AAgAAAv4AAAABAQEBAP8BAP//AAD/AQAAA/8AAQAAAAEAAQEA////AQD/AAAAAQAA//4AAAABAv8AAP8AAP//AP3/AP8BAf8AAQABBP4AAf//AQQFA/8AAf//Av/7AAABAAEA/wABAAD//wAAAQAAAAAA/wAA/wABAQABAAAAAAAAAAAB/wAB/wD/AAD//gAAAAABAAAA/wD/AAD/AAD//wAAAAABAAAAAAABAAAA/wAAAAD/AAD//gD/AQD//wAAAAD/AQAAAAD//wAAAAAB/wDD6AD7/QIAAAIFBf9FFwAB/wAA/wAB/wAAAAAAAAD//gAA/wAB/wD//wAA/wACAAAB/wAAAAAAAAAAAQAAAAD/AQABAQAAAAAB/wACAAAAAQAA/wD/AAAAAQABAQAA/wAAAAAA/gD/AAAA//8A/////wH/AP8A/wEAAAAA/wD//wED/wAC/v/+/QEA/wABAAAC/wAA//8AAQABAAEB/wAA/QAAAP8B/wEAAAD+Af8A/gAA/wAA/gEB/gAAAP8A/wEAAAH/AAAA//8C//4AAQAA//8B/wAAAAL//wEBAP//AAABAQH/AAABAP8B/v8C/wAB/wAAAAABAAAAAAAA/wEB/v//AAD///8A/wABAQD///8A/wAA/gAC/v///QAAAAD/AP8A/wABAAAA/wAA/wAA/wAA/wD//wD//AD//wD//wAA/wAA/wAAAAAA/wAMBQFgLAAQCP8A/gAAAQAAANbY13t5e/n4+P4BAAAAAQEB/wAA/wD/Af8AAP8AAAD/AQAAAAEAAAEAAQD/AQAAAAAAAAAAAQAA////AAABAAABAAABAf4AAP8AAAEAAP///wAA/////wECAQD/AAH/AAAAAf//AQABAAD/AQEAAP8AAP8AAAAB///+/gAAAAD/AQIAAgAA/v8A//8A/wH/AAAA/gABAAAAAAAB/wEBAQMBAP//AQEBAAH///8AAP4AAQEBAAL//wAA/wD+/wEAAAH/AP///wEA/gEA+//8+fz7+vz9+/3//v78/Pz9+/v8+/v8/f39/f0AAAIA/wAA/wD5+/r+/gD//wD+/f/+AP3//wD+AAD+/v/+///9//7///7+/f/8AAD+//79/v/+//79/v7/AAD+/wD////+/v7+/wD+///+/v/+//7+///+/v7//v7+AAAA/gD+/f7///7+/v7+//7+/v/+/v///v/+/v7+/gAA/gD+/v8AAP///wD+///+/wD+/gD+//7+////AP8AAAD+//7//wD+///9/wD///7////9/gD+/wD+///+Af///wAA/////f8A/wD//wD/AAD//gEAAQH+/wAA///+AP8A/wD/////AAD/AQAEBgYNDg4BAP/v7uz8/v4A/v8AAAD//wD+/v7/AP3/AP7////+/wD/AP3//////v7//wD9/gD//v7/AAD9///9///+/f/8///9/v/9/gD//wD9/f7+///9///+/wD9/v/8/v7+/gD+///////+/wD+/gG9tbPZ0s8AAAEFAAYPAgRJGgAsGAABAgABBP8CAgADAwD7/gEK+wI9FAMHAQDR1AXEwwMDAgABAQAAAQABAAL//////wH/AP7//AD8/gIlI/4AAP0AAALHx8mam58BAAD//wAAAAD//wD/AQAA/wD//wAA/v8BAAEAAQEA/wAAAP8AAAEAAP8AAAAAAAAA/wH+AgAAAQEB/wD+/wD//wABAP8CAAECAAAB/wAAAQAAAf8A/wH//wAAAQAA/wEAAP//AAAAAAAA/wABAQAB//8AAAABAAD/AAD/AAAA/wD//wAAAAEB/wABAQACAQABAAAAAAEBAQAA/wEA/wAA/wECAAABAQAAAQAAAP8AAAAA/wABAQIAAf8AAQAAAAAAAAEA/wAA/wD/AAD/AAAAAAACAQD//wEA/wABAQAAAQABAQAAAAAAAAAAAQCysLNdXF/S0dEA//4AAAAAAP8AAAAAAgFGRwGimQAsKAb+/wcBAQcAAQj/Agn/AAb/AQX+AQT+AAMA/wIAAAL/AAEA/wL/AAAAAQD//wAAAAABAQAAAQD/AQD////+/////wL+/f//AQIBAf8AAAD+//7/AAAAAAH//wAAAQH/AAD/AQEAAAD//wD/AQH+/gD//wL/AAIJBwL+AAEAAAEB+/8B/////wAA//8AAQAAAQEAAf8A/wAAAP8B//8AAAAAAAAA//8A/wEA//8AAP8AAQAA/wAA//8AAAEAAf4AAv8BAAAAAP8A/gAAAAAA/wAAAAAAAQEAAQAAAAIAAP8AAAAAAAAA//8AAP8AAgAAAAEA6PYAy+wAAAH+AP//OBX+Jw0AAP4AAAAA/wAAAP8AAQAAAQAA/wABAQAAAQAAAf8BAP8A/wAAAAABAP8AAf8AAAABAf8AAP4AAP8AAP4A//8AAP8A//8AAP8A//8AAAAAAQAAAP8AAf8AAf8BAP8BAf4BAf8AAf0B////Af4AAf8BA/////8AAAEBAQAAAP4AAP4A/v8AAP8BAP8B//4AAAIAAf8BAP4AAP7+AP4AAf4CAP8AAf8AAf8A/wAAAf8BAf////8A////AP8B//8AAQAAAP8BAP8AAP//AAD//wAAAf4AAP8AAAAA/wABAAEA/wAAAAAAAAD/AP4AAP4AAQH/AAAAAf8AAP8A/wAAAP8AAf8AAf8AAP8A/wAAAgAAAP8AAf8A/wAA//8AAf8A//8AAP8AAAAAAv8AAf8AAf4AAP8AAAAAAP4A//8A/wAAAP//Iw8BVCcAAgIAAAAAAP//AACytLWhoaUBAP8AAf//AAAAAQAAAP8B/wAAAP8AAf8AAAD/////AP7/Af8AAAH/AAEAAAAAAAEAAQD//wAAAAAA//8AAP8BAAAA/gEBAAAAAAABAAAAAAD/Af8AAQD/AQAAAf///wD/AAD/AAAA/wEAAAEAAAABAQEAAP8BAf8CAP8AAAEBAAEAAQD/AQAAAAIC/wD/AAEAAAH//wH//wEBAP//AQEAAQH/Af8AAQAA/wD+AAAAAAABAQAAAQAAAP8B/wD/AAAAAAABAP4A//r8+/f7+/r7/vz9//z9/f37+/r7/Pr6AP8AAAACAP8A/fz8/f////7//wH///8B/gAA//4A/v8A/f7//v///v//AP7+///+//8A/v//AP8AAP8B/v7+/v/+/v4A/gD//v7+/v7+/wD//v8A/v7+/wAA/QAA//7//f/+/gD//f8A//7//gAAAP8A/v4A/v/+/wD////+/gAA/v///v4A/v8A/v4A/v7//wAA//8A//4A/v8A/v7+//8A/gD+/v8A///+//8A/v////////7+//4A//3/AP7+/wD//wD/AAD+/////wD//wD///4AAP8A//4B//7//wD+/wAAAf8AAP7/AwIBERMVAP//+fb3/f3+/gAA//7//gD+AAD//v4AAP4A/wAAAP/+/f///f7+/gAA/v/+/////f///f7///7+/v7//f/9/v7//P7//f39/P7+/gD+/////f7//f///v////8A/v7+/v7//v7+/wAA7+3qurSvAAAAAgIGAwMHBgQFLA/+DAgB/wAAAgABAQIB+fn/7+3/Bf7/Cev6UhwE/PoAnJ0H8PACAwIAAQAAAAD/AQIAAAAA//8A/wEAAAD+3+P/AAD/AAD//fz7jIqO0NPUAQEBAAAAAAH/Af8BAQEAAQD/AAEBAQD/AP8AAAIAAAEAAAEAAQAAAAAA////AAD/Af8AAAAA/wEAAAH/AAAA/wEBAAH+//8AAAEBAAEBAAAAAAAAAAD///8AAAAAAAABAAD/AAAA/wEBAAAAAAD//wAA/gAAAAAAAQAAAAEA/wAAAAD/AAAAAP8AAAAAAf//AQD/AP///wD+AAEAAAH//wAAAQABAP//AAAAAAAAAAAA////AP8AAAAAAQAAAAEAAAAAAAIAAAEAAAEAAAAAAAABAAEAAAAB/gAAAAAB/wD/AP8BAAAAj5CQYGFj29vZAAD/AAAAAAEBAAABAwUCaGX/n5cEGxkK//8JAQALAP8M/wALAP8IAAAGAP8EAP4CAQAAAP8AAAABAP8AAAIAAAD/AP8AAAEB/wEC/v8BAP8AAAAAAAABAAAC/gH//wED/v///wEA/wAAAAEC/wAB/wAB/wD/////AAAAAP8A//4A/wAB//8C/gAB/wAA/gECAwX/AP///wD/AP4B/wIBAAL/AAAAAP//AP/+AP8AAAD/AAEAAP/+AAD+AAD+AP8AAAD/AP8AAAAAAP8AAAD/AAAAAAD+AP8AAAAB//8AAAAAAAH/AAD/AAEAAAD+AP/9AAH+AAD+AAD/AP8AAAD/AAD/AAAAAAD/AAD+AMjqAPP5AQAAAQAA/zkTAAD/AP8AAAEAAAD/AAH/AAD/AP//AAD///8AAQD/AQD///8AAAH/AAD//wAAAAD/AAH+/wD/AAD/AAD/AAEAAQAAAf//AAAAAAAAAAH/AP/+AQAAAQAAAf8BAf//AAD/AAAAAf/+AQD/AQD+AQD+AgD9AP7+Af///wD9AQH+/wH/AAD/AAD//wD/AAH/AAEAAP/9AAEA/wAAAAD/AAD//wH//gD/AAD/AP8AAAAAAf//AP8AAAD/AAD/AAEAAAEAAP7+AAEAAAAA/wD/AAAAAQD/AAEBAAAA/wH/AQD//wD/AQD/AP//AAD/AP//AAEAAAD/Af8BAAD/AAD/AAD/AP//AP8AAP8AAP//AP//AAD/AAH+AAD/AAD/AAH/AP7/AAH/AAH/AAD+AP//AAAAAAEAAP//AP/+AAAAAP//AAAAAAABAAAA/zwbATwdAAD/AAABAAAA/v79e3x8xMPFAP8BAP8BAAAAAgEAAAIAAgAAAAABAAABAAIAAQACAAAAAAD/AQD+AAH/AAEA//8BAAAA/wEAAAEBAQABAAAAAAD/AAEBAAAA/wAAAP//AQEB/wABAf8AAAAAAAEBAAABAf8AAAH/AAAAAQEB/wAAAP8C//8AAgABAAD///8AAf8AAf8AAAD//gAAAAD/AAAAAQH//wEAAAAAAP7/////AQAAAf8AAAEAAQH/AAEBAAABAAAAAQEAAAH/AAAAAf8AAQAAAf/+AgD9AP35/fv4+/v6+//8/f78/P37/QEA/wAA/wABAPn5+v7+/v4A//39//7+/v7+/f7+/////v8AAAD/AP7+//4AAf////0AAP////3+/v3//v////7///7//wD9//7+//7///39//////7/AP/+//7+AP7///7/AP//AP/+//0A/v7+/v3///3///7+//79AP7/AP/+/v8A//3//v/+//////7/AP///v3+//4A//7+AP4A//7///39Af////7//v7+/v7//////wAAAP4C/v7///0BAP//AP8A//7/AP8AAP7/////AP////7///8A/v4B//7/AP8A//7///8AAAEBABETFv8BAfv7+fv8+v////8B//////7///4A//3/AP7+/f3+//7+/v4B//79//7+/////v7+//79/v3+//7+/v3+AP7/AP7+//8AAP7+AP7/Af3+//7///////7+AP7/AP8AAP7///0AAP79/K2loOzm5AACBQcJE/4CBfX//yEb/wYO//8EAP36Af/+At3jBOvsAQkAAQnnBn0rETYdC9XZAaipBgIBAAMDAAH//wD+AAH+AAEAAAH///39/83PAAAAAQAA/wAAAufn5399gfb09f7//wAAAf8AAP///wEAAQEA//8AAAEAAAD/AQEAAf7///4A/wAAAAEBAv8AAAAA/wH//wAB/wEAAAD/AAD//wD/AQABAAD//////wD/AAABAAAAAQEAAAEBAQAAAAAAAQAAAAL/AAEBAAAAAgD/AAEA/wEAAAAAAQD/AAIBAAAAAP8BAAEAAP8AAP8BAf7/AAABAAABAgD/AAAAAAAA/wAAAf8AAAEBAQABAAEBAAEAAAEAAQH/AP//AAEAAAABAAAAAAEAAAH/AP//AAAAAAD//wAAAAEAAQD/AAEAAQEB/5KTlHV1evHw7gD/AAABAAD/AAD//wgJAoOAAY2HBhQRCwEBCv8ADAD/Df8BCwABCQABBv8ABf4BAv8BAf8BAP8BAQABAQACAf8AAP8CAv8BAAAAAf///wD/AP8AAP//AP8A/wABAQD+AAEB/gAAAP//Af8AAf//AAAAAf//AP8AA/8AAv8AAf7/AP4BAv7+Av4AAP8AAAABAP8BAgIDAP//AAEBAf/+AQAA/gAAAAABAAAAAAAAAQAB/wAAAAH/AQACAAEA/wAAAAAA/gD//wAA/wD//wAA/wAAAAABAAD//wABAAAAAAAB/wD/AAAAAAAA/gAA/wD/AAAAAQD/AAAAAAAAAAAC/wAAAAAA/wAB/wD/AAD3/QDI6wAAAf8AAAEZDQEkDgAAAAABAgD//gAAAAAAAAD/AAABAAABAQAA/v8B/wAAAAEA/wAA/wD//gAB/gD//wD/AQD/AAACAAD/AQD/AP////8B/wAA/wACAAAAAAABAAD//wAA/wABAAAA/wAA/wD//gAAAAAAAAAA/wAA/v8A/wAB/wAB/gEB///9/wAA//8AAAAAAAEBAP///wD///8A/wD//wEB/wAAAAAA/gAA/wEAAAD+/wEAAP8AAAAAAAEA/wAA/wEB/wEAAP7/AAABAP//AAD/AAEBAgD/AAAAAAAAAAEAAAEBAQABAQH/AP8A/wD/AAD//wECAAD//wAA//8A/wEAAAD//wD//wAB/gAA/wD/AAABAAAB/wAAAAD/AAAB/wAB/wAAAAAB/wD//gEA/wAA/gAA/wAB/wAAAAAA/wD/AAABAAAB/wAA/QAA/wAB/wAGAgBVJQAhEQAAAAAAAAAAAO3s7HV1d+nq6/8BAP8AAf4AAAAAAP4AAQAA/wABAAD/AQEA/wEBAAABAAABAQD/AAH/AAEAAAEAAAD/AAAAAAAAAQAAAf8BAP///wAAAAABAQD/AAD/AAEAAAAA/wEAAQEBAAECAAABAP8AAAEAAAD//wAAAAEBAAEAAAIB/wD/AQACAf8AAAEBAAAB/wABAQEAAP8B//8A/wAA/v8AAP8BAAABAAAAAAAAAP8AAAAAAQEAAAEA/wEBAAABAgAAAQEAAP8AAP///wAAAAD/AAAA/gH//gD8+f369vr9+vv9/PwBAQAAAf8AAP8BAQH+/////v7+AP7/AAH//wH+/////gD//v/+/v/+AP/+/////QAA/f39///9///////9/v/+///+/wD9AAAA//8A/wD/AAD///8A/v/9/gD9/v7+//8AAAD//wD+/////wD+/gH+/wAA///////+AP///wD+AP///v4A/wH9AAD+AAAA////AAEA/wD////+//3//gD////+/wD+/////wD+///////+AP79//4A/QD/AP//AP79//4A/wD//v///gAA//8A/v7/AAD+AP/+AAD//gEAAAD+/wH/AP///wAAAAIODw8AAAHx7u7x7u0AAAD9/v/+AP//AP/////+///9///+//7///7+/v/9//79/gD+/gD9/gD9///9/f/+///////9//79AP/9/v3+//79/v/9AP///gD+//7+AP///v/+/f////8B/wHFvrzBuLQAAAEYITULERz+AQEPCv83MP4IF/0JHvsHFP4ABv729gEJAAIMAAMP/QQi/gx3JREhEgyepQSlqQb9+QACAQD/AP//AP8AAAAAAQDAvwLQ0AEAAAEAAAEAAP4AAP+0tLa5vLwBAAH/AP8AAQABAQEAAP//AAAAAAAAAf8AAAD//wABAQABAQIAAAAAAP8BAP8AAAD/AQAA/wIBAAAAAgD/AQIAAAEA/wD/AP8BAAAAAAAA/wABAAAAAP///wABAAABAAD/AQD/AP///wAAAP4BAAAAAQEAAAAAAAABAP///wAAAAAAAAD+AAEAAAH/AAAAAAAA/wIB//4AAAAA////AQD/AP8CAAD///8A/wAA/gH/AAAAAP8AAAABAAD///8A/wEBAAEA/wD/AQABAAH/AP8AAQEAAQAAAAD/AADv8vByc3Z4eXv9/PkAAP8AAP8A//8AAAAKDP+LiAJybAgDAgsAAQv+/w3+/wz+AQj+AAcA/wX+/wQA/wMB/wL/AAIA/wL//wD//wAA/wIAAAEBAQABAAIAAP8A//8AAQAB/wEAAgEAAAAAAP0AAAD//wEAAf8AAP4AAAAAAQD+AP//AP8BAf7+///+/gD//wAB/wD+AAH//gEAAAEAAAEAAf8CAwEAAAAB/wIAAAAA/wAB/wAA//8AAAAAAf8AAAAAAAD/AP8A/wAAAAABAP8AAAEAAf8AAP8A//8A/wAAAAAAAP8AAAEA/wAA//8A//8AAP8AAP4AAAIAAAEAAQAA/wAAAAAA//8AAAEA/wAAAP8AAQAA/wAAAAAA1+8A4fIAAAABAP8BMRD+CwMA//8AAP4AAAAAAgAA/wAAAf8A//8AAP0AAf8A/wD/Af7/AP8AAP8AAQAB/wEAAAAAAP8AAv8A/v8BAP8A/wAAAQEA//8AAAAA//8AAAAAAAD/AP8AAP4AAf4BAP8BAf4BAAAAAf4BAf4AAv8AAQAAAP8AAP//AP4A////AwAA//8AAP7+Af3+AP7/Af4AAf8AAAAA/wD///8AAAAA/wABAP8AAP0AAf/+AP4AAP3+Af/+AP8AAAD//wD///8BAf8AAf4CAv8AAQAAAAABAgH/AAABAP8AAf////8A////AP8B/wAAAf8AAQD///8AAP4A/wAAAP8A/wABAAEB/wAAAAEAAP8BAP4A//8AAAAAAP8AAv8AAAAAAf8AAP4AAv8AAQD/AP4AAf8AAP8AAP8A//4AAf4AAf8A//8A//4A/wAAAP4AAP8B////EgcAXykAEwkAAP8BAf8AAP/JycqZmJYB/v8AAAACAAEAAAABAP///gABAAAAAP8AAQABAAAA/wAA/wD/AAAAAQAAAP8AAAABAAAAAAABAAABAQABAAABAAD//wAB//4BAAH/AP//AP8AAQD/AP8A/wAAAAAAAAEBAQH/AAD/AAEBAAH/AAAAAAAC/wD/AP8A//4BAAEA//8AAAIA//7/AQEBAAEAAQEAAAEBAAEAAf8BAAAAAQEAAQABAAAB/wD/AP//AAD+/wD//v4A/wD/AAABAf8B/wAB/wAA//8AAAEBAP8A//8AAP4A/Pz9/Pn6//7/AAEDAAEA5+jo/////QEA//4A//39/v///////P///gD//v///v7//f/+/AD//QAAAP7//v8A/f8A/wAA//4A/////////QD//f/+/v///v7//QD//v//AAAA//4A/fz+/f7+/////v7/////AP///gD//v//AP4A/v4A//4A//8B/f//AP7////+/gD//P79/gD//v4A//8A/gAA/v8AAP/9//8A/v8A/wAA/v8A/wAA//8A/QD//wH///8AAAD//v///wAA/gH///8A/gD////+AAAAAP//AAAA/v4A//8A/v8B/wH/////BAYHAAAA9/f28fDw/f3///8A//4A/v8B/v8A////AP8A//8A/f4C/f7//f///f///f////8A/f8A/QH/+/7++//+/f4A/v8A/f8A/P7//f7+//3//f/+/f7///7//QD+/wD//wAA5uXiqaCb/vz7DhopMkNaCxEb/v37Kxr8BwkC+wL//gUBBRj9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AAH+Af7/AP8AAQAB//Dt7f3+//79///+AP/+/f7+//7+/v79/wD//v7/////AP0A//3/AP7+/v3+AP4A/v3/AP4AAP79//7+AP79AP3+/v3+/v7+AP7///4A//////7/Af7///8AAP7/////////AP3+/v4AAP7+//7+AP8AAf4A//7/////AP8A//7///////7+AP//Af4AAP///v//AP7/AP4B//7/////AP7+//8A/v7+///+////Af/+///+AP8AAP//AP/+/////v8AAP//AP/9/wD+AAAA//7+//7+AP7+//8AAf//Af//////AAUHBwEAAf8A//3+/P8AAP7/////AP0AAP8AAP/+//8A//7+//3+//79AP39AP3//f8AAP3///3//f7//v3+/f0A/vz+/v4AAP3+AP3//v8A//4A///+AP79/v3///7///r4+KKXldfQzAACBiw5ThgeJuvl3+7p2wkEADkdCP//AgH+AAH+//8AAO3lAq7l+aX78ej/+hgNBAH+//7+/Qn9AB75/VUoEnE8DlE4Bw39AObeAwT+/2dAAdNxAplN/pI8ABUGAAAAAAAAAAAA/wD/AamprPz7/QEAAAD/AP8A/wD//wAAAP8BAQAAAAAAAAAA//8B//8AAP8AAAAA/wEA/wAA//8AAAD/AAAA/wEBAQAAAAIAAQH+AAAA//8A//8A//8A/wEBAAEAAP8AAP8AAP8BAAABAP///wEA/wAAAQAAAAEAAAAAAAAB/wEBAQAAAAAA/wEAAAABAQABAQD/AQABAAAAAQD/AAAAAAEAAAAAAf4A/wEB//8BAP7//wEAAAAAAQAAAP///gIAAAEA/wD//wAAAAAAAAEAAAABAAABAKeoqlZXW9fX1wD+AAD+AAD//wD/AAAAADg4B6+nEklDFQD/Df/+DAD/CAABBgAAA///BAAAAP8AAgEAAQAAAAABAQAAAQD//wAAAP8BAQABAf7///8AAf//AP4AAv//////AAAAAP8AAP8B//8B/gEBAP7/AAABAf4B/////wAAAAAA//8B////AAAAAP//AP7+////Af7/Af4BAP7/AQD/AP7///4BAf//AgECAAABAgD+AP8CAQAB//8B/wAAAAEAAP///wD//gEBAAAAAAAA/wEBAAD/AQAAAQD/AQABAAEAAAAAAAAAAAAB/wAA/wAA/wAAAAAA/wD//wAAAAAAAAAA/v//AAABAAAA/wD+/wD//wAA/wAB/wAB/wD/AAHj9gDh8gEAAAAA/wAxD/4GAAAAAAAAAAAA/wAAAAAB/wAA/gD//wAA/wAAAAD/AP8A/wH/AAAA/wD/AQABAAAAAP/+/gD//wD/AAAAAAAC/wD//gAA/gD//wAA/gAA/wH//wAAAAEAAQAA//8A/v///v4A/gAA/wAA//4BAAID//8AAAAA//8AAAH+Af8AAAD+//8BAP8A/wAB//8A/wAA//8A/wD/AAIA/wEAAP8BAQD//gH//wD//wAA/gD//gL/AAAAAf8A/wAA/wEA/wAAAAEAAAAB///+AAEAAQAB/wABAAD//wIAAAEAAQAB/wAAAQD//wAB/wABAAEAAP8B/wAA/wEBAAAB/wEA/wAB/wAAAQAAAAD//wACAAABAAD//gAA/wEAAAAB/wD//wD+AAAB/wAA/wAA/wD/AAAB/wAB/wACAQAAAAAB/wAB/wH//wD//wAAAAAAAAAA//8A/wD/AAABAABRIwAeDwEAAAAAAQAAANLR0paWlgAB/wH/AAABAQEAAQABAQABAAABAAEA/wD//wEB/wEAAAAAAP8CAAABAAAAAAD//wAAAP//AP8AAAEAAAEBAAAA/wEBAAAAAgAAAQABAQAAAf8AAQEBAf8A//8AAf8AAP8AAf8AAQABAP8BAAQAAAAAAQAAAAEBAP8A/gABAQH+AQABAQAA//8A/wD/AQAAAP8A/wEAAP8AAP8A////AAEAAAEBAAD/AP8BAAD/AgH//v4AAQAAAAEAAAAA/wECAQD/AQH//v4B/wEAAAEAAP8AAv8BAAD/AAAAAADz9fX+/v8AAf8AAAH/AAAB/gD/AAD/Af8A/wD/AAEAAP8A/gD/AAAA/wEB//7+AAAAAf8A/gAAAQAA/////wAAAf///wH//wABAf/+AAABAAEA//4AAAAA/v7+AAEAAAAA//4AAQH+//4B/wD//wD/AAD///8AAAH//wABAP//AP8BAP//AAL/AP7/AAD//wAAAAD//v8A/wD+AP///wAAAQD//gABAAEAAAD+AP8AAAAAAP8B/gAAAf//AP8A/gAAAQABAAD+AAEBAf///wAAAP8BAQD/AAEAAP8A//8AAQD9//4OERQAAQAA/gH9/f///wD/AP4A/wH//wEAAQD/AAACAAD+AAAAAQD//v4BAQH/AAAB//7/AAEBAAD/AAABAQD//wAB/wH9Af8A//4AAQL/Af8CAQH+//4AAAD//wD39fSnnJfGu7MAAAEkLj00O0n5/Pno3c0A/vY3IwUpC/z88QAABf8AAwAAAwC64v2Z7fn4AP0DAAIIBAMAAgAAAP/+DPMECfT98BAkAQ09X/gRGv7q8v8BBf04Af4F1QQA8AA8Hv2GNAJrxwD6/wIAAP8AAAC7ur22uLhPTUv+/wABAAEBAQD/AP8A//8AAQEA/wAAAAAC/gD/AQABAAEAAAAAAAACAQD//wAAAAAAAAEA//4AAAH/AQD/AAABAAIB//8BAAD/AQD///8AAQAA/wABAAAAAAAA/wAAAQH/AP8AAAAA/wAAAAAAAAAAAAH/AP8AAP8A/gAAAf8BAAAAAAD/AgD/AAAB/wD/AQAA/wEB//8AAP8BAAAB/wL/AQABAAAAAAEAAP//AAEBAAL/AP4AAAEAAQAAAQAB/wH////29/eKi46Ojo/08vIAAP0AAAIAAAEAAP8AAAFSUgeOiRAZFwgAAQUAAAb+/gUAAQP/AAAAAAIAAgEA/wMAAQD/AP8AAAH///0BAAAAAAIAAP////8BAf8AAQAA//8AAQAB/wD+AQEB//8AAP8AAP8AAAD//gABAQEA/wD/AP8A/wAAAQAA/gH+AAAAAQAAAP//AP8AAP8AAAEA//8AAQEA/gP+AAL+/wD/AAH+AAD//gD9/gEAAAD/AQAA/gEAAAAAAAAAAAD/AAAAAf8A/wH/AAEBAP7/AP//AAACAgD+AAAAAv8A/gH/AwAA//8AAAAAAQAA/wIAAgAA/wAA/gAAAgAA/wAAAf8AAAAAAP8A/wAAAQEAAQAAAP8AAAAA/gEAAAAAAAH/3PIA/P4BAAH+CwQAMhEAAAAAAf8AAP8AAgEA/gAA/wEAAAEAAAAA/wAAAQAA/wABAP//AgEA/wAAAQAA//8BAAEAAf//AAAAAP0A/wEAAf8BAgH///8A//8CAAD//wAAAf8BAP//AAAAAP4BAP//AQEB/wD/AQAA//8CAAD+/gEAAAAAAP8AAQAA/wABAAAAAAEA/v8BAgH//gAAAAEAAv8C/wAAAQD//gABAf//AAAAAQEAAAAAAP8BAAL/AQD/AP8AAAECAAEAAP//AAEBAP7/Af8B/wAAAQEAAAAAAAAA//8AAAD+AP4BAAH/AQAAAP4BAAEBAf///wEAAP8BAQEA///+Af8A/gEAAAAA/v8AAQAAAAAAAQAA/gAAAQAAAQAAAP//AAAAAAIAAP4AAAEAAP4AAQAAAAAAAgAA/gAAAgAA//8BAAL/AP8AAAD/AAEBAf//AP8A/wEA//8AAAEA/wEAAQD/EAUAVCf/kc0B/f3/AAAAAAGXl5lNTE02NzYB/wH/AQD//wABAQD///8AAAEAAP8BAAD+AQAC/wEA//8AAAACAAD/AAEAAAAA/wABAQD/AAEAAP8AAAD/AAAA/wABAQD+/wACAf8AAQH/AAABAQEAAAAA//8AAAAAAP8A/wH/AP8C/wD/AAEBAAAAAP7//wH/AAH/AQAAAP8AAAEBAAH/AAAAAAABAQEAAQAC/wACAQECAAEAAP8A////AQAAAAEAAf8AAQEAAQAAAQAAAQD/AAAA//8AAP4AAQAAAAAAAAAA/wAAAP8BAP7/AP8AAP8A6+jpAQAC/f7+/f///////f/+/QD+//8A//4A/v3+/v7//f7+AP7//wD+/f///gD///8A/gAA/f4A/AD//v///v7/AP7//////v////7//f3+/v///f///v8AAAAA/gD//v///////v4A/f8A/QD//gAA/wAA/v7//wD9/f8A/v8A/v8B/v7///4A/v3//gD//v///////gAA//8A/wL///8AAQAA/gAA/QD+AP//AP////7+/wAA/v8A/v7//v8AAP8A/wAA/wD//v0A/gAAAAD//v//AAD//v////8A/v8A//7/DA0MAQECAQEA+/36/gD///8A/v8AAAD//v7//////f8A//7+//3+/gD+///+/f7//f8A//7//f////7+/f7+/f4A/P79/v7+/gAA/f/+//7//P3+AP7/////+Pn3oZePw7izAAABFx4rOUJUAwQH8e/p6uHTAAAARCIACQX/AP4AAvwB//0BAP3+MiH9KBkCCQACHAMGFQUD/wAAAQD+Ah/yByLyCBDxCwEE1sgLAv0QFg0NJf8OBN0FAPMAAAAAAQICWScBUyD/AAD/AAAAAAD/9/b1lJKV9fb2AAEAAAAA/wD/AP8BAAABAP8AAQEAAQEA/wIAAAAAAP//AQAAAAAA//8AAQEAAAEA/wH/AP8B/wAAAf8AAQEAAAD//wD//wEAAf//AQAAAP8AAQAB/wAAAP8AAAEAAP//AAABAAD+AAAAAP8AAAAAAf8A/wD/AAEAAAEAAAAA/wAA//8AAP8AAv8BAAAAAf//AQD+AAAAAAEAAAEB/wH/Af4AAAH/AQH/AQABAP8AAQAAAAEBAQEBAQEBAP///wH/6OnoZmZqg4OE9PLyAAAAAAECAAEAAAABDA0CgoIIn5oOGRcJAAEH/v8H/wAHAAAEAAACAP8CAAECAP8C/wAAAAAAAP4BAP//AQACAAEC/wAAAAABAAAA//8BAAAAAAD/AP8A/wH+AAD+AAAAAP////7+////AP8AAP7+AAAAAAEAAAD//wD//wACAQEB//4A//8A//8A/wABAP///wAA//8B//0AAP8A//8C/wAB//4B/f4C/wACAAABAQAC/wEAAAAAAAEAAAAAAP//AP8AAAAAAP/+/wAAAAAAAAAA/v//AP4AAP8BAAAAAP//AAAAAP8AAP4BAAD+AP//AAH+AAEAAP8AAAABAP8AAP8BAP8AAAAAAP//AP//AAEAAP8AAAH+AAD/AAH9ANfvAAAA/wAAAhgKABoIAAD/AQEAAAEAAf//AQD/AAH+AAH+AAH/AAH/AAD/AAD/////AP7/AP/+AAH+AQD/AP///wAAAAH+AAD+AAH9Af/////9Af/+AAD/////AAD+AQD////+AAD9AAD+/wEAAf//AAD/AQD+AAAA/wAA/wEA/wAAAQAAAQABAAD/AAAAAAAAAAMB//7/AQIAAQD+Af8A//8A/wH+/wH//gD/AAH+AQD/AAEAAP8A/wD+AAH+AAEAAP///////gH/AAD+AAD/AP4BAAAB/wD/AAH/AAAAAP/+AAD+AAIB/wD+AAD+AAD/AAD/AP7+AQD+AQD/Af//AAL/Af8AAQD//wD/AAIAAAH/AAH/AAD+AAH+AAH/AAH/AAEAAAD/AAD+AAACAAH/AP8AAP8AAP8BAAD/AAL/AAD/AP8A/wH+AAD+AP//AAH/AAH/AAD/AAH/AAEAAAAAAAH/AP8AAAAAADASAjsc/wABAAAAAAD+7+7tgYKD9fX0AAH/AP8AAQD/Af//AQAB/wD/AgEA/wEAAQAB/wAAAAABAQEB/wAA/wAA/wAAAAEB/wABAf8AAQABAQEBAAEBAQL/AAD/AgEAAAEBAP//AP///wD//wD///8AAAAAAP8BAAEAAgABAgAA/wD//gAAAP8BAQEAAf//AAEB/wEB/gD+AAEBAQAAAQEAAP//AP8B/wAA/wABAAD/AAEA/wABAf8AAQABAP//AAAAAQAAAP8AAAD/AQAA/wAAAAAB/wEBAQAAAQAB/wEBAAD/AP8AAAAAAAABAfDu7v3//f//Af/+AP//AAAAAP////3+/f3+/v7//v7///7///3///3+/v4B///////////+AAD//wD9Af7///3+//0A/f7//v7///7/AP8A//3/AP/+/v7///3+/v/9////AP3+///////+/v7/AP/9///9AP//////AP///v///v7/AP3//v7//v//AP/+///+//4A//////4A//79AP7/AP3/AP/+/v//AP7/AP7///8AAf///////wAAAQAAAP0AAf7+AP//Af8BAAD+Af3/Af//AP7+AAD+AP4A//////3//wABAgAA/wABAfn4+f7+/f3/AP3///3//v4BAP7///3//f0A//8AAP/+/vz///7/AP7+/v4A/v3+/v3/AP7//////v//AP7///7+AP7+//79//3+/v3//uXh3pWEfcm9ugAA/hAWIUFKYQ4QFwICAuXe1fv18AsHAUsm/QAAAP8CAf7/AQL//gABASUYAE4lBCoHBysMCQ4GAAIAAP4E+/4c9gEGAAUO9REK/fjdCLOyDcW/FNS9EP3iBAD8AgAFAAAD/woG/4U3ASYMAAAA/wAA/wAA/7y8vb2+wQEAAAEAAAAAAAABAAABAAAAAP8AAP//AAH/AQABAAACAf8AAAEAAAD/AP//AP8AAAD/Af8C/wEAAP//AP8AAAABAAEBAgD/AP8BAQAAAAEAAAAA/wEAAAAAAAAAAQAAAQAAAAABAQAAAQABAAAA//8BAAEAAQD+AAAAAQABAP8AAAAAAQAAAP8A/gEA/wAAAgAAAQAA/wEAAP///wD/AQAB/wAAAf8AAAAB/wEB//8B/wAAAf8AAP8AAAAAANra3FZWW6amp//+/gABAQABAQD/AQD/ARAR/5KNBXZxEgcGC///Bv//Bv//BQD/AgABAQD/AQABAgD/AQAAAQAAAgD+AgABAgEAAv8BAf//AAAAAf8AAAEBAAAAAAD/AAH/AQAB/wD//wD+AP8B/gEA/wEBAAEA/wEC//8BAP8B/wD//wAB/wH/AgAB/v8A/wAA//8A/wAA//8AAf4BAf//AP7+AP0CAf4AAf8BAP3/AQAAAP7/Afj3AAAAAv8AAAAE/wD+/wD+/wD/AAAB/wAAAAABAAAAAQD/AQABAQD//wD/AQAA/wAA/wACAAAAAAD+AAAA/wAA/wD+AAAA/wD+AAAAAAAAAQAA/wAAAQAAAAAAAAAAAQAAAQAAAAD/AAABAAD+AAD//gD6/QDg9AAAAQAAAAAfCgACAgABAP///QD/////AP8AAAD/AQAAAQD//gAA/wD//wAA/gAB/wAB/gAB/wAA/v8B//8B/gEA/gD//wAA/gAA//8A/wH/Af8B/wAB/wAB/wAB//8A/gAB/gAA/wEAAAD//wAA/wAB////AQAAAQD/AAH/AQEAAf8BAP7/AAD/AP8BAAAAAAD+AAECAAD//wAAAf8A/wABAAH+AAEBAAEAAQAAAv4AAP///wABAAEAAAD+AAD+AAAB/wAB/gH//wABAP8AAAAB/wAA/wEAAAD//wAA/gAB/wAB/wAA/wEBAQL/AQEAAP///wACAf8A//8BAP/////+Af///wABAAAAAAD//wAAAAAA/wABAAABAAD//wD/AAAAAAABAQD/AAAA/gAAAAABAAAB/wAC/wAAAAAA/wAA/wAB/wD/AAACAAABAAAB//8A/wAA/wAAAAD/AAAAAAAB/wABAAD//wADAv5IHwANBgAAAAAAAAAAAbi3uKOjpQAAAQEBAAD/AAABAQAAAAEAAf//AAD/AAAA/wEB/wAA/wD+/wAAAQEBAAD///8A/wEAAAD//////wD//gD+////AAAA/wAB/////wABAAABAQAAAQD/AAEBAQABAP8A/wD/AP7/AAIA/wEAAAAAAQAAAP8AAP8BAP8A/gAA/wEAAv8A/wABAQAAAP//Af8BAQEBAQEB/wAA/wEAAQEBAAABAgAAAAEBAf//AAD/AAECAAH/AQEA/wD/AP8AAP//AP//AQAA/wIA/wD/AQAAAgAAAQEA/wH4+Pn4+fn/AP//AP78/v39//7+/v///wD+AP/+///9/v7//wD9/v/+/v/+/gD+/wD9/v/+/v7+//////7/AP/+AAD9/wD/AP/9/v///////gD+/v7+/wD+AP/+AAD+AP/8AP/+AP///wD+AP8A/v////////7+AP///gD9AP7+/wD+/v8AAAD/////AP7////+AP7//v/9/////////wD///7+/////wD//v///////wAA///+///+/wH+//////8A/wD+/wAA/v/////+AAD+/v/////+AP//AAD/AAD+/wAAAAD9/f3//gAA/wD5+Pj9///9//7+//7+/wD+/v39///+/QD+/v7+/v/8/wD//v7/AP3+///9/gD////+AP7+/v/+/v//AP79/v79AP7////+//7v6+uzp6OId3DUzMkAAAEXHCZIUWcSFx/8/f3v7ena0MEAAP9NJQElD/7+//8AAAD/AQD+/QIA+wEA+AFEJwRLIw41DA0QB/sAA/wCD/kBEvz+/QERDfUKDfgI/QW0vwOjtgba1wEB+f/+/gEAAQL+BQD/AQEeCgBgJ/8AAgAAAAAAAP4AAP6wsK8BAAD+//8AAAAAAP8A//8AAf8A/wAAAAD/AP///wAA/////wD+AAD/AQD/AP8BAAABAAAB/gH/AAAAAgEA/wD/AP////8AAP8A//8AAAEAAAH/AP//AP8AAAEAAAAAAQABAAAA/wAAAQAAAAAAAAIAAAAAAAEAAAEAAAAB/wABAAEAAAABAQAAAQH/AAEBAP8AAQEBAAH//wEBAAABAP8AAQAA/wEAAAAAAAD//wAB/wAAAP8BAAAB/wC+vsBUVFjEw8MA//4A/wAA/wAAAAAAAAEhIASinRFbWhYAAAn/AAcAAAX/AAQBAAMA/wIAAAIAAAEB/wEA/wEA/wL/AAAAAgD//wAAAAAB/wAAAQD/AP8AAP//AAAAAP8AAAD/AP//AAD///8AAQD//wH/AQL//wAAAAD//v8AAP4BAf//AAEAAAH/Af8AAP8A///+AQD/AAH//wAA/////wH+AAH+/wAAAAH+/gD+/wAAAAD/AAEBAADw8f8AAAD/AQAAA/8AAAAAAAEAAP8A/wEAAP8A//4AAP8AAP8A/v8AAAAAAP4AAQAA/wAA/wAA/wEAAQAAAAEAAAAAAgAAAAEAAQEAAAAAAP4AAQEAAQAAAAAAAAAAAP4A//8AAAAA//8AAAAAAAAAAAAA6/kA6vYAAAAAAAAAGwv/Af8A//4AAQAAAAEBAf8AAQAAAf8A//8AAQEAAAAAAAEAAgEAAf8AAQAAAAEA/wEB/wAAAP//AP8BAAABAAIAAAAAAf8BAP4BAf8AAP4BAP3/AP8AAP8AAQAAAAD/AQEBAAD/AQEA/wEBAAAAAP8AAAAAAP8AAAAA/wEBAAAAAgAB/wD/Af8AAf8A/wAAAAD/AP8AAP8AAP7/AQAA//8AAP8A/wABAQABAQAAAAD+AAEAAQAAAf//AQAAAAAAAQD/AAABAAAAAAD/AAAAAQAAAP8AAf8AAQAAAf8AAP8A////Af8AAAABAgD/AP4AAAD//v4AAf8BAf4BAf8A//4AAP8AAv8A//8A/wEA/gIA/wEAAgAAAAAA/wAAAP8AAQAAAf8AAgAAAf8AAQAAAP4AAP0AAAAAAQAAAP8AAf4A/v8AAP8AAP8A/v4AAAEAAP8AAf8AAf4A//8A//4AAgAAAf8AHAoAOxwAAAEAAAEAAAEAAP+IiYvh4eL+/wAAAgD///8AAQAAAf8AAP8AAAEA/wD//wEBAQD/AQEA//8AAAABAAABAAABAP//AQABAQD//wEBAQABAAAAAQIA/wAAAAD//wH/AP8BAAEBAQD/AP//AAAA/wABAP8BAQAEAgIA//4AAAAA/wAAAAAAAAAAAAEA/wAAAQAB//8AAQD//wEAAf8BAP//AAABAAD/AAEAAAAA////AQEB//4AAAEBAAABAQD//wAAAAD/AAEBAQD+AAACAP//AQH+AAEBAAABAQH+//8CAP//AAAA5OTi6OfnGh0d/wAAAAAAAf8A/wD/AP//AAAB/wAAAAD//wAA/wD/AP8BAP//AQD///8AAAD///8AAQAA//8A/wEBAf8A/v///wAA/wD//wEAAf4A/wAA//8A/wD+AP8BAAEA/////gD/AAAAAf//AP7//gEAAP8A/gEB//0A/wD/AAD/AP8AAAD//wABAP8AAP8AAAAAAAD//v8AAQH//wAA/////v8AAAEAAgAA/wD//wAB//8AAAD/AQAA/QEAAv///wAB/gD/Av4B/wH/AAAB////AP8B/QH/AQABAP//AAD/8/Dx/gAAAAAABQcH/v//AQEBAP8A/f/+AQAAAAD+AQEBAQEC/gD/AAAA//8BAP4AAAH//wD/AP8AAf8AAAAAAAEA//7/AAEA+fX44N7a2dLRycC96+fjAAAAAAABEhQdN0FfBQoY8PDy9ff60cy/9OviAgD9USUE//4C/wH+Af////7/AAIAAPsDAgP/Ihn/Tz/65tYM/vz8/gL4/x33AAb//v7/BAL8Exf3/9cKBAMBAQH+CQP/AwAG/vf8//8AAQYA/gYBAP3/WyYAkNQA6vn+AAAAAAD9ubm67+/wEBAQAP8AAAEAAAEAAQAA/wAA/wH/Af8AAAAAAAEAAQAA/wABAAD/AQABAAABAAEAAAD/AQAAAAD+AQACAP8AAQAA/gABAQAB/wD/AQABAf8BAAEC/wD/Af8AAAD//wABAAEAAAAA/wAAAgAA////AAAAAQEB/wD//wD/AAAAAAAA/v8AAQAAAQAA/wABAP///gAAAQD//wEA/wAAAv8B/wH/AP8B/wEAAAD//wEBAAAA/wD/p6ipc3N36OfnAAD/AAAAAAAAAAAAAP8ALzAFlJAONjIL/f0DAQAFAAEG/wAEAAACAAABAAECAAABAAABAAEAAAABAf///wAB////AAIB/////wAA////Af//AAAA/wAAAf4A/wH/AQD/AAAAAAEBAAH/AP8A/wAAAAEA/////wH9AQD//wH/AAD+////AAH/Af///gAAAf8B/wAAAAAC/gAB/wIA//0A/wEC/v8B/wEA/wAC/wAB/v8BAQEA6ukCAP8A//8AAAkBAAAAAAH/AAAAAAEAAP7/AAEBAP/+AAEBAP8AAAAAAAABAP8AAAH/AAAAAAABAAAAAAEAAP8AAP8AAP8AAAH/AP8AAAAAAAD/AAAAAP8AAAEBAAACAAH+AAACAAAAAAAAAP//AAEAAN/2AAD+AAAAAgAA/hwKAAEAAAEAAAABAP//AAAAAAD/AAD/AQEB////AAEAAAAAAP8AAP8AAAAAAAD/AAAAAAAAAAEBAQAA//8AAQEAAf8AAAD//wL/AP8BAQAA/wAAAAD/AQIBAf7//v8AAQD//wEB/wD/AgACAAAAAAEAAAAAAP8BAQD//wEAAAEBAAAAAAD/AQAAAAABAAIA//7+AQABAP//AAIAAP8AAAD/AAAA/wH/AQABAf8B/wH/Af//AAAAAAEBAQD//wH/Af8BAAD9AAACAAABAAEA/wAAAAH/Af8AAAEA//8BAAD/AAAAAP8AAAAAAP8AAAAAAQH/AAIA////AAD/AQAB/wAAAAAAAP8AAAH/AAD/AAACAAEAAP8AAAAAAAEAAAABAAD/AP8BAAH/AAH/AAACAAH/AP8CAAD/AP8AAAEAAAAAAAAAAAD/AP8BAAEBAAD+AAAAAP8DAAD/AAAAAAEAAAABAP4AAAICAEMdAMznAOz5AAD/AAAB4+Hhi4uMk5KQAAECAAEAAP//AAAAAQAB/wAAAAABAAD//wAB/wEAAQAAAP8BAAH/AP8A/wAAAQAAAP8AAQEAAAAAAAAA//8AAv8AAAEB/wD/AQAB/wD/AAAAAQAA/wEB/wAA/gAAAf//BAAAAf8B/gAAAAH/AQABAP8BAAEAAAAA/wD/AQECAP//AAD/AgAA/gABAQD/AP8AAAEAAf8A/gABAP8AAQAB/wAA/wAAAP8AAAAB/gD/AQAAAAABAgD/AAEBAP8BAQAAAAD+//8AAQAA/wAB/gD/Af76/PHv8BkbHP8AAAABAf///gAAAf8AAAAA/wAAAP8AAAD//v8BAQH+/v8BAAAAAP8AAQD//wAAAQEBAAD/////AP///wD/AP4BAAAAAAD+AP4AAAD///8BAQEAAP///gD/AgAAAP8A/wAAAAD+/wEAAP7/AP8A/wD/Af//AAAA/wAAAQAAAP//AAICAP7////+/gEBAgAA//8AAf//AP8A/wAAAP8AAAH/Af0BAAH/Af8A/gEAAv8A/v8AAAD/AP4A/wEBAQAAAP0AAQH/AQAB////AP8A/wAA/wIAAQD/////AOzp6AD//wABAd/X0wMBAP3+/gIBAv///wACAAEAAQQFBQMDBAIBAQMFBQAAAQIDAfLu7/j29QIDBAcHCPb19fz7+u7r6unm5Ork5OXh3f7//gAAAAAAAAAAAQACBgwXLNjj8vzf0/4CAv37/Onc2P//+jQaBDga/v//AQEB/v/+AP4A/wL+Avz+Av39AwAC/xMU/vUu8vTjCAz2/f8Z9gEAAwD/AAMC/goM+RUA+g0BCAkG+joU9v78Af36AgDxAAQTAgD8AP///x0I/08fApza/f8AAAAAAebk47O0tVxcWgEAAQAAAAH///4AAAEAAAL/Af8A/wEBAQAA/gAAAQEAAAAAAAH/Af8A/wAAAAAAAAAA/wAAAQEA/gABAf//AAEBAAD//wEAAP8B/wEAAAAAAAEAAAAAAAD/AAACAAD/AAAAAAEAAf8B/wD/AQD//wABAAEAAP4AAgIAAP8BAAD//wABAP//AP8AAAEAAQIBAP8A/wD/AAAB//4AAAEAAP8B/gIAAgAAAf////v6+5CRk4KEh/Xz8gAA/wAAAQAAAAAAAQAA/j0/CJiRESMhCv7/AwIBA/4ABwEAAwD/AQAAAgAAAP8AAQD/AQH/AAABAP8A//8AAQH/Af8AAQEA/wD//wAB///+AAEAAAAB/wD///8B/wABAP/+AQAA/gAB/wD//wH///8BAAAA//8B/wH/Af8A/gD+/gABAP/+AAL//v///gAB////AAAAAP8BAQD/AP/9Af7///4AAP7/AP8BAQAA//7+Af8BAP8AAOTgAgACAAD9AAAJAQD+/wAC/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wABAAD/AQAA/wABAAAAAAD//wAAAQAAAAAAAAAAAQAA/gAAAQAAAQD/AAAA/wAA/wABAAAAAgD//gD/AQD/AAAAAAAA/wDl9gEAAAAAAP4QCf8hCwAA/wAAAQD+AAAAAP8AAAAA/wABAAAB/wAAAAD/AAAAAAAA/wABAQD//wEAAAAAAAABAAAAAAAAAAAB//8AAQEAAf8A/wH/AAAA//8AAQAB/wH/AAD/AP8BAQAC/v//AQAA/wEAAf8A/gABAQAAAQAAAAEA/v8BAAD/AAAAAAEBAP8AAAAAAQAA/wD/AAEAAf8B/gAAAAH/AgEA//8CAAD+AAH/AQAA//8BAAAA/wAAAQACAAD//gD/AQABAP8BAAD/Af8B/wEB/wD/AAH/Af8AAQAA/wAA/wAAAAH///8BAAD/AAEBAAD/AAABAQD///8BAAAA/wAAAf8AAAAB/wD/AQD/AAAB/wD/AQAB/wD/AQD//wABAQD/AAAB/wD/AAABAADx+wAKBQAD/gABAAAA/wAAAAAA/wAAAAEAAf8B/wD/AAAAAQAAAAAA/wD/AQAA/QD/AgAA/wAAAAAB/wAAAAAAAAATCwBHIwCn1gD+AAAAAAAAAKCgokhIR0xLSwEBAP8BAAD/AP8AAAEAAP4A/wEAAQD//wAAAP8BAAEAAAD+AP8BAAIAAf8A/wABAQAAAP8A/wEAAAAA//8BAQAA/gEAAQD//wEAAAAAAAAAAAD/AAIA/wAAAAABAQQAAP4B/wD/AAD/AQAAAQABAAAAAP4A/wH/AAABAAEBAP//AP8AAAH//wABAf8A/wAAAP8BAAAAAAD//wABAQD//wABAAH/Af8A/wEAAP8AAAEA//8BAQH//wEB/////wAAAQAB////AAABAAD/AP8AAP/l5OQlLCwBAP///v7/AAIBAP////8CAQD/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AAAAAAAAAAAAAf8B/wAAAAD/AAEBAP//AAIBAP//AAMAAP8AAAABAAD/AAACAAH/Aeb4A9L2/CEHABIGAAEAAP8AAP8AAP//AAEBAAD/AAEBAP8AAP8AAP//AAACAAH/AP8BAAAAAAP/AP8CAAAAAPX7AcXtA7jhA/j++QEEAP/9/wEAAP8B1dXWkpOVh4eFAAABAQEAAAD///8AAQEAAgAAAAEB/wAA//8AAf8A/wIBAP//AQD/AAACAP8A/gH/AAEBAQD/AP8A/wEBAP8BAQD/AAD/AAAB//4B/wEAAP8AAAEAAQABAAEAAl9fWAABAAAC//8AAAAB/v8A/wAAAP3//gABAAAAAQAB/wAA/////wD/AAD+AAH//wEA/gAAAQD/AQABAAAA/wAA/wD//wABAP8AAAEA//8BAf8AAf8BAAEAAP8B/wABAQEAAQABAf8AAAEBAgAAAQEAAebl5f7//////v3//f7+/v4AAP4A//7///7//v/+/v/+/v///v//AP////4A/v///v7+/v7///7//v0A//7//gD/Af//AP8A//7//v3/////AP7+APz+//7////+///+/v7+/v///////v7/AP79AP//AAD/AP//AP8BAP79//3//v////7//v4B////AP7+AP//////AP8AAf4AAP/+AP/+/v//AP////3/Af4AAf8AAAAAAf/+//7+/gH/AP8A/QAAAP7/AAD/AP////7////+//4AAP//AP7//+/r6a+imff29QABAQEBAAAAAAAAAgECBgIFDQIDDwMFDwMEEQMGEQIFEgIEEwEFFAMIFwIFFQEGFAIFEwMFEgMGEwAHFgMHFgMGGAMHGQIJGgIJHAALHQMLHgANIwAOJv8DDP//BAAABP8AAQD56f3w3AYB/VsuAhAH/gD+/v/9//37APX1AeLfD/HoEAD9//f6Ae/3B+v3BtPaFuHgCwsN/gAB/wEAAQH4AfjXBP/0AgYI/wUD/wH/Af3/AAQN/gYg/wQ1/QUt/gAd/QEQ/v8F/RkO/lwtAgAA/wAA/wAAAOfn5ri6uwAAAAABAAAAAQABAAABAQEAAAD//wH//wAAAAABAwEAAAEAAAEBAAEAAQAAAAEAAQEAAAABAAAA/wD//wABAAD///8AAAABAQD/AAAA/gAA/wAA/wAAAAAA/wAA/wAAAAEA/wAB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sgYA/v0AAQIAKAT/A/4A/wAAAAEA/wAAAAAAAf8AAAIA//8AAP8AAAAA/wAAAf8A/gIAAQAAAf4A/wEAAAAA//8AAQAA/wAAAAAAAAEA//8AAP8AAAEA//8AAQAAAAAA/wEAAQAAAAAAAAAA/wAAAAEA/f8B+f0AAAEBAAAADgMA/v8AAgAAAAAAAP8AAQAA/wEA//8AAAAAAP4AAAIAAP8AAAEBAP//AAEA//7/AAIAAQAA/wABAQD///8BAQEAAAAAAAEA//4AAAEAAAAAAAAAAgEB//8AAAEB////AQABAP8AAAEAAf4AAAH/AAEBAAAAAv//AAABAP8AAAABAf//AAABAAH/AP4AAAEAAP4BAAEA/gABAf8AAAABAgD+AP8B/wAAAQAAAAAAAQD//wAAAf4AAQH//gEBAP///wAAAP8AAQEAAAEAAQAA//4A/wIAAP8AAAIAAf4A/wAA/wD/Af8AAAAAAP8AAAIBAAD/Af8A/wAAAP8AAQEA//8AAgAA/wABAQD///8AAAEA/wAAAP8AAAEAAAAAAAAA/wEAAQAAAP//+f8BAP8AyvAB+Nz/aiIAEQcA//0AAAIAAwAA//4AAQEA/f8AAAEAAP8A/gEAAP8AAAAAAP8A9wADyfEMst8D8fsBAgD/AAABAgElGgMICv3O1v0AAP8AAQHs6el0dnepqaYTERP/AP8CAQAAAAH//wD/AP8BAAD/AAAA/wAAAQAA/wACAAH/AQD//wABAf//AAABAAD/AP8C/wH///8AAQH/AP8BAQEAAAABAP///wABAQEAAAAAAP8CEhMTkpGMIyIhAQEAAP//AAD+/gD/AAEAAQAA/wD/AAD+////AAEA/wAA/wH//wD/////AAAC/wEAAP8AAQABAP8B/wEAAAEAAAAB//4A///+AAD/AAAAAf8BAAIBAAEA/wAAAQAAAAABAQAB/wD/AAAA7erq7evu/f8A/f7//f///P7+/////gAAAP/+/v8A/v0B/f8A/gD//v4AAP4A/wD+/v0A//8A/gAA/v////7//wD//v////4A/gD+/f8AAAD//v8A/v/+/v8A/gD//f/+/f/+///+//7+//8A//8B/QAB/wEA/f/////+//7//wD+//7///////////8B/gD/AP///v/9/f///gAA/wD///8A/gD///8A/gAA/v////0A/P7//gD/AP4A////AAAA//8B/v7///////7/AP8A/v8A/v7+9fXzqJmQ2dPM/wAAAQAAAAABAAABAAEEAAAD/v/+/fz5/Pz6/f38//3+/v39/v39/v39///9/v7///7+AAAA//4A/gAB//8B/wACAAAB/gAB/gEDAAACAAAE/wEG/wMP/wYS/wII/wADAgAAAQEA//HaAPbjNhT+eDf9EAsABAQEAf4D/fYC+fQC4+UF0+z+2f377P/9AAT9Bgj3BAX9Bgf6ExH3/+sA+dID+sn+5dkH/voBAwn/BxP8Bx35Axv6AQb8APn9//b//vr/AAAB/wIAAQkAAQMAAAAAMxkAIxABAAD/AAAAAAAAx8XK6urqAAEBAQACAAEBAgEA/////wD/AAAAAQAAAf//AAAAAAAAAAEAAAEAAAAAAQAAAQAAAf/+AAEBAgIC/wEAAQEBAQAAAAAAAAD/AAD/Af8B/gEA/wH///8AAP4A/wEAAQABAgACAAABAAACAP8BAP8BAAAA////AAD//wIAAP8A//8AAQAAAAEAAAAAAAD/AAAAAQAAAQEAAP8AtLW4V1db09PRAAD+AAD/AAD/AAAAAAEBHR8DnZgNZF8QAQAEAQIGAP8H/wAEAAAD/wAB/v8CAf8B/wADAf8BAAACAAAC/wAA/wAB/wEAAAABAf8BAgABAQAAAAH/AQEBAAIA//8BAAAB/wD//wD/AAD+Af/+//8AAAD/AP/+AAH/AQD/AAH+/wH9AP/+AAD/AAAAAP8A/wD/AP///wD9/wD/AP/+//8AAQEA//8AAAD/AAAC//8A/wAB/QAB/wEB//8B/wAAAAAA/v8BnpoJ8uz/AAEBABgBAC8FAAEAAQAAAAD/AAEAAAEAAAAAAP/+AAD/AAD/AP//AAAAAP8AAAAAAAH/AP8AAAD/AP8AAAD/AAD+AAD/AAAAAAH/AAD/AAIAAP//AP8AAP8AAP8AAAABAP//AAD/AAAAAAD/AAD/AO/6APL6/wAA/wD//wcCAAEAAAD/AP//AP8AAAABAAAAAAAAAQEAAAAAAAD/AAAAAP//////AP8AAAAAAAL+AQAAAAEAAf//AAD//wD+/wH/AP/+AAEA/wEA//8AAf8AAP7//wAAAAD+AAEAAP//Af4B/wD///4BAP8BAQD////+/wH/AAEA/wD+AQD+/v//AAAAAAH/AQD/AAH+/wEA/wH//wL+AAD/AAH//v//Af8AAAH//wD/AP8A/wD/AAH/AP8AAP//AAH+/wD/AAEAAAEBAAAAAAAAAP7+AAABAAD/AAAAAP/+AP8AAAIAAAAAAP8AAP8AAAEAAAD/////AP8AAP///wAA//3/AAAAAAD/AAEA/wD/AAEAAAEAAAEAAAABAAAAAAAAAAAAAAD/AP8AAP3+APL6/wABAAD/AtPxBJXdAOX3AAECAAD/AP3/AAACAP7/AAD/AP//AP4AAAD+AP//APP7AcbvC5LbEKfcBPL8AgEAAQADDQoDXVb5sqH0cmr8AAD/AAABAP8AAAAAvry+jY6Q////AgEA/wAB//8AAAD/AQAAAAEAAQEAAQEAAP///wAAAAEA//8AAQEBAP8BAf///wABAAEA/wEAAAEAAQEAAQEB////AAABAAABAQEA/wEAAAD//wEAAgAA/ykpJ4qMhQ8ODwEBAQABAQH/////AP8A/wEAAAAAAAAAAAEA/wAB/wEBAQEAAAEBAAAA/wH/AAAA///+//8B/wD/AQH/AAABAAEBAAAAAf8BAAEAAf8BAAD/AP///wAAAP8BAP8A/wAAAAABAQAAAfLw7+Xj4/7//v/+//7+/gD+//3//f/+/v3/AP/+/v4A/v7//////v//AP7//v3+AP8AAP3/AP////7//v7////+AP7/AP7///39AP//AP7/AP3/////AAD//////wD/////////AAD+//7//////v/+/f7///7///4AAP0AAP//Af//AP8AAP7/AP7///7/AP4AAP8BAP4A//8AAf//AP//AP/9AP/+AP7+////AP4A/wAAAP/+AP8A//8BAP////////8AAP/+/wAAAQAAAAAA//Ty8qqbk9DIwv7/AAD/AQABAwAAAwAABf8ABP//AAD9/gD+/QH+/P79+/7++/79/f79/P79/f78/f///v///v7+AP8AAf7/AAABAAAAAgABAwAAA/8ABf8BBAABB/4BDf8GEAADCgEBAAH/AP7+AAD57QHv0QsB9Wct/xgNBAYLBwwTBAwRBQ8IBhMBCBT1CAb7/M3y+cv299r8/fYE//X2+fwH8QME+f/k/wPmAeLlCfz2AvwH/gcg+gcc+gII/gL+/gH+AAD9AAD+/wL6Af/6AAH8AP8EAQEIAgABAA8HATcbAwAAAAAAAQAAAN3c2MLBxQD/AP4AAAAAAP4AAAEAAQEAAQABAP8AAAAAAAD/AAEAAAD/AAD/AP8AAAABAP8AAP4BAAD///8AAAEAAAAAAAAAAQAAAQEAAQEBAAAB/gD//wD/AAEBAAACAQAAAP8B//8A/gAA/gAA/wAAAAABAQABAAABAAAAAQEAAAAAAAAA//8AAAH//wEAAP8AAf//AP8AAfn6+qOjqGNjZ+fm5QAAAAAAAAAAAQAAAQAAAS0rBKmiDUpFDf8BBQECB///BAD/AgAAAv8AAgEAAgIBAP8AAP8AAP8BAQH/AQAAAP//AAEAAAABAAAAAQAB/wAB//8B////Af/+/wD/AP//////AAAAAAH/////AP8A/wEC//8A/////gAAAP8A/wAAAAD+AAAA/f8A//8AAQAAAP/+/wAAAP8A/////wD/Af8AAP7/Af8AAf7/AP//Af8AAv7/AgEAAP7/AP4BAf4AAAD/ALi6CaymCQD//wAE/wBBCQAYAwAB//8AAAAAAQH/AAAAAAD/AQAAAQAAAAAAAAAAAAAAAAD/AAAB/wD//wABAAAAAQAA/wABAAD/AgD//wD//gAB/wABAAD+AQAA/wABAAABAQAAAAAA/wAAAQAAAgD//wAAAQD//wDu/P/5+wAAAf8AAf8AAAD+AAAAAAAAAAD/AAD+/wAA/wEBAP8AAAAAAQAAAAAAAAAAAQABAQAA/wAAAQD/Af8B/v////4BAAEBAAEAAQH/AAABAAAAAAH/AAEAAAAB/wABAAABAAAAAP7/AAAAAP8B/gAA/wEB/wAB/wAA/wAB/wD//wAA/gAA//8AAAICAAEA/wD//////wAAAAH//wAA/wABAP8A/wD//wEA/wEA/wH/AAH/AP8B/wAAAAAAAAACAAD//wAAAAABAQAB/gABAAAAAAD//wABAQAAAAAAAAAAAAACAAABAAD//wAB/wABAAABAAAAAQAB/wAA/wAB/wACAQAA/wAB/wAB/wD/AAD/AAD/AQD/AAAAAAAAAAAA/wAAAAD//wAAAAD/AQD/AALn+gLi9gECAQAA////AADT8gKD1ACu5ADw/AABAAD//wAAAAAA/wD//gD8/QDb9QOs5w6E3BSf4gnZ8gH8AQD/BAUDAkpD+6Sd8ZGO9yMu/0VH/TEuAAAAAAAAAQD/AAAAAZ2bnsbIyP8AAQAAAAEAAAEAAP8A////AQAAAP4AAAABAAEBAP//AAEAAAAA/v8A//8BAQD//wD/AAD/AAAAAP///v///wEAAQEB/v8B/wABAAEA//8BAAH/AAIAAAAA/wBOTUtxb2kBAf4BAP8A/wABAP8B//8AAP8AAAAAAAH///8A/gD///8AAAEAAAEAAAH/AQAAAAABAQAA/wAAAP//AAAAAP//AAABAP8AAf//AAH/AAEAAQABAAEAAAAA//8BAQD/AAAAAAAAAP8AAADj4eH//f/+AAD////9/v7+/wD+AP///wD+/wD+/wD+/wD9/gD9//3+///+//79///+/v/9/v//AAH+///+/wAA/v///gH/AP7//v7+/v8AAAD+/wD8///+/wD9/gD//wD+AP7+AAD9/v7+//7//wD//v///////gAA/gD+/v/+/wD//v8AAP///////////wH+/QAA/wD//v7////+//7/AAH/AP8AAP///wD/AAD+/gD+/////wD+/v/+//7///4BAAAAAQH+AP79//7w7OuhkIXOxL0AAQAA/wAAAQH//wAAAQIA/wMAAAEA/wIAAQAA/wD//wAAAAD/AP8A//4AAP//AP8AAP4A/v7/AAEA/wAA/wAAAP/+/gEAAQH/AAP/AAUAAAUAAAn+AgkBBQsAAgoAAAL//gH/AAAA//v/7dEB+u1aIv5LJgEDCQQCDAH9BQABAQIC/QEF+wIdEPxgH/NmHfgHAgLM+Qni+gb6AvAAC/fu5wMB9P/g8wnI8RH8/AcNFf0HDwD++gEAAQMBCAQACgP/EwMBFwL/CQD//f//+wEA//8BBwEAAgAA/wE6GwIDAQIAAP8AAP8AAAC9v7wAAQACAP8AAAACAQD/Af8AAP8A/wAAAP///wEAAAEAAAEAAAH/AQABAAD///8B/wABAAL/AAAA//7/AAAA////AAAAAf8BAQAA/wAAAAABAAECAQH//wD///8AAAAA//8AAAEBAQEAAP8AAAAA//8A/wAAAAAAAP8A/wAAAQAAAQIB/wD/AAD/AAEAAAEBAQH/AACKjJBhYWPr6ukAAAAAAAEAAAAAAP8AAAA6OwanoQszMAkA/wUA/wf+/gUBAAUAAAP//wH/AAAAAAAAAAIAAAIC/wEA/wD/Af4BAf8CAAH/AAH//gEBAf/+//8A//8B/wAAAAAAAQD/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AP8AAAEAAAEAAP//AAAAAP4AAAEA/wD+AP8AAAAAAAAAAAD//wABAQD///8BAAEBAAH+AQD/AP8BAAD//wAA/wEBAAH+AP8BAQIAAP8AAAABAQAAAP//AAEBAQIBAP//AAAA/wH/AAAA/wABAv///v8AAAAAAP8AAAEAAAD/Af8A/wAAAP8A/wEBAQAAAP//AAABAP/+/wEBAAAAAP//AAAAAAH/AAAAAAABAAD/AAIAAAAAAAABAAACAP/+AAD/AP8BAAAAAAAAAAAAAAH+AP8CAAEBAP8AAAAAAAAAAAEAAAAAAAD/AAD/AAACAAAAAAD/AAAAAP8BAAIAAP4AAAIAAQD//wAAAP8AANDxAP8CNC7+oZr1pawIaXT/AP8CAgECAN73/5XaAQICAf4AA/4ABP8AAwMDAQAA/wL///4CCQf7Skf+Xl/3OUH6AAAAAAAAAAAAAP8AAAEAAAAAV1MAp6oAvsUCAAD9AAAAAAD/tLS0p6epWVhY////AgAA//8B/wH/AgAA//8AAAD/AQIB/wD/AP8AAAAA/wEAAP//AQABAAAAAP8AAAAAAQAAAP//AAAAAAAAAQEB/v//AQABAQH//wAAAgAAAP8AAAEBAQsLC5WTjlNUUAIA/wH///8A/gAAAAEB/wD//v8A/wAB////AAABAQAAAP8AAP7///8AAP/+//7//v8AAAAA/wAA/wH/AAEBAgEAAAAAAP8AAP8B/wL//wABAAAA/wD//gD/AP8AAQAA/gEBAdjR0O3r7P/+/v79/v7//v79AP7//f3//v3+/v7//v79/v4B//7/AP//AP79AP/+//7+//3//v7+AP4AAP7////+/gD///////3+//8AAP8A/v//////AP7/AP8AAP7//v3/////AQD/AP///f7+////AP/+/wAA/////gD//wH+////Af/+/v7/AP//AAD+///+//7/AP7+AP4AAP8AAP8A/wD///////4AAP//AP////8AAf8AAAD+AP//AP//AAD///3//t/Z1p2LfNjQyQAAAQD/AAAAAQAAAAD/AQABBAAAAgABAQD+AgABAgABAf8CAwAAAgAAAgEAAQD/Af//AAAAAf///gD/AAABAQD+/wAAAAD/AwAAAQAAAgD/A/8BBAAAA/8BBv8CCP8CBQABAwD//wAAAQH25gDw1w0B93YtARkLAwAGAgMH/gEBAP34/wD3/QH+/v8D/v8DAAADAQIEACER9wYD/fn+AOz9CAH5BxT/A/X4BgD8ChoJA+/8DrLgD/H/BAEMAgAGAAAAAQD8AQIB//4C/wH/AgEBAQAAAQD/AgAFAQMLAQEIASsdASoWAQAAAAAA/gAAANPT1OLj4v8BAAAA////AAIAAAECAAEAAAEAAAABAQACAAAA/wAAAP8A/wABAgD+AAAAAAAA//8A//7//wIAAAEA/wABAQABAQAAAAEAAP8AAAIAAQAB/wD/AAABAAEA/gAB/wEAAAABAf//////Af//AAEAAAEBAAAAAf8AAAH/AAH/AP8AAAAAAQAA//r7+4CBhoF+gvj19wAA/gAAAgECBAAAAAABAG5qApuRCxcWCP4BBQABB///BAEAAf8AAgABAv//AgD/AQAAAQH/AAEA/////gD/AAD/AAD+AAAA/wAA/wD//wAB/wEBAQAAAAEAAAD/AAEAAAH//wH///8A/wH/AQD//gAA/wEAAAAAAAD//wD+/v8AAP8B/gD//gAA/AAA///+/v7/AP8A/wH//wEA/gD+//8A/wD+AP////7/AQD/AP//AP0AAf3/AAABAf4AAf4BAf8AAdHQCHlyDuLiAAACAAEVBQBaDv8RAQD//wD+AQAB/wEA/wAA//8AAAD+AAABAQAA/wD//wD//wD/AAAA/wD//wAAAAABAAABAQAAAAABAAD/AQD/AAD+AAABAQD/AQAB/wAAAAD/AQEA/wAA/wD/AQABAAAA/wABAQAA/wAAAQD/AQACAQAAAgAA/wAAAAD8AAD/AQAA/wAA/wAA/wD/AQAAAf8A/wAA/wABAAD//wD+/gD/AAD/AAEAAAABAQD/AAAAAAABAAAA/wAAAAABAP8AAAAC/wH//wEAAQD/Af8A/wABAf8BAAH/AAH/AQAA/////wAAAAAA/gAB/wABAAAA/v//AAABAgABAAAAAQD/Af////4A/wAAAAD/////AQH+////AP8AAAABAAABAQAA/////wAA/wAA/gECAQAAAAABAAABAAAAAAAAAAAAAAAA/wAA/wD//wAB/wAAAAD//gAAAAABAAAA/gAA/wAB/wEAAAD+AQAAAAABAQD/AQD//wABAQD+AQD//wAAAAAAAgD/AAAAAAAAAQAAAAACAAD/AAAA/wH//wD/AAD+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AAD//wECAP8AAAD/AAAAAP//AAAAAQEBAAAAAAD//gAAAAEAAAAB/wEBAQAAAQH/AQAA/wAAYGBetrazODg3AAAAAAAAAAD+AAAAAAAB6ubjqpeNwrKs//r6/wAB/v//AP7+//8A/v8A/////v8AAAEA//8A/wD///8A/gD+/////f////8A/v//AP//////AQAA//8B////Af8AAgABAAABCAcJMT1EaYOMVmhyIiYr/wAAAAAA8OznyLy0oIyDq5qU183J+ff1/gEA/wAA//7//v///v4A/v///wD/////AP8B/wABAAD//v////8AAP//AAAAAP7///4AAAAB//8B/v8AAP8BAAAA+ff4y7+5nYd4w7Ss9fPxAAABAAACAAABAAABAP//AAEBAQABAAECAAAHAAEJAAAHAAAFAP//AAD/AAD/AAD+AAD/AAD/AAD/Af8AAAD/Af8A/gH/AP8CAP4C/wAFAAEEAAAEAAIDAAADAAAFAAEFAAEFAAEEAAIEAAEFAAAEAAEDAP8BAAH8APjdAPbTAP7zIQ/8lTP5QRb///7/AAEAAP///wH+AP8A/wAA/wAA/f0C+P0GABgMCiwPDyIUERANDAYCAP4D//0FAPYHAfIG/wAB//8B8O3//f0CEif7ByH5AxH/BAEABf3+AAEABQL+Av7//PoBAR/9Hk7xDiX79vv+xt33ytv4xND/3NMR/+wG/wEAAPQBAPcD//8AAAL/AAD/AAD/AQEBAAD/AAD/AAABAAABAP8AAQD/AAAAAQAAAP8BAAABAAAAAQABAAAAAAD/AQD/AQEAAAAA//8AAAEA/wD+/wH/AAAC/wH+//8A/wD/AQH/AQEA/wAAAAEA/wH/AQEBAAD/AAD/AAABAAABAQABAP8AAAEAAAD/AQD/i42Q0dDPAAD9AAD/AAEB/wACAQEAgXj9RUH8/wEB//8D/wACAAABAQABAAEB//8AAP/9AAD//wEBAAABAAD//wEBAf/+///+AQD/Af8A/gD/AAH/AAD9/wD/Af//AQD/AP//AAEA/gD9AQD/AAH/Af8AAgEA/wAAAf//AAD/AQEA/wD//wD+AAD/AP/////+Af/+AAD/AAD//wH/AAH8///9AAD+AAD+///9AP/9////AQEA////AAAA/gEA/v8B/wADAAEBAAEB//8BAP8B/////wAA/v4A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/v8A//8AAAEAAAEAAQD/AAD/Af//////AAIAAP8AAP/+AAAAAP8AAAAAAP8AAAABAf//AAEAAAABAAABAf8BAAECAgABABQSAmxT/wAAAAAAAAAA/wABAe7t7IOEhvn6+gAAAAAAAQABAQAAAAEAAAABAP8AAQABAAL/AQEA/v//AAEA//8BAP///////wEAAAABAAABAAAAAAAA//8BAP8AAf8BAQEBAQEAAQAAAAAAAP8AAQH/AQEAAAAA//8AAQAAAP8B/wAAAP8AAAD/AQABAf8B//8AAP8AAAD/AAAA/wAAAQD///8A/wAAAP//AAAAAf//Av8A//8BAAD/AAAAAAABAAAA/wAAAP8B/wABAAAAAAAAAAEAAQEA/wH/AAD/AAAA/wAA/v8AAAEBAQAB/wAA//8AAQD/AQD/AAAAAAEB////Af8AAf/+AAAA//8AAAD/AP//AQAAAP8A/wAAAQAA/wABAAEAAP//AAAA/wAB/wAAAQD/AAEAAAECAAAAAQD/AAH/Af8AAQEAAAAAAAAA/wD/AAH+/gAA/wD//wEBAQABAAEAAQAAAQAAAQABAQAA/gAAAP8AAAAAAf//AP////8BAQH/AQABAAAAAP8AAAABAQAA/wEAAP8AAAH/AQEBAQAAAQD/AP///wAAAf8A//8AAf8AAQH+Af//AP8AAAH/AAAA/wAA/wAAAAE9PkBvcHABAAAAAAAAAP8A/wHo9f2U2P0XIPQdFvcHBAH4/QX7/QL//gAC/f/95gfy3Az+9gED/QD7AAH8/wECBP8RGvkCCAHs/QDYBPwADfz//gD//wMAAAD//gAA/gAA/wAA//8AAAH/AAEAAAIBAf///wEA/wAAAAABAAEBAAAAAf/S5f282v4AAAAAAQAAAAAlJyg7PDwAAAH//wD/Af8AAQABAP8A/wH//wH/AAAAAAAA/wEAAAAB/////wD/////AQAAAQEA//8AAAAAAAABAf8A/wEAAAAAAQABAAEAAQC9v8EAAQAAAP4AAP8AAP8AAP4+Pfz/AAAAAAABAAD/AQD9/////wL/AAL/AAAAAAH+AQD/AQEAAAL/AAD/AP//AAH/AAL/AAH//gH/AQAAAAD//wAAAf8A////AAEAAAAAAP///v//////AP3///8AAP4AAP4C//3//wD///4AAf////3/Af////8B//8AAQACAAAA/wEAAQAAAAEB/wH//wIAAQH//gEA/wD/AAH+/wD//wEAAAH/AP//AAH+///+AAH/AAH/AAH//wL/AAH//wH//wEA/wH//wD/AP///wD+AAH/AP8A/wEB/wH/AAEA/wD/AQD//wH//wA7QAQQF/7/AP7++foA0vMAAAEA/gAAAP8AAAAA/gAAAAAAAAAA/wAAAP8A/wAAAP8AAAEAAAEA/wEAAAAA/wEAAAIA/wAA/wAAAAAAAP8AAAD///8AAAEAAAAAAAAA/wEAAQAAAAAAAP8A/gAA//8A/wAAAP8AAAAA/gEAAAAA//8A/wAAAAAA//8A//4A/gAA//8A//4A/wAA//8A/gAAAAEAAQIA/wEA/wAA/wAA/wAB/wH///8A/wEAAAAAHA7/MBb/AP//AAAAAAABAP8AAAErJvyupPq2qf1+d/8/Pf0LDf8AAQIAAQEAAAAAAgAAAAEAAAAAAQAAAAAA/gEAAAEA/wABAAAB/wEAAQD/AQEAAQAAAQD//wABAAAAAAH//wAA/wAAAABNSf4JCAAAAAAAAP/u7/2mqQAAAQAA/wAA/gD/AP8AAAAA//8A/wABAAH/AAABAQABAAAA/wAAAQAAAAABAQD///8A//8AAQABAAEC/wH//wEAAQAA/wAAAP//AAAA/wD/AAD/AAD5+QEFBQYMCwUAAAEAAAEAAQAbFgP/+/38+f0A/v7/+/7q6v6qrANgaAhDTwhXZQd3gASKkgSLkgRyfQddZwg/SwhOWQKbo/7t7f3///0BAP8A//8BAgR2XAFiTvwCAQAAAQEA/gEA/wAEAwBvVvoTDP79AAEBAAKwyAe7ygsAAAEBAAL//wH/AAEAAP8AAAD/AQAAAAEBAf//AAABAAABAQD//wABAAAAAAAAAAEA//8AAAAA/wABAAEB/wAB/wEAAAAAAAEBBAFgTQBALwAAAAAAAAEA//8AAACysLC1trYAAP//AP//AAABAAH/AAEA/wABAP8AAP8CAf8AAQEAAQD/AAACAAD/AQIBAAD/AAAAAAAAAAAAAQAA/wACAAABAAAA//8AAP///////wH//wEA////AAD//wEAAAEBAP8BAAAA/wEA//8A//8BAv8AAP8AAAEBAAAB/wH/AQAAAAH/AAABAQAAAAD/AP//AQD///8BAAABAAIA/wAAAAEA//8B/wH//wD/AAAAAQH/AQD/AAD/AAAA////AAH/AQAAAAABAAH/AAEA//8A//8B/wABAAEAAQAAAAD/AAAAAAD/AAAAAf8BAP7/AP8A/wAB//8AAQABAQAAAAABAAD//wAAAAABAf8AAAAAAAAA/wD/AAEBAAABAP8AAAD///8AAP8AAP//AAABAAAA/wAA/v8B/wAA////AQEAAAH//wEA//8AAP8AAP8AAP8A//8AAP8A/wIAAP8BAAAAAAABAQAAAQABAAD+AQAAAP8AAQEAAAAAAAAA/wD/AAEAAQEAAQD///8BAP8AAQEAAAAB/wABAAEAAf8BAf8AAQABAQEAAAAAAQAAAAH+AAEAAAAAAgEAbWttKCsrAAAAAAAAAAAA/wAApNT40vn6GirsICbuJR7uDg35/AIB9/4C9/8F+/0E/f4C8wMC6wED7QQDDSDuEivr8wz66fz/3vf//P3/Af8DAP3+AP7/AP8AAP8AAP8A//0BAP7/AP/////+AP8AAv8BAQAA/wD+AP//AAAAAP//tNX/9fgAAAAAAP//AAABSUlIDAsL/v//AQAAAf8BAAAB/wABAAAAAQD/AAEAAAAAAQD/AP///gAAAQAAAAACAv8BAAABAQECAAD/AAEA//8BAQD/AQD//wD/AAD+5OPlsq+yAP/+AAD/AAABAAD/JCABQz/+/gAB/v4A/wAA/wEB/wED/wED/wAA/wAAAAAB//7//wD/AP8BAAAC/wABAP8BAAD//wD//wAA//8B//8A/wEB//8B/wABAf/////+AAAAAAD/AAABAP8BAAEAAP///wAB/gAAAAD/AAD///7//wABAf//AAD/AP////8B/gEAAQAA/wAB/QD//gAAAAD///8A/////gAA/v8A/wABAAAA/gAA/gAB/wD/AAAAAP8B/wAA/v8B/gH///8A/wEA/wEAAAH///8A//8BAAACAP////8A//8A/v8AAAAAAAAA//////8BAAEAFxoBOj8KAP8BAQD/Adr4APgBAP8BAP8AAAAAAAIAAAABAP8AAAEAAAAAAAAAAAAAAAAAAP8AAP8AAP8AAAABAAAAAAAAAAEBAP//AAAAAAABAAABAAAAAP4AAP4AAAAAAP8BAP8BAP8BAAIAAP8AAAD/AAABAAAAAQABAP8AAAABAAABAP8AAAABAP8BAAAAAP//AAABAP7/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/wAAAAAAAAAAAQAAAQD/AQD/AP7+////AAD/AAABAQAAAQD/AQD/AAAA/wAA/xcVFQL/AAH/AAD/AQAAAQEBAQEAAQD/AAD//wD/AP8A/wAA////AAAAAQEA//4BAAD/AQAB/wEAAAH/AAIA/wEBAQEA/wAAAf//AAEA////AP8AAQAAAAEBAAABAAH/AQEAAgEAAQAAAQAAAQAAAAD/AQD/AP8BAQEAAAABAAIAAP8AAP8A/wD///8AAAH//wEAAAH+/wAA/gAA/wAAAAAAAQAAAP8AAQABAP//AAH/AAAA/////gH/AAEAAAIAAAAAAAAAAQAAAP8A/wEA//8AAP8A/wAA/gAAAwEA//8AAf7+AP4AAAD/AAABAf8BAQH//wD/Af//AP//AAAAAAEAAP4B/wAB/v8AAAD/AP//AAABAP8AAQH/Af///wAAAP8A/wAAAAABAAIAAP8BAAAAAP8BAAABAQIBAAEAAAAA/wEBAQAAAAEBAAEBAP8BAQAAAP8AAQD/AAAAAP//AgABAQH/AP8B/wABAP8AAP8AAAD/AAABAQD/AQD/////AgEBAAD/AQH/AQABAAD//wD//wEA//8A//8BAAABAP8AAAAAAQEAAP8BAAEAAP4BAgD/AAEC/wAAAP8AAP8BAQAAAAAA//8BAP8A/wAAAQAA/wAuLiwA//8AAAEAAAEAAAIAAADU5gEA/gAA/f8BAQAA/wH//wEA/wEAAAAAAP8B/wAB/QAB/gABAAEA/wEA/wECAAD//gHC1gG42v4BAQIAAAEAAP9fX1z/AP8BAP8BAAAAAAAAAAAAAAAXExIRDw0AAAAAAAAA/v8A////AAEAAQEAAgIAAAEAAQAA//8AAP8A/wEAAAAA/wAA//8BAAABAQD/AQAA/wEAAAAAAQAA0+0B1/L/AAD+AP8EBwL//gL+AAH//wD9/wD+/wD+/wD/Af//AAEAAQL+AAL9AAL+/wH//wD/AAL+AP/+/gD+AAH+/wD/AAH//wH//wL/AAL/AAL+/wH//gH+/wD/AAD9/gH//wL+AAD+/wH//wL+/wL9/wEA/wH/AAL+AAIBAAP+AAH//gH+AAD+Af7/AP/+//8AAAD+/wH/AAH/////AQH//gD9AAD/AAH+/wABAP8A/wH+/wD+AQH///8AAAP//wEAAAIA/gD+/wD+AQL/AAEAAQEA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//4AAP8B/93P+QD+/wAAAQAHBQEzDwAB/wAAAAD//wD+AAEBAAD//wD/AQAAAAABAP8A/gACAAD/AAAAAP///wD/AAABAAD/AAD/AAD/AAAAAQD/AP8A/wAAAQH/AQH/AQH/AQAAAQAAAQD/AQD/AAD+AQD/AQD/AAACAAABAAAA/wD/AAD//wD/AAAA/wAA/wAAAAD//wD/AADY4wD3+wAAAAAAAAEAASkpK01OSwAAAAAAAAEBAAEAAAABAP8CAQAAAP8A/wAAAAAAAf8AAf4A/wAA/wAAAAAAAAABAP///wEAAf8B/wH/AP8BAAEAAf8AAAEBAAH/AP/+AP8A/wAAAQAA/wEAAAD/AP8AAf8B/wEAAQD//wEBAAD/AP//AAD/AAD/AAAAAP///wAAAgABAQD//wH/AAAAAP8AAAD/////AAABAAAAAAAA/wAAAAEAAAEA/wEAAP////8AAQAA/wAAAP//AAABAQD/AAAAAAH+AQAA//8BAAAAAf8AAAAAAAEAAQH/AP8A//8BAP8AAP//AQD//wABAAEBAAD/AAABAAAAAAAAAAEAAAEB/wAAAAABAAD/AP8AAf4AAf8A/wAAAP///wAA/////wH/Af8A/wAAAAAA/v8AAP8A/wAA/wEAAQABAAD//wD/AAD//wEAAP8BAP////8A//8AAf8BAQD/AAEAAAAAAAAAAf8A/wD/AQABAAABAP4A/gEB/wABAAABAQH//wEBAAD/AAEAAAAA/wAAAAAAAAEAAAEA//8BAAABAAD//wABAP8AAAD//wD+AP8AAAAAAQAAAQD//wABAAAA/wAAAAAB/wIAAQAB/wAAAP4A/wD///8AAQEAAQAAAAEAAP8AAAAA/wD/AAAB/wD//wD/AP/+AAEAAQAAAAIAAAH//wABAAABAAD//wAAAQAAAAD//gD/AAD//wABAAAA/wD/AAH/AP/+AQAAAAAAAQAAAQAAAAEAAQAAAAEBAQEAAQEA//8BAP8BAQAAAAH/AQEAAAEBAAEAAQABAf8BAQEAAAABAAEBAAEA/wABAQEBAAAAAf8AAQH//wAA/gABAAAAAAH/AQAA/wAAAP8AAAEBAAAAAAAAAQEA/wD/AP8BAAAAAAAAAAD/AAEAAAL/AP8CAAAB/v8AAP//AP8AAP8AAf4BAAD//wH/AQEA/wAAAAAA////AQD/AAAA/wL/AP8AAAH/Af8AAP8BAQEAAAABAAAAAQEB/wACAf8AAP8AAQD//gABAP8BAgD//wEAAQEAAAH///8AAQABAAD/AQEA//8A/wEAAP8BAP//AP7/AAAA/wH/AAABAP////8AAQH/AAAAAP////4AAAEAAAEAAP/+//8BAQAAAAAAAP//AP8AAP//AQD/AAAB/wEAAQEAAAAA/wAAAAAAAQEAAQAAAf8AAf//AAAAAAABAAD/AAEBAAH/Af8AAP////8AAQEAAQABAAD//wAAAAABAAABAQABAAABAAD+AP8AAQEAAAD//wEBAAEAAQItLS0AAP8AAAEAAP8AAAAAAADg0Pjz8f0AAP4B//7/Af8AAP8AAAAB/wD+AQAFBQBkcwUqOQWeifjFu/8DAwH//wAAAQABAQAAAP///wAB/wEBAQHp6P+3pusA//4A//4AAAEAAP8gICNCQEECAAH/AAABAP8AAQABAAABAAAAAQEAAAD//wAAAAAAAP////8CAAAAAAAAAAABAf//AAAAAAD//wAAAAAAAQD///9HRkQGBwYAAAEAAAAAAP8AAADk2PLSxfH9/v/6/QH6AAH8/wH8//7/AP//AAD+AQD+////AAD+AAH9/gH8/////wD+/wD+/gH/AAD/AAH//wD//wD+AAL//wH//gD+///9AAD9/wD+/wD/AAH//v//AAD+AAD+AAH+AAAA/wH//wD//wH9Af/+AAD///8A/gD+/wD+/v/+AAD/AAABAf/+/wD/AAEAAAH//gD+//8A/wL+AAH+AAH//wH//wL+/gD+/QH+/wD+/wD9/wH8/wD9/wD/AAH9AAD8AAD8/gD//v/s7P3dzfkAAf8A/f8AJAz/GgQA/wAA/v//AAAAAAD//wEA/wIAAP8AAAAA/wEAAQIA/gAA/wEA/wEAAAAA/wAA/v8AAQAAAAEAAAEA/wAAAAEAAAEAAP//AAH/AP///wAAAAAAAAEAAQEA/gIAAQEAAP8AAAAA/wAAAAIAAQEAAP8A/wAAAAAA//8AAAAAAQAAAAEA8PYA1+QAAAAAAAAAAAD/AP9TVFMRERABAAAAAAD//wAAAAAAAQAA/wAB/wAB/wAAAf8AAP8BAQADAAD///8B/wD/AAD//wAAAAEAAQAA////AgAAAQEAAQAAAAD/AP8AAAABAQAAAAD/AP8A/wD/AAEBAQEBAAAAAAD/Af//AQH//wD/AAAAAAEA//8AAP8AAQABAAAA////AP7//wEA/wAAAf8AAAACAAEBAAAAAAAB/wD/AAD/AP8A/wABAQL/AQABAAEAAAAAAAEBAAECAQAA//8AAP/+AP//Af8BAAAAAAABAAABAAAAAQAAAf8AAQABAAABAAEBAAEBAP//AAAA//////8AAQD/AAEAAP8A/wAAAQD/AAD//wD///8AAP8B/wAB/wABAf8AAP8AAAEAAAABAAH/AAAA////AP8AAAEBAAEAAAAA/gD///8AAAAAAQEAAQABAAAAAAH//wAAAAEAAAEB//8BAAABAAD/Af8BAAAAAf8AAAAAAAAB/wABAAABAAH/AAAAAAABAAD/AAD///8AAAAAAAAAAAAAAAABAAD/AAAAAAEBAP4A/gEB//8A//8A/wAAAAAAAgABAP8BAf8AAQAAAQAAAAH//wD//wD//wD/Af//AAAAAP8CAAEBAQABAP8AAQD/AAH+AQAAAP8A/gAAAAABAAAAAAABAAEBAQH/AAAAAgACAP8BAQEAAP///wEAAQEAAQD+AAABAQEBAQACAQABAAD/AAABAf8AAQABAf8BAAABAAEAAAEAAAEA/wAA/wD+AAAA////AgEAAQAAAP//AP//AQABAQD//wH+////AAAB//8AAAAA////AAAA/////wAA/wAAAAABAAH/AQEAAAEA//8AAQAAAf//AAAA/wACAAAA/wD//wAAAAAAAAAAAP8A/wD//wEAAP//AQAA/wH/AQAB/wEAAAEAAAAAAAAAAP8BAAABAAD/AAABAQAA/wEAAAEBAAIAAf8BAAAA/v/+AAABAQEAAQACAAEBAAD/AQAA/wABAAD//wEA/wEAAAABAP8AAgAAAAAB/v//AQD/Af8A/wAAAQEAAP8AAP4AAQAAAAIAAAD+AAAAAAABAAABAQABAAD/AAD//v8BAP//AP//AAAB/wABAQACAP//AQAA/wD/AAAAAP4A//8AAQAAAQAAAQEAAAAAAQAAAAABAAAA//8A/wEBAP//AP4AAAEAAP8BAf4AAAAB/gAA/v//AP/+AP8AAf8BAgEBAQIC////AP8AAAAAAQAAAQEBAAEBAAECAAAAAP8AAgEAAAABAQD/AgH/AQH/AP//Ly8tDxASAAD/AAAAAAABAP//59z4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Af7/AP8BAP4AAf4AAP//Av4AAf7/Af3/Af//Av4BAP8AAv4AAAD/Av4AAP4BAv8AAP3+AQAAAf//AP8AAf//Af8AAf//AP4AAf7/AP//Af3/AP3/AP/+AQAA//8BAAD+AP3/AP8AAf7+AP7/Av7/Af7/AP4AA/7/Af3///P2/9G+9gD9/AAA//8XCQApCgD//wAAAQAAAQD/AAEAAAAAAAD//gAAAgH//wD/AAD/AAAA/wAAAAEAAQD+AAH/AQAA/wD/AQAAAAAAAQAAAAAAAAABAQD/AgAAAAEAAQABAAD/AP/+AP8AAAABAQAAAAAAAAAAAQD/AAD9AAAAAAD+//8AAAAA/wD+/wAAAAD//wDu9gDW4gAAAQAAAAAA/gAA/1JTUB4eHv8A/wEAAAAB/wAAAAD/AAAAAAABAQEBAQAA/wAAAAEBAQABAQAAAQAAAAAAAQAAAAAAAAEA/wEAAQAA/wAAAAAA/wEBAAAAAP4A/wEAAP///wEAAAAAAQIAAQAAAAABAP8AAQAAAAD/AAAAAAD//wEA//8BAP8A/wH/AAAAAAD/AAEAAQABAP8AAQAA/wAA//8AAAAAAf8B//8BAAABAf8AAAAAAAAA/wAAAAEBAQEAAAABAAAAAAD//wAAAP//AAAA//4AAAAAAQAAAf//AAABAAEAAQABAAAAAAEAAQAA//8BAAH//wD///8AAP7/Af//AQAAAf8AAAEAAQEB/wD/AAAA/wEAAQAAAQAA////Af8CAQAA/wEBAf//AQAA/wAB//4A//8A//8AAAAAAAAA/wIAAP8BAQAA//8A/wAAAAEAAf8A//8AAAH/AAAAAQL/AP8AAP8AAAABAP4A//8AAf/+AAL/AAEBAAEAAQAAAP8A/wAAAAD/AQAAAAD/AAEAAAABAQAAAAABAQEA/wEAAf8BAQAAAAIAAf8A/v4A/gEBAAAAAAAAAAEB/wAB//8A/wAAAAAAAAAAAQABAP8A/gAAAf8AAP8CAQH/////AQEAAP8A//7+AQAA/wD//wEA/wABAP//AQABAQEBAQAAAQABAAIAAAABAAIAAAAAAP8AAP8BAAD/AAD/AP8AAAAAAAH/AAABAAAAAf8AAP4BAAEAAAAB/wEA//8AAAEBAP//AP8BAAH//wD/AAD/AAEBAQL/AP8B/wABAAD/AP8BAgABAP8AAAAAAv//AAAA/wAA//8AAAEA/gABAP8BAP8BAQEAAgH/AAEBAAEAAAAAAAAA/wABAAAB/wAAAP8AAf8AAQEA/wACAP//AAABAAEBAQEBAAABAgIAAAD/AAAAAAAAAAACAAABAAAAAAEBAAEB/wABAQH/AAEAAAECAQAAAAEAAQIAAAAAAAAAAAD/AAAAAQAAAP8AAAAAAP8AAAAAAQABAAABAf8BAAABAQEAAAAAAAD+AAD//wAA////AAAAAP8AAP8AAAAA/wAB/wAAAAAAAAH//wD/AAACAQEAAQH/AAD/AP8BAAEBAAEAAP8BAQAA/wAAAf8AAAAA/////wH/AQAAAQABAAEAAQEAAAH/Af8AAAD/AQEBAAD+AAAAAQAAAQAA/wEA/wAAAf8AAAD/AP8AAgAAAAEBAQEAAAIB/wH//wAA/wEAAP8B/wD/AAEA/wAAAQD/AAAA/wH/AAAAAAAAAgAAAAEAAAEA/wAAAf8A////AAA+Pj0AAAEAAQIAAAAAAAAAAADSwPn08gAAAQEBAAABAQAAAP8A/////v8BAgABAgH/AAArMvt6mAEvRgUEDP8SGwU8VApykw11iQ0LCQWih+jz7PsA/wEAAP8AAP8AAABfXl4TFBMBAAEAAP8BAP//AP8A/wAAAP8BAP8B/gAA/wAAAAAA/wAA/wEAAAAAAAAAAQD/AP8BAAD/AAEBAAD//wEBAAAAAAEA/wD/AAFQUVAoKisAAAAAAAAAAP8AAAH+/f/QuOz+/wH9/wL7/gH+/wH8AAH+/wD+/wH9/gL9/wD+AAD+/gD+/gH/AAD+AAD//gD+/wD9/gD+/wH9/gD//wD9/wD8AAH/AAD+/wD/AAH9/gH9/gD//gH/AAH+/gD8AP/+/v/9AAH//QH9/////wD+/////gL9/v7/AAAAAQH//wH+///+/wD/AAD+AAD+/wEA/wH//gD9////AAD//wD/AAD+/wD+/wD+/wD/AAD+/wH+AAD+/wD+AAD+/wH9/v/+/wAAAAHQy/jq0/oAAf8AAAEBJwn/CgIAAQAAAAAAAP8AAQD/AAAAAAAAAAIAAv7/AAAAAAABAQEA/wEA/wD///8AAQH/Af8A/wEAAQAAAAAB/wEAAAAAAf8A/wEB//8BAAD//v8B/gEAAQABAQAAAAAA/wAAAP8A/wEAAP8AAQIBAgEA/wAAAAAA/wAA/wEBAAEAAAAA/wAA1eIA9vkAAAEAAAAAAAEYFxlaWlkA//4AAAH+AAAB/wEAAAAAAAD/AAAA/wD/AAAAAAEA/wAA//8AAP8BAQAAAAH/AQAAAAAAAAH/AQD//////wAAAAAAAAAAAAAAAAAAAAAA//8BAf//AQABAP/+AP//AQAA//8AAP8AAAD/Af4BAAAA/wD//wAAAAEAAAEAAv8BAAD/AAAAAAH/AAAAAQAAAQD/AQIBAQH/Af8AAAEA/wD//wABAAEAAAAAAAAAAf8A//8BAAAA/wD///8AAAABAAAAAAD/AAEBAQH///////8AAAD//wAAAAEAAAEB/wD/AQAAAAEA/wAAAQAAAQABAQABAf8BAAAAAP8BAAD/Af//AP8AAQAAAAAAAAD//wD/AAEBAP4AAAAAAQD/AAABAQAAAAEB/wIBAAEA/wAA/wAAAAAAAQH/AQD/////AAD/AAH/AAAAAP8A/wAAAP/+AP8BAP//AAAAAAAAAAD//wAAAAEAAQD/AQH/AP///wD/Af4AAAABAAEAAAAAAP//AQD/AAH/AAD/////AAABAQD/AAEAAAABAP//Af//AP4AAAECAQH//wEAAP8A/wAAAAD//wH//wECAAAAAQH//wD///8A/wEAAP8AAP8C////AAABAAAAAAACAQAAAf8AAQAAAP8AAAAA/wEAAP8AAP/+AP8A//8A/gD/AAEAAAECAAD/AQAAAAD//wH/AAD+AAAAAP8AAP8AAQAAAAEC/wAA/wEBAP8AAP8AAQEAAAD/AAH///8CAgABAP8AAQEAAAAAAAAAAP7+//8A/wABAAABAQABAP8BAAABAAAA//8BAP//AAD/AQD//gD/AAEAAP8A//8CAP8AAf8BAAAAAAAAAQD//gH/AAEAAAAB/wABAQACAP8B//8AAQH///8BAf8AAP//AAAAAAEB/v/+AQAAAQAAAP8AAAABAAAA/wH/AAAA/wD//wEA/wD/AAAA/wEAAP8B/wD/AAAAAQABAQD/AQAAAAAAAf8A/wABAQAAAQABAQAB//4AAP//AP8AAP8A/wAAAAEB/wABAP8AAAD/AP8A/wAA/wAAAAEBAf///wAAAAAA//8AAAAAAQAAAQAA/v8AAP//Af8BAQAB/wAB/wAAAf8A//8A/wIAAAACAAAAAQAAAAEAAQEAAf8A/wH+//8AAAAAAP8A/wABAQD//wAAAf//AP8AAP8AAAAAAP8B//4AAP4AAP8BAP8BAAEBAAABAAAAAAEAAAEBAP/+AQABAAH/AQAAAAEAAP8AAAEAAAH+AQEAAf8B//8AAQIAAAD/AAEAAP8AAAEBAAABRkdFCAcIAP//AAAAAAAAAAAB5d77wa33AQD//v/+AP4AAAD+AAH/AP8A//8AAP8AAgECAAABJzL/co0HfqMPh6sNc48GPUcHBgcEspzwzr/xAP//AAD+AAAAAAAAICAhXl9bAQABAAAB/wAC/wAAAAAAAAAAAAEA/wAA/wIAAAH///8AAAEBAAD/AAAAAQABAAAAAQAA/wEA//8BAAEBAAEAAAABAAABAAEBAAAAEBAPXFpZAAACAAAAAAACAAAAAAAA1sDr39Hz/f3/+/8C+/8B/P7//gAA/P8A/f///f7//v8B/v8B/wD//v8B/v0A/f8C/f4C/wEC//8A//8C/v8B/wABAAAB/f8A/v8B/gAB/v4A//8B/gAB/v8A/gEBAQAB/gAB//7//QAAAP8B/gD//v///wH/AQEB/v8A/f///v8A/gAC//8A/v///v8B/gAA/f4A/wAB//8B/v8A/wH//gAA/wAC/f8B/wAB/wAB/wAB/wAB/gH//wD//v8A/gAA/wAA8/UA0b/3APz/AP//AQQA/zIPAAEAAP8BAAD+AAEAAP8AAAAAAP//AAAAAP4AAP8AAP8A///+AAAAAAAAAAD/AP/+AP8AAAAAAP8AAP///wD/AP8BAP4BAP8A/wAAAP8AAAH//wD+AP8B//8AAP8AAP7/AP4BAAAAAP8BAP//////AAABAP8AAAABAAAB/wAAAAABAO70ANbkAAABAAAAAAAAAAAAUFBQJyYm/wACAAAAAgAB////AAEAAP8BAQABAAAAAAAA////AAIAAAH/AAAAAP8AAP//AQAAAQABAAH/Af4BAQABAAEA/wAAAAD/AAEAAAEBAQABAAAA//8BAP8AAQAAAAAAAf8AAAH/AAAA/wEAAf8CAAAA/wEAAAABAP//AAD///8A/wEAAAAAAAH/AAEBAf8BAP8BAf//AAAAAf4AAf8AAQEAAQAA/wH/AQEAAAEBAP8BAAEB/wAB/wAAAAEAAQEBAAEAAQABAgABAQAAAQAAAQEBAAEBAQABAP8AAAAA/gEAAP8AAAAAAQAB/wAAAP//AP8AAP8A/wD+AAAA/wAAAv4AAP8BAP//AP8AAP//AQD/AQD+AAABAQAAAP8AAP//Af//AAD//wEAAAEBAAAAAAEBAP8BAP8A/wABAQAAAP8AAQD/AQAA//8AAAD/AQH/AQEA/v8BAAAAAAAAAAEAAQAAAQH/////AQAAAAABAAH/AgACAAAAAf8AAP//AQABAf8A/wEAAAAA/wABAQAA/wD/AAH//wEAAP8BAf8BAAABAQEA//8B/wH/AAAAAAEAAP//AAAAAQD//wEA////AQH/AQABAQEAAAAAAAAB/wAA/wABAAEAAAEA//8BAgEBAAABAAAB/wEBAAD/AAD/AP8AAf8BAAABAAEAAAAAAAD/AgAAAgABAAAAAQD/AAEAAgAA/wAB/wAB/gAA/wEAAAAAAAEAAAAAAAABAP8AAAAAAQD+/wAB/wAAAAABAP8AAAH/AAAAAAABAQIBAQEC//4B//8A/wAAAQABAP8AAAABAAAAAQABAf//AQEAAQD//wAA/wEB/wD/AAAAAAABAQABAAAAAQH/AQAAAAAB/wAC//8A/wABAAAA/wABAQABAP8AAAABAQAA//8AAAABAf8B//8A/wAC/wEB//8B/wD/AAEB/wAAAf8AAAEAAQEAAAEAAf8B/wD/AP7//gAAAP8BAP//AAEA/wAA/wH////////+AP8A/gICAf8CAf8AAAEBAQIBAAD/AAEBAAABAAEAAQAB/wIBAAH/AAAB//8BAQABAP4BAAEAAAD//wD//wAA/wEB/wH/AAEA/wD//wAA/wEAAP4CAAAAAAH+AAABAP//AP8BAAAAAP//AQD//wH/AgABAAAAAAD/AAEA/wEBAQD/AP8AAAABAAAA/wAAAAECAAECAQABAAAAAP8AAP/////+/v///v///v///wAAAf8BAAD/Af8A////AAABAP8A/wAAAQD//v8B/gH/AAD//wD/AAAAAAABAQAA/wD/ADY2N0ZIRgAAAQAAAQAAAAAAAAD//7Kc8ezo/QIAAf8A/wH/AP/+AP8B/wH///8AAP/+AP8AAgABAQ4O/i4y/xYZ/AD+/QD9ANHA+K2R5gD9/wAAAQAAAgAAAQABAXFybxwdHf///wAA/wAAAAAAAQAAAAABAP//AAEAAQAAAAD/AAEA/wEAAAAAAQEAAQAA////AP//AAEAAAEB/////wD/AAAAAAEA//8AAAEAAAAB/11eXCEhIgAAAQAA/wAAAQAAAf35/squ5/39//3+APr/Afr/Avr9AP0A//7/Af4AAPz+APwAAPz/AP7/Af3/AP7/AP8AAP7/AP3/AP8B//7+AP3+Af7/Af//Av8BAf7/Af4AAv4AAf8AAP7/Af7/Af3+AAD/AP//AP//AP3//wD+Af8AAf8BAP7+AP//AQD/AP3/AP4AAP0AAf4AAv4AAf7+AQAAAf4AAQD/Af7/Af7/Af8AAf3//v4AAf4AAP7/AP4AAP0A////AP/+AQABAf/+AP7/AM7H+OrR+gD//wD//v8xEgEjCAAA/wABAAAAAQAAAAAA/wD//wABAAAA/wD/AAAA/wAB/wAAAQAA/wAA/wEAAQD/AQAAAQAAAAAAAAD/AgAAAgAAAAH/AAABAAEAAf///wD/AQAAAgAA/wAAAgAAAAAAAAAA/wD/AAD/AQAA/wD+AAD/AAAAAAD//wAAAAAAAAD+/wDd6AD2+AAA/wAA/wEAAAAAAE1OTf8A/gEAAAEA/wAAAAAAAv/+AP8B/wD//gABAAAAAAABAQD/AP//AQAAAf//AAAAAAEA/wAA/wD/Af8CAAEB/wEBAQEAAAAAAQH//wD/AAAB/wAAAAIBAAAAAf8BAQEB/wAAAP8AAAAAAAH/AQH/AAAAAQD/Af8AAAD/AAABAAEBAAEAAAD/AAD+AAD//////wAB/wABAAD/AP8BAAAB/wD//wAA/wL/AP8AAAEAAAAAAP///wAA/wIAAAAAAP///wD/AAEB/////wABAAAAAQAAAAH//wEAAP8B/wD//wEAAAEAAQAAAP4A/gD///8BAf8AAAAAAQEAAQAAAQEAAP4BAAEBAAAAAAAC/wAAAQAAAAAAAgABAAAAAAAAAAABAP8AAAAAAQD/AAD+/wAAAAD/AP8AAAAAAAIA/wAAAQABAAD/AQAAAQAAAAD/AQD/AAD/AAEAAAAAAAEAAAAAAAD/AAAAAAEAAAAAAAEA/wD/Af4A/gEBAf4BAP8CAf8BAP8AAAH+//8AAAEB/wAAAP//AAEAAAH/AAAA/gAA/wAAAP//AQAA/wH/AP///wAAAAAAAQAAAQAAAAD/AAEAAAH///8A/wAAAAAAAAH///8BAAAB////Af8AAAAB////AP8A/wAAAf////8BAQAAAgD/AAEB/wAB/wABAAAB/wAAAAIAAAD//gAAAP8BAQEA/wAAAAAAAAH/AAAA/wH///8AAP///wAAAQD/AAAA/wAAAQAAAQH/AAD/AAAAAAABAAAAAQABAAAAAAD/AAAA/wADAAEBAP8AAP8A/wAAAAEA/wAAAv8AAQAAAQAB//8AAQEBAQAAAAAAAAAAAQAB//8A//8AAP8BAP8A/wH+/wAB/gABAAAB/wABAQH//wD/Af8AAv8AAAABAAEAAP8A/gAB/wEBAAEA/wL/AQEA/wEB/wAA/wEB//8BAAD//wAA////AP8AAQEAAQEBAAEA//8A/gAAAAD/AAAAAAH/AQABAQEAAQABAAEA//8A/wAAAAEA///+/wH+AAD//wAAAP//AAAAAAD//gD/AP8A/wAB/wABAAABAP//AAD/AAAAAAEAAAD/AAD/AQH/AQAAAQEBAAAAAAAB/wH/AQAAAf////8AAQABAAEBAAEAAP8AAQH+AAAA/wAA//8AAAAAAAEA/wAAAQABAQH//wAAAQIAAAD//wH//wAAAAAAAQABAf8AAAABAAAAAP8B/wEBAAD/AQAB/wAA//8BAAEBAAEAAAABAAH/AAAAAAEA/wAAAQD/AQAAAQAA//8A//8AAAAAAQABAQFeYGAAAP8AAAAAAAEAAAAAAAHn3/qrk/T+/QAAAAD/AQAAAP8A/wH//wD//wAAAAD//gAA/gH/AP////7//wEAAALr4v6jh+r38/0AAP8AAAEAAP8AAAFCP0BhYV7/AAAAAQD/AAAAAAAAAP8A/wAAAAD/AAH//wAA/wAAAQH/AQD/AAABAQD//wD+/wEBAP8AAQH/AP8A/wEAAAAAAAAAAP//AQABAAD//gAAAAEcHBtwcG4AAAEAAAAAAP8AAP8AAADYxe7XwvD9Af/8/wD7/gH6AQT7/wP9Af/9AAH+/wD9AAD9/wH9/wD9AAD8///9/wD8/v///wH+/gD+/wD//wD+/wD9/wD+/wD//wD+/wD//wD9/gL9/wD+/QD/AAH+AP/9AAH+AAH/AQH+AAD+AAH8/QH+AP/9/wD8/wEAAAH//gH//wD+/wD//v7+AAH8AAH9///+AAEA/wD//wH+/////gIA/gD9/wH+AAH9////AAD+/gH9AQD8/wD+AADp7P3KtPX/+f0A/gAACAMAOhIAAgAAAAEAAAAAAAAAAAAAAAEAAAEA/wAA//8AAAAA/wAA/wAA//8AAP8A/wD///8AAAABAAEA/wAA//8BAf8AAP8BAAEA/wEB/wAA/v8BAgAAAP8AAP4A/wEA//8A/wEAAAAAAAEAAAAAAP8AAAIAAQEAAP8AAf8AAAAA//8AAAEB9fsA1uMAAP8AAAAAAAD/AABKSUo/Pz0AAQMAAAD+AAH/AAAAAf4BAQACAAD/AAEA/wAAAAACAAAAAAEBAQAAAP8AAgEAAAD/AAEAAAAAAP8B/wH//wAB/wD//wAAAAD/AAEAAP///wEAAAD/AP8CAQD///8A/wEAAAABAAL/AAAAAP7/AQAAAP8BAf8BAP8BAQD/AP8A/wD/AAAAAf8AAQEAAAEBAAAA/wD//wH/AP8BAQAAAAEAAAEAAQD/AAAAAAD/AAAAAAABAf//AAD/AQAAAAABAQEAAQD+/wH/AgAA/wD/AP//AAAA/wD/Af8AAAD/AQD/AP/+//8AAQABAAH/AQEA/wABAP8AAP4AAQH/AP8AAAABAAAAAAAAAAD//wIAAQAAAQAAAP4A/wAA/wAAAQEBAP8AAAAAAP7/AP//Af8AAAAAAQACAQABAQD+/wAA//8BAAH/Af4AAP8BAAAAAQD/AQAB/wEAAP8AAAD/AP8A//8AAQAA/wEAAAAAAAH/AAEBAAAB/wH///8BAAABAAAA/wABAQD/AQABAAD//wD/AAABAAD/AAAAAQAAAQH/AAEAAAABAAD/AAAAAAAAAAEAAAAAAP//AP8BAAAAAQAAAAD//wEAAP8AAAEAAAD/AQECAAAA/wABAAAC/wAA/wD+Af8CAAAAAP8BAAAA/wD/AAD/AQEA/wD//wAAAP8A//8AAAECAAEAAAIAAAABAP8AAQEAAAABAQAAAQAAAQH/AQAAAQABAQAA//8BAAABAAAAAP8AAAAAAQAB/wAAAAAAAAAA/wEAAAAAAAAAAQABAAAB/wD//wEBAAABAAAAAQD/AQAAAP4A//8AAQAA/wEAAQH/AAAAAAAA/wAAAAD/AAAAAAAA/wEAAQABAQD/AQAA/wABAAAA/wH///8AAQAAAQABAQAA/wAA/wD/AAAA/wEA/wAAAAAB/wD+AP//AAD/AAEBAAAA/wIAAAABAAD//wICAQAAAf8AAAABAQEA/wEBAQEBAAH/AQABAP8AAQEAAQAAAQEAAAAAAAEAAP8AAAH//wEBAAD/AQAAAAAAAAABAAD/AAAAAQEAAQEB/wABAAEA/wAAAQABAQD/AQEAAAH/AAABAP8AAQAAAQAAAP//AAH//wD//wAAAP4A/wAAAQABAQABAAD/AAH/AQAA/wAAAgAAAAEAAQABAAEAAAAB/wABAAD///4AAQAAAP///wAAAAH/AQAAAAAAAQEA//8AAQAAAAEAAQEC/wH//wAAAQAAAAD/AAEBAAEAAAD/AAAA////Af8A/v//AQEBAP8A//8AAP8AAAEBAAAA/wAB/wAA//7/SEZFQ0REAAABAAAAAAABAAAAAAABuqTzx7n4AQAAAQABAAAB/wAA/v8A//4B/v8A/wAAAAD/AP8C/wAAAQIA5Nr8gmDn2830AP8AAAAAAAD/AAABHx4fjI2KDQwNAQAAAQAAAP8AAQD/Af8AAAD/Af8BAQEAAAAAAAEBAP8AAP8AAQD/////AQAAAQAA/wAAAf//AP8AAQEAAAAAAAD/AAEAAQAA/wD/AAEAAP8B//8BY2NgMTExAAAAAAAAAAAAAAAB//r/xq3n9PH8/v8B/AAC+///+/8B+v8B/P8A/gIA/v4B/f8B/f8A/f8B//4B/v8B/v8B/f8A/f8B/v8B/QAB//8B/wAC/f8B/gAA/wAA/QAB/v/+/v8A/wEA/v8A//8B//8A/gAA/v8B/QAA/f4A/gAB/f8CAP8AAAAA/QAA/f8A/v8B//8BAAAB/wAA//8A//8B/f/+/gAA/v8A/wAB/QD+/gH//gD//gEA/v8B//8A/gEA/v4B/v7//P0Awrf28dn5AP7/AP8AATwXACQF//7+AAD/AP4AAAABAP4CAP8AAAABAAABAAABAAAAAAAAAAABAQABAP8BAP8BAP8BAAAAAP//AAAAAAACAP4AAf////7///8A//8AAAIA//4AAAAAAP8CAAD/AAAAAAAAAP8AAAAAAAD/AAAAAf8AAP//AAAAAP8CAAAAAAAAAAAA/9rkAPD1AAAAAQAAAAAACwoLdHRxCQsKAQD/AAH/AQEAAAAAAP8CAAAAAAEAAAEAAAAB//8AAP8B///+AAABAQAAAf//AAAAAAAAAAAAAAABAAD//wH//wH/AAEAAAAAAAAAAQABAQD/AAAAAAAB////AQAA/wAA////AP//AQAAAQABAAAAAAH/AAAAAAAAAP8AAf8BAAEAAP8AAf8AAAH+AP//AAAAAP//AQD/AQECAAD///8AAAAAAAABAAAAAAAB//8BAQAAAQABAQAA//8AAAAAAAD//wABAQD/Af8AAAABAQAAAf/+AAH/AP8AAAAAAf//Af8BAQEAAAAAAQD/Av8AAAAA/wAB/wEB////AQEAAAEAAAABAAAAAAD//wD//wEBAAABAAEAAAAA/gD+AAD///8BAP//AAABAQD//wAA/wAA//7//////v8AAQD/AAEA/wD/AAAB/wAA/wEAAQD/AP8A/wL/AAAAAAH/AAAC/wAAAQAAAAH//wAAAAH/AAAB/gD/AQAA/wAAAAAAAP8AAAAAAP8AAQAAAAEAAQEBAQAB/wAA//8AAP8B//8AAQAB/wAA/wD+AAAAAP8AAQEAAAD/AAEAAAD//wD/AP8BAQAAAAIBAQABAAAAAAEA/wAA//8AAQAAAAEA/gD/AAAAAgABAP8A/wEA/wD/AAD+AQEAAQD//gABAQAA//8AAAAB/wD/AgH+/gH/AAEB/wABAAAA/wD/AP8BAAAAAf8AAP8B/wAAAAAAAAEB/wD///8BAQAAAAAAAQAB/wEAAAAA/wD//wH/AAEBAAAAAP///gAB//8AAQD/AAAA/wD///8AAAAA/wABAAD//////wAAAQD/Av8AAP8A/wEB/////wAAAP8AAQD/AP//AAABAAEAAAEB////AAEBAAABAAAAAAD/Af8AAQEAAP8BAQAAAQEAAAEAAAAAAAAAAQEAAAAAAAAAAP8AAAAAAgAAAAEAAQD+/v8A/wAAAAAA////AAAAAP4A/wEAAP8AAAABAP//Af////8A//8AAP///wAB/wAAAAEAAAAAAAEAAQAAAAEAAAAAAP8AAP8A//7/AAAAAP8BAAEA/wAAAAAAAQAAAQEAAQAA/wAAAf8AAAD/Af8CAf//AAEAAAEBAAEBAAD/AAAAAP8A////AAD+/wAAAAEA//8A/wAAAP8B/wD/AAAAAAEAAAAAAAABAP8AAP8AAAAAAP//AP8A/wAAAP//AAEBAv8AAAAAAAAAAAD/AAAAAP8B//8BAP//AAAAAP8BAAAAAAIAAQD/AAEAAP/+AAABAAEBAAABAAD/AAAAAAEAAAH//wECAQkJCGhoZgEBAgAAAAAA/wAAAAAAAP37/5+E8ODY/P3//wAA/gD+AAEAAQEB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/wD/AQD9/v/9AP/+AP/+////////AAD+/v//////AAEAAAH/AAH+AP/+AP///wAAAAD+/gD+/wH/////AAH+AAIA/gH+AADy+P7HtfX96PoA/v4BAf/9Uxv/EgQAAP4A/wAAAP8AAf8AAP8A/wAAAAAAAv8AAP8AAP8AAAAB/wAA/wAA/wIBAQAAAAEAAAAAAAAAAQEAAAAAAAEA//8CAQAAAAAA/wAA//8AAAEBAAIBAAEAAQAA/wEA/v8AAQEBAQAA//8A/gEA/gEA/wAA/wAA/wAA/wAAAAEA/wAA4OoA7PL/AAIAAP8AAAECAAFgYWAAAQH//wAB/wAA/wD/AAAAAQD/AAAA/wABAv8BAQAAAQAB//8AAP//AAD//wD/Af4AAP8B//8BAgAAAAEAAAECAQEBAAD/AAABAQAAAf8BAAAAAP8AAAABAAABAQH/AAEAAf8CAAABAP4AAAEAAf7/AQD/AAAA/wEBAAD//wAAAQAAAAAAAAAAAQD+AP8B/gL//wAA//8BAP8CAf8A/wIA/wD/AP8BAf8AAv8BAAACAQEAAAD/Af8AAQD/AAD/AQD//wAAAQEAAAAAAP8BAAEBAAAAAAD/AQABAQD//wEBAQAAAAAAAP//AAAAAQABAQAAAQD/Af8A//8AAAAA/wAAAAABAAEA/wAB//8A//8B/v8A/wD/AQEAAAAAAQEAAAEA/wAA//8A/wEBAP8BAAAAAAEAAf8AAQABAQAA/wAAAP8AAP8B//8AAf//AAEAAP8AAAAAAAAAAP8A//8BAAEBAAAAAAEBAf///gAAAP8AAAH/AAAB/wEBAgEA/wH/AAABAAD/AP//AP8AAQIAAAEAAP8A/wABAP8AAAD/AQAA//8AAP//Af8CAQAAAf8AAQEB/wAA/wAAAAIA/wH//wABAQACAf8BAf//AP4AAAABAAAAAAABAAAAAQEAAQL//wEAAQAAAAAAAgAA/wD/AQAAAP8BAAABAQEAAAACAAAAAP8A/wEC/wECAQABAAD/AAEAAAEC//8AAAAAAAABAP//AAD/AP8AAAD+AAAAAf//AAEBAgAA////AP//AQAAAAABAAAAAQAAAP7/AAEA/wAAAQD//wABAQD/AQEAAQABAP/+AQEB/wAAAAEAAQEBAAH/AAAAAAEA/wH//wD/AAEAAAH/AQEB/wAAAQAA/wABAAEAAAD+AAABAP8BAP8AAAEA//8AAAD/AQH/AQH/Af8A/wIBAP4A///+AAACAQAAAAD///8AAAD/AQAAAQEBAQIAAAABAAAAAQAB//8AAAABAP///wD/AQIA/wAA//8AAP8AAP8BAAABAAD/AP//AAD/AQABAf///wABAAEAAv8AAAD/Af7/AAAAAAIAAP8AAAAAAQD/////AP8A/wAA/wD/Af8C/wAA/wAAAAAA/wAAAP8AAAAAAAEBAAAA//8B////AAD/AAAA//7//wD///8BAQABAQABAAEBAQAAAAAB/gH//wAA/wABAAEAAQAB//7/AAAB/wABAAEB/wAA/wEBAAAAAQAA/wD/AAH//wAAAAEAAAAB/wABAf8AAAAAAAEAAQD/Af8AAAAAAf////8AAAEBAAEBAQEB/wEAAQIB////AP8AAQD/////AAH/BAYDh4SCLS0wAAAAAAAAAAAAAAABAAAA2Mv4gF3tw7b7/wAA/v///v79//8B//8B9/QAu6n6kG/u7OD6AAD/AAD+AAD/AAAAAAD+Z2ZkcW5s/wAAAQD//wD/AAABAAH//gAAAQD/AAEAAAAAAP8A/wECAAD+Af7/AAEAAAAAAAEAAP//AAABAAAB/wABAAAAAAEA/wAAAAAAAAEBAAAAAAABAf8AAP8BAf8AAQAAAAABAQEAf4B9NDQ3AAAAAAABAAAAAAAA/ff9w5ni6eX5+//++/4B/P4B+/4A/AAB/P8A/AAB/P4A/v8C/v4A/QAA+/4A//8C/gAA/f///gAC/wAB/wAB/AD//v4A/f8A/gEB/P3//f///v4A/QEB//8B/v8CAP8B/v8A/gAA//8B//8BAP0B/wAB/gD///8B//8B/v8B/f8B//8C/f8A/f7//v8B/f4AAP8C/v8B/gAA/P8A/gEA/gD//QEA/f4A//4A/gEA+v3+y8X24cH2AP8AAAAA/0MWACwIAP7+AP8CAAABAAAAAP8AAP8BAAH/AP8AAP4AAP8BAAAAAP8B/wEAAAAAAP//AAAAAQH/AAABAAAA//7/AP/9//7/AAAA//4BAAABAQAA/wABAP8B/wAA//8BAP4AAP//AAAAAP////8BAP8AAAH/AAAAAAD/AP8AAP//AAAAAAAAAPv9ANTiAQD/AAAAAAABAQAAQ0RCOTg4AQEAAQIA/wAAAQAAAQAAAQAAAQAAAAIA/v8A/wD/AP8A/wABAAABAQAAAQEAAAAC/wABAAAAAP8AAP8AAAD//////gD/AAD///8AAAAAAAEAAAEAAP8A/wEAAP4A/wD///8A/wD//wABAgAAAf8BAAAAAQABAQAAAAAAAQEA//8A/wAAAAAA//8AAAABAQH/AAEA//8AAQEBAP8AAAL/AAEAAAEAAAAA//8BAQEBAP//AQEAAP8BAAEAAAAB/wAA/wAAAP///wD/AQABAQEA/wABAAAAAf8B/wAAAQD//wAAAP8A/wH/AQAA/wH/AP8BAAD/Af8AAAAAAQAAAAH/AAAAAAD/AAD//wAAAAABAAABAAIAAP7/AQEAAAABAQD//wD/AQACAAIA/wAC/wABAAEAAAAB/wD///8AAAD//wAAAAAA/wAAAP8AAQAAAAABAQD///8A/wEAAAD////+AAAAAAD//wAAAQIAAAD/AAD/AQD//wAAAP8A////Af8AAQEAAQABAQEBAAH/AAD/AQEBAAEAAAAAAAAAAf8AAAAAAAD/AP4AAP8BAAAB////AQAAAQIAAAD+AAAAAAAAAQAAAP///wEBAQEBAQEAAP8A/wABAAABAQAAAAH/AQD/AP8AAAEAAAAAAgEAAAAA////AP///wAA//8A/wAB/wABAAEA/wAAAgEBAP8AAf//AAD//wAAAAEBAAD//wAAAf8AAAD//wAAAAAB//8BAf8AAP8AAAEB/wABAP8AAAAAAP////8BAAAC/wAAAAAAAP4AAAEAAAD/AP7/AAAA/wAAAAAA/wAAAAEAAf//AP8BAf8AAP8AAAEBAAH/AQEAAAH/Af//AAAAAQABAAH/AAD/AAAAAAAAAAH//wAAAAAA/wEBAAIAAv//AQD/AgEBAAAAAAEBAAAAAQEA//8A/gEAAQIBAP8BAQAAAP//AAD/AP4AAAEA/wEAAAEA/wAA/wEBAgEBAf8AAQH/AQICAQEBAQAB//8AAAABAAECAP8AAQEA/wABAAAA/gAAAAABAQAAAAAAAAAB/wEA/wD/AAAA/gAAAAAAAAAAAQAAAAEAAv8B/wEAAAAA/wD//wAAAAH//wEB/wAA//8BAAAAAAAAAQD/AQD/AAABAQAAAQABAAAAAf8AAAD//wAAAP8AAAD/AAD/AAH//wAAAAABAAAAAQAAAAH/AAAAAQEAAAH+/wEAAAAAAAEBAQH/AgEBAAH/AAAAAAABAP8AAAIB/wAAAgABAf8A/wD/AAAAAQAAAAD//wD+AAAAAQD/AAD+AAEAAP8A//8AAAABAAAAAAD/ACIiIYeHggsLDQAA/wAA/wAAAAAAAAAAAOng+pBs7KaL9fDq/f37Avfy/8O1+INf7Zdz6uzj+gAA/wAAAAAAAAAAAQAA/1hYV4iHhAEEAwAAAf8AAQD/AQAA/wAAAAEBAP8AAAD/AAEBAAABAQEA//8BAf8BAQD/AAEBAP///wACAP8A/wAA/wAA/wH/AAD/AAAAAP8B//8A//8A/wEA/wAA//////8AAP/+/wEAAAD/ABYUE4eGgQoKCwAAAAAAAQAAAAAAAfHl9cOd4/r5APr+//v/APz/APsAAPsAAfz+AfwBAf0A//3/Afz9Av4AAP3+AP3/AP3/AP3//v3+AP3/AP//Av0AAv//AP//AP4BAf7/Av7/Av7+Af7+AP4AAP0AAP8AAf//Av7+AP/+AP4AAf3/AP7+Af7+//0AAf7+Af7+AP7/AP7/Af4AAv3///7/Af7///7/AP3+AP//AP7/AP7/AP7+//7///4AAf3+/+Ph/cqo8//5/AD/AAEaCgBCEwAB/wEBAQAB/wAA/wD/AAD/AQAA/wEAAAAAAAD+AAD//wAAAAD//wD//wD/AAEAAAD/AAD+AQEBAQEA/wIB////AgEAAAH/AAD//wD+AAD/AQABAAAA/wD//wAA/wEBAAAAAQAAAAD/AQAB/gAAAQD/AQAA/wACAAAB/wEBAQAAAQAA/wDg6wDj7P8AAQAAAAAA//8A/15fXwEDAwD/AP//AAEAAAAAAP8AAP//AP8AAAD/AAIBAAEAAQABAAAAAQD/////AAH/Af8AAAEAAAABAQAAAAAB/wAA/wAAAAEBAQD/AQEAAAAAAAD/AAD/AAABAAAAAP8B/wAAAAEAAAAAAAEAAf//AP//AAEAAP7/AP4B/wD/AQAAAQEAAAEBAAAAAQD/AAAA/v4AAP8AAAACAP8A//4AAAD/AP///wD/Af8AAQEAAQD/AP8AAP7//wD/AAD/AAAAAAH/AQAAAf8AAAEBAQEAAP8AAP4B/wIBAf8A/wH/AAAAAAAAAAEBAAH/AQABAAD/AP8A////AAD/Af8BAf8BAAEAAf8AAAAAAQAAAAEAAQABAP8B/wD/AAEAAP//AAAA/v8AAAABAAEB/wD//wEA/wH//wAAAQD+AAEBAAEBAAAAAAEAAQD/AAAAAAABAAEAAAAAAP//AQEB/wD+AAEAAQECAQAAAAAAAQAAAAH/AAEAAQH/AQAAAQICAf//AAEC/wABAAD/AAAAAQD/Af//AP8AAf8AAQEAAAAAAAAAAf8AAAEBAQEAAQABAP///wAA/wD/AAABAP7/AQAAAgAB/wEBAP8AAAAAAAH/AP//AP////8A/wAAAAAA////Af//AAAAAAABAAAAAP//AP4AAAAAAQACAgAAAAABAAEA/wAA/wEB/wD/AAEB/wH9/v0BAAAAAAAAAAEAAAAAAQD//wABAP8BAQH/AAAB////AQH/AAAB/wEAAP7/AAABAAH/AAAAAAAA//8AAAAAAQEAAAABAP///wEBAgEA////AAECAP//AQAA/wD/AAABAAH/Af8B/wAA/wAAAQD/AAAA/wABAQH/AP8A/wAAAf8BAAH///8BAAD/AQAAAAEBAAAAAAAA/wD/Af8B/wH/AQAAAAABAAD/AQAB/wAAAAAAAAH/AP8BAAD/AQAB/gD/Af8AAAABAAEAAAD/AQAB/wD/AAAAAP8B/wH/AQAAAAABAAEAAP//AQEA//4AAAEBAAAAAP8AAAD/AQEB//8BAAH+AAAB/wD+AQACAP8AAAAA/wAAAQEAAAAAAf8A/wEAAAD/AP8A/wAAAAABAQD/AAEAAAABAP//AQAB/wH///8BAQEAAAD/AAEAAP4B/wAAAQD/AAAAAAEAAQAAAAAB/wAAAP8A/wEAAQAAAAAAAQD/AAAA/wEAAP8BAAAAAAEAAP8AAAD/AAAAAf8B/wAAAAL/Af8AAAH//v8BAQAAAP4A/wIAAQABAAAAAQEAAP8A//8A/wAAAQEBAAD/AAAAAP8AAAL///4AAQEB/wEAAv///wABAQAA/wAAAAEBAf+Li413dnn/AP4AAAEAAAAAAAAAAAEAAAEAAP8ZJgciLAfq4/zdz/f+/QIA//4AAP8AAP8AAAEAAAAAAABOTU6dnZsTFBIAAQAA//8BAQEAAAAAAAAA///+AAEBAf8A/wAAAQAA/wAAAAAAAQAAAAEA/wAAAf///wABAAD/AQAB/wABAAD/AAABAQH///8AAAEAAf8BAAAAAAD//wEAAP8AAAEAAAABAQD//wAAAQABAP9/f4KCgoQA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AAH/AAAAAAEBAAAAAAD/AQAAAQAAAAAAAAEBAf8AAP8AAP4AAAAAAf8AAAEA//8AAP8AAP8AAAABAP8BAQAAANvlAOXtAAAAAAD/AAAADAsNeHZ3CAwLAQAAAP8AAQEBAAD+AQEBAAEAAAAAAQD+AQAA/wEAAAEAAAAB/wABAP8AAP/+Af////7+AAAAAAD/AAAAAAD+AgABAP8A/v8AAQEAAAH//wABAAAAAAEA//8C//8BAAEBAQD///8BAQAB/wEA/gAAAAAAAP8BAP7//gD/AAAAAP8A/gAAAAEA/wEAAAD/AAD/Af///wAAAAAAAQABAP8AAQEBAAAAAP8AAAAAAAAAAAEAAQABAAEAAQD/AP8AAAAB/wABAAEBAAAA//8AAQABAAAAAAAAAAD/AP4A/wAAAAAAAAAB//8AAgEAAAIAAAEA/v//AQEAAQAA/wAB//8BAP//Af8CAAAAAAABAv8BAAD//wABAAAAAAAAAAEA/wD//wAA/wAAAQAAAQAA//4A////AAABAP8BAAAA/wD/AQACAP8B/gEAAQABAQAAAgEAAP//AAECAAEAAAAA/wAAAAEAAQABAP8AAAEBAAAAAAABAP8AAQAAAQECAAAAAAEAAAAAAAAAAQEBAP8AAAD/AP//AAAB/wD/AAIBAAEB/wAB//8A/////wEA//8AAP8BAAEAAAD/AP8A/wD/AAAAAP8BAP8C/wD/AAD/AAD//wEAAAABAAAAAQAAAP7///7///4BAAAAAAEAAQEAAQAAAQAAAAAB//7////+Af8AAAEAAP//AQIC/wH/ABaE6XsCAP8BAAD//gIAAAABAAD/AAH/AAMBAP//AQAAAAEAAP8BAAABAf8CAQEAAf8A/v//Af8B////AQEBAQABAAABAAD///7//wEAAQD/AAAAAQABAAD/AAAAAAAAAQD/Af//AQABAAEBAP8AAAAAAQAAAQEBAAAAAf8AAQEAAAAAAP8A/wAAAAAA/v4A//8A/wAB/v///wD//wAA/wABAAEAAAH/AAABAP8BAQABAf8A/wAAAQAA/gAAAAEBAAAA/wAA/wEBAP8A/wEA/v8AAAEA//8BAAEAAQABAgAB/wEBAQABAAH/AAAAAAIBAAAAAAEBAQEAAAEA/wAAAAEAAQAAAAAAAQABAQEBAAABAQAA//8AAQEA////AAD/AAABAQAAAP//AAEBAAAAAAAAAAEAAQEBAAH/AQAA//8BAAAA/wD/AAD/AP8BAP//AQAA/wD/AAIA///+AAAA/wD+//8AAP8AAAABAAH/AAIBAf8BAP8AAQAB/wAA/wAAAP8BAP//AQAA/wAB/wAAAP8A////AQABAAEAAAAA/wAAAP8A/gEB/wEBAQD/AAABAAEA/wAA/wEB/wAA//8AAAEB/wD/Af//AAABAQEAAAEAAAAAAgH/AAAA/wAAAAAAAQAAAAAABwcIi4uIhIODCwkLAAD/AAD/AAAAAAD/AAAAAAAAAAABAAAAAAAAAAAAAAAAAAD/AAAAFBQVl5eThYaCCw8NAAAAAQEB/wEAAAABAAD/AAD/AP8AAAAB//8A//8AAP8AAAD/AAAB/wD/AAAA/wAAAAH/AQEAAAD/AAD/AP8AAAAA/wAAAP8AAAD+/wEBAQAAAAH/AAABAAABAAAAAQAAAAAA/wAAAAAA/wABAAAAAAEADA0MiIeGISIiAAABAAD/AAAAAAAB/fn9wpfd7OX5/f4A+/0A+wAB+/8B/AD/+/8A+/8A/QAB/f8B/f8A/v8B/f4C/P8B/v8B/f8A//8A/AAD/f8B/f8B/f8B/gAC/wAC/gAA/gAB/v8C/wED/v8B/v8B//4A//4A/f7//QAB/gAA/v8A/f8B//8B/QAB/gAC/wAB//8B/v8BAP8C/gAA/gAA/v8B/AAB/v4A/gAB/gD/+P7+v7Ly17TwAPz8AAD+AzATAEkVAAAAAP//AAAAAAEAAAACAAABAAD//wD/AAD+AP8AAAAAAP8BAAAAAP8BAAH/AAABAAIBAAAAAAABAQD/AQEAAQAAAQEB//////8AAQIDAf8BAAEBAAABAAEAAP8A//8AAP4A/wAAAAEAAAEAAQEAAAEAAP8AAAH/AP8AAAABAP//AAEA/+70AMrbAP//AAABAAABAAAAVlZUQkNBAv//////AAD///8AAAEAAAAAAP8AAAAA/wABAAEAAAD/AAAAAQAAAQH/AAD+AQIBAAAAAQEBAAABAAIAAAD/AAEA/wAAAAAAAQAAAP8AAP8AAv8BAP8AAP8AAAD/AQEAAAAA/wABAQD/AAD/AQAAAf8AAAAAAAEAAAEAAQAAAAAB/wEBAQAB//8AAf8AAAECAAABAAAAAAAAAAD/AAD/AAEA/////wAA/wEAAP8AAQEAAf8BAP//AP///wEA/wIAAP8AAAAA/v8AAP8BAQIA/wD/AAAAAAAAAP8B/wAAAAAA/v///wAAAgEA//8AAf//AP8AAQAAAP8B//8AAQAA/wAA/wEB/gD+AAABAAAAAQH///4BAgEB/wAA/wAAAAAAAAEBAQAAAQAA/gAA/wEAAAD/AQAB/wD/AAD/AP4AAQEB/////wD/AP//AAD//wAB/v//AQEBAf////8AAf8BAQEBAf4BAAD/AQEAAP//AAAAAQAAAAAAAAD/////AAAAAP7//wAA/wEAAf//AAD/AAAAAQAB/wEAAQEB/wD+AQD/AQD/AQEAAAEAAQAAAAIBAQL+//4AAAABAQAAAAAAAAAA/wD/AQH/AP4AAAAAAQEBAf8AAQD//wH/AAH/AAEBAQEAAAH/AAAAAf//AP8AAAEB/wIBAQAAAgH/AQEBAAAAAAEB/wABAP8AAAACAv8A////AQH/AQABAAEAAf/+AAH/AAEAAP//AQAAAQAAAAABAAEA/wD/AAEB/wEAAf8CAAAAAQD//wAAAf//Af//Af8CAAAB/wAAAAAAAAEAAAAAAf8A/wAAAP8AAQAAAAD/Af/+/gD//wAAAP0B/wAAAAAAAf8A/gD/AAAAAQECAAAA/wD//wABAAAAAQAA/wEAAQEA/wEBAP8AAAD/AP//AQD//wAAAQAA/wAA/wD/AP//AAEAAf/+AP8AAQH/AAH//wABAAAAAAEBAAH/AQABAAD/AQAAAP8AAAD//wD/AAEAAQACAQD/AAABAQD///8AAAD/AAD/AAABAQAAAQABAQD/AAABAAAAAAEBAgECAf8AAAH/AAEBAf8AAP8AAf8AAAAA//8A/wEAAQH/AAAAAP//Af8AAAACAAABAAAAAQEAAP8B/wEAAf8A/wH/AAD/AQEAAf//AAH/AAABAAAAAP8A/wEAAf/+/wABAAEAAP8A/wH/AQEAAP8CAAABAQAAAAEAAAH//wEAAAEAAAAAAAD/AAEAAAABAAAA/wD/AAD+/wAAAQEA/wAA/wD/AAAAAAABAAAA/wH//wH/AAAAAP8AAf8AAAAAAAAAAf7///8AAAD/AAAA/wAA/wAB/wAB/wYFBXp8eK2urDY1NwAA/wEAAAAAAAEA/wAAAAAAAQAAAQEAAQAAAAEAAQEAADQzNLGxq2NjYAEBAQEAAf8AAP8A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AAH9/wL+/gD9AAH9AAH+AAD8/v/S0ffHne/88/oAAP8CDwb/Ux77FgIA/wAAAQEAAP8A/wAAAAAA/wEAAQAAAQEAAAAAAAAAAAAA//8AAAIAAQAAAAAA/wAA/wAA/wAA/wH//gEAAAEB/wEA/wH/AP8BAAEAAAABAAD//wAAAAAA/wAA/wEAAQAAAAEA/wAAAAEAAAAA/gL//v8AAAEA/wD+AAAAAAABAQAAAAEA3usA1uQAAP8AAP4AAAAAAAFqbGo2Nzj//wH///8AAAD/AAD/////AQAAAAD/AQD/AQAC////AAEBAQABAAH/AAEAAAAAAAABAAEBAAAA/wAA//8AAf8B/wAAAQEA/wAAAP8AAP8AAAAB/wAAAQAB//8AAAEBAAAAAP8AAAAAAAD+AQD//wEAAAEAAAD/AAAAAP///wH/AQD/AP//AAEAAQD+/wAAAQAA//8BAQD/AQEAAAD/AQABAQAAAAAA//8BAQABAQD/AAD//wD/Af//AQAAAf8BAP8AAf//AQAAAAAAAQH/AAH//wABAQEAAAH/AAEA//8B/wAAAAEBAP8B/gAAAAAAAAACAAD//gAAAQH/AAABAgH/AQEAAAAAAgEA/wAAAAACAQAB/gD/AP8BAf//AQAAAgH///8BAAD/AAAAAAH/AQD/AAABAgAAAP8BAAAAAP//AAD/AAD/AQABAP8A//8AAAAAAAAAAP8AAAAAAAAAAAD//wABAP///wAAAQAB//8BAQEBAf4BAAAAAQABAAEBAf7///8AAQEB/wAAAAD/AP8BAAIBAAEA/wAA//8A/wEAAAD/AAH/AAAAAAAAAQABAP8BAP8CAQAAAAEAAQH/AP8A/wAAAAAAAAH/Af4BAAEAAAD/AQAB/wAA/wABAAEAAAAAAAEBAAEA/gAAAQEAAf8BAAD/AAAAAAD/AP8BAP8BAAEA//8BAAAA/wAC/wD/AAAB/v7+//8AAQEAAAEAAf8AAAEA//8AAAAAAAAAAAD/AQEB//8AAAAAAAAA/wEAAv8A/wABAAD//wAAAAAAAAAAAAAAAQABAAD/AAABAAD/AAAA/wAAAQH///8AAAEAAP8BAQAA/wAAAAAAAQAAAAAAAAAA/wD/AAAAAAEAAP8AAAABAAH/Af8AAP8AAAEBAAAAAAD//wABAP//AQEA/gAAAv//AAECAAAAAAEB//7+AAEBAQAA/wAAAQAA/wAAAQAA/wD/AAABAQD/AAEBAP////8BAQEAAAAB/wD/AQAA/wEAAP8AAAAAAP8AAQEAAAAA////AAABAAEAAf8AAAIAAAD/AP8BAAAAAAD/AAEBAAAAAP8AAAAA/v//AQEBAP8AAAEAAQABAAD//wD/Af8BAAIAAP////8BAAEAAQH///8BAAD/AAEAAP8BAAD/AQEAAP8B/wAAAQAA//8AAAH/AP8BAQEA////AAEBAQAB/wD/AQAA/wAAAQAA/////wEAAQAAAQACAAH///8BAQD/AAEBAP//AAEAAP8A/wAAAQD/AAAAAAAB/wAAAgAA/wAB/wD/AAD/AQABAAAA/wEBAP/+AQAC/wH/Af8AAP//AAECAAH/AP8AAAABAQD/AAEB/wD/AP//AAABAAEAAAAAAAAB7OvrxcTE1NPUys3P9PLzCwsKJiUlNzk1REVEEhES//8AAQAAAAEB/wD/AAAAAAABAAD/AP8AAAAAAP8AAAEAAAABAAH/AP8BAAD/AAAAAAD/AAEBAf4A/wH/AAABAQAA/wAAAAAA/wAAAQEA/wAAAf//AQEC////AAEB/wD/AAAAAf8B/wH+Af8BAAAAAQEAAP8A/wABAAEAAf8AAAEAAAAAAP8AAAAA/gD/l5eZb25u/f39AAAAAAAAAAD+BggDSocsGCcOAAIABgD/AwEABAH/Bf4AAwMAAv8AAgAAAgACAwIAAQD/AgH/AQEBAgABAQIBAv7//wH/AgD/AQEAAAD/AP8BAAD/AAAA/wEAAf//AAEAAQAA/wABAAAAAP8A/wD/AAAB/gH/AP8A/wABAP8A/wEB/wD/AP4A/gEB/v8A//8AAAAB/QD+2t74roXm9eH5AQAAAA4GAV4i/ioIAAH/AAAAAAAAAP8AAAD/AP8BAP8AAP8AAAAAAP8AAP//AP8AAP8BAAABAP7/AP8BAAABAP8BAP4AAAAAAf8AAP8B/wAAAf4BAP//AP8B/wAAAf4CAAAAAP8A//8BAf4AAAAA//8BAP8BAP8AAP8BAP8AAP4AAAD/AP4AAP8BAQAB/wD/AO/4AK/JAO/1AAD/AAABAAAAHR0ewcHAHx8fAgEAAAEAAAAA/wAAAQAAAP8A/wAAAQAAAAAAAP8AAAEAAAAB/wD/AP8AAAAAAQEA/wAAAP8AAQEA/wAB/wD/AAAAAQEBAP//AAAAAAEAAf8B/wD/AAAAAP8AAAAAAQEBAAEA////AQEA/wAAAP8BAAEAAP8AAP///wEBAAD/AQAA/wEBAv7//wEAAf8A/wEAAAAAAAAA////AQIBAAAAAP8AAAEAAP8AAAEAAf8A/wAAAAAAAAEAAQAB////AAEAAP8AAAAAAAAAAAAAAAABAAH///8AAQEBAP//AAH/AP8BAAAAAAABAAD/AQAAAAAA/wD/AAABAAAAAP8AAAEAAAAAAAAAAAAA/wAAAQABAP//AAH//wABAf8AAAH/AAABAAAA/wAAAQAA/wAAAQAB////AQEBAAH+AAABAP8BAAAA////AQEAAAAAAAEAAP////8AAAEBAQABAAH/////AQAC/wH/Af8A/wAAAP8AAAIBAAAAAP//AQAA/wD/AAABAQEBAf8AAAD//wAAAAD//wABAQAA/wD/AAABAQAAAAAAAAAAAAAA/wH//wABAv8A/wAAAAD/AQACAAD//wAAAQAA/wEAAf//AAABAQEA//8BAAD/AAAAAAAAAAEAAP8AAAEB////AP8BAQH/AAAAAAABAAD//wD/AQABAAAAAAEAAP4A/wEAAgEB/v//AQAAAf79/gAAAP8BAAD//wEBAQAAAQEAAP4A/wAA/wEBAv///wAAAAEAAAAAAAEBAf7//wEBAQD//wAAAAEAAf8B/gD/AQEAAP8AAP8AAAAAAAH/AP8A/wAAAAEBAv8A/wEAAf8AAAAA/wEAAAD/AP8CAQEA//7//wIAAQAB/wD/AAABAP//AAEAAAABAQD/AAAB/wD+AP8CAQAAAAIAAP7//wH/AQABAQAA/wAAAAEA//4AAQAA/wD/Af8AAAICAP/+/wABAf8AAAEAAAAAAAD/AAEB//8AAQAAAAAAAAEAAAAAAP8AAAEAAAAA//8AAQEAAAAAAQAA/wABAAD/AAAAAAAA/gD/AgABAAAAAAAAAAAAAP8AAAAAAAAAAAAB/wH/Af//AAEAAAABAAAA/wAAAf8A/wEAAf4A/wEAAAAAAQABAAH/Af8B/wD/AAABAAD/AAD//wEBAQAAAAAB/wD/Af8AAAEAAP///wEBAf8A/wEAAQAA/wAAAgD//v8BAQEA//8BAAH/AAABAQD/AAAAAAABAP8AAQEAAAD+//8BAAAB/wEAAQD+AAACAAEAAP//AP8AAAAA/wEAAQD/AP8BAAEAAQAA//8AAAEAAAAA//8AAAEAAQAAAQAA/wEBAAD/AAABAf//AAAB/gAAAQAAAAD/AQAB/wAA/wH/AAABAQAAAQD/AAAB//8AAQAA/wD+AAACAQAA/wAAAAAAAAEAAQAA////AP8AAAEBAAH/AP8AAQH///8BAP8BAAH/AP8AAAAAAQEA/wEAAP8AAQAA//8AAAEBAAAAAQAA/wD/AAAAAP8AAAEAAQEBAAD///8AAQAA/wAAAQAB/wH/Af8B/wAAAAD/AAAAAAABAAD/AAABAAH/AP8AAQABAAAA//r5+nt6fY2OjwAA/gAA/wAA/wEAABUnDEWALQsPAwICAQQAAQQA/QQCAAMAAAMAAQP+AAECAAMBAAIBAAMAAQEAAAAC/wIBAAL+AQEB/wH/AAEAAAACAAAA/gAAAQEA//8AAQEA////AAEBAQAA//8BAAAAAAD/Af4A/wEAAP7+AAABAQD+AP8BAP4AAAAAAP7/AQAA//4AAP7+AObq/KuM5u3Q9QAA/wAFAwJgJP4yCQD//wABAAAA/wD/AAD/AQAAAAD/AAAA/wD/AAD/AQAAAAD+/wABAQD+AAD/AAD+AQAAAQABAAD+AAD+AQAAAQH+AAEAAP//AQH//wAAAf/+AQAAAP/+AgEA/wD+AP8AAQD+AAD//wD/AQD/AQABAQD9AAD/AAD/AAD/AQAA/wD/AQH/Af/6/AC70wDY5QEAAf8AAAAAAAAAAYuLjHR0cQAA/wD/AP8BAQH/AAAAAP8A/wAAAQAA//8AAAIAAP8AAQAA/wABAAD/AAH/AP8BAQD//wABAAD/AAABAAABAQAAAAD//wAAAAAAAP//AAIBAP//AAAAAAABAQAA/wAAAAAAAAAAAAEAAf8A/wABAAAAAAD/Af8B/wH+AAAAAAAB/wAAAf8AAQEAAAD/AAABAAAB/////wEAAf8AAAEBAAD/AAAAAAAAAP8A/wEAAgAB/wD+AQAC/wD/AAAAAAAAAAD//wABAAEBAf//AAD/Af8CAAH//wABAQD//wEAAP8AAP8AAAEBAAD/AQAA/wAAAP8BAAD/AQIA//4AAAEAAP8AAAH/AP8BAAEAAAAAAP8A/wIAAf8BAQAA/wAAAAD/////AQEA//8BAQEAAAAA//8AAQEAAQAA/gAAAQAAAAAAAP//AAECAAD//wABAgD///8AAAAA//8AAQIAAAAAAAAAAP8BAAD+AAABAAEAAAAAAAABAQAA/wD/AP8AAAH/Af8B/gEAAgAAAP8A/wEAAP8B/wEAAQAAAAD+AAABAAD/AAD/AAACAP4AAAIBAAAAAAAAAQD///8AAAEAAAAAAAABAP//AAEBAAAA/wAAAP//AAEAAQD/AAABAAAAAAABAAAAAAAAAAD/AAABAQD//wAAAAAA/wAAAAAAAQAAAP8BAAD/AAEB/wD/Af8AAQABAAH/AAL/AP8AAQABAAEBAQEAAP8BAAD/AP8BAAABAAEA/gABAAEBAQAA//8AAP8A//8CAAAA/wD/AAEBAAD/AP8A/wEAAAD+AAD/AAAAAAECAAAAAgAAAQIAAgH/AAAC/wAAAP4AAf8A/wD/AP8AAQABAP4A//8CAAEAAAAAAAEAAAEA/wABAAEAAQEA/gABAP8B/wAAAQEB/wAAAP/+AP8BAQIAAgAAAf8AAAAAAAD/AAEBAP8AAAEAAf8BAQAA/wABAQEAAAECAAABAP8BAAAAAQD+AAEAAAAAAf8BAf8AAAEAAQABAQD/AP///wEAAP//AP8AAP4AAAD//wD/AAAAAAAAAQEAAv8A//8BAAAAAP8AAP8A//8AAAABAQABAAEA/wAAAf8AAQD/AAH//wAAAAAA/wH//wEBAAEAAAH///8A/wAAAP4A/wAAAQAB/wD/AAABAgEAAf//AP8AAAAAAAABAP8AAAAAAQH/AAAAAAEA////AAEA//8AAAABAAAB/wEAAAL/AAEA/wD/AQAAAQAAAAAA//////8AAQABAAABAAH///8AAgAA/////wABAAAAAAAAAAD//wAAAQABAAAAAAD/AQAAAAAAAAAAAAICAAEAAP//AAAAAAD+/wD+AAD/AP//AAAAAAIA/wAAAAEBAQABAAABAAL/AQEAAAAAAP8AAf///wAAAP8AAAAAAQH///8AAAH/AAEA/wD/////AAABAQABAAH//wD/AQABAP//AQD/AAAA/wAAAP8BAAABAP8AAAH/AQAAAf8BAAECAAAA/wAA/v4A/wAAAQEAAAACAQAAAP//////AAAAAAAAAAAAAP8B/wD/AQAA/wAA/wABAQEBAQEAAAAAAQAA/wD/AQEB/wAB/wAAAAEGBgd8fHs2NjcAAAEAAAAAAAL/AAHq2fTSsOb8/wH6/wD6/v/6/wD6/gD6/wH7/wH6AQH9AAH9/gH9/gH8/QD9/wD//gH8/gH9AAD9/wH9AAH9AAD8/gD+AAL+/gD8/wH9/wH9/wH9AAH9/gH8/wL9/gH9/gH9/wD+AAD8/wH/AQD9/wD9AQD8AAD9/wL8/wL/AAH9/wH//wLq8P+znevt0PgAAAEAAAMASRv+MggAAQAAAQEAAAAA/wAAAAEAAP8AAP8AAP8B/wAAAAAAAAAA//8A/wAA//8AAAAB//8AAAAAAQAA/gAAAAAAAAEA//8AAf//AAAAAP//AQAA/wEBAAEA/wAAAf///wEAAAEA//8AAAAAAAIAAAEAAAAB/wEAAQEA/wEAAAAAAP4A/gEA//////8A1uYB2uYAAAD/AP8AAP8AAAAxMDJiYV4AAP8A/wH/AAAB//8AAP8AAP8A/wAAAQAAAQACAQH/AAEAAP8AAAEA/wAA/wD+AQAAAAAAAgAAAAEAAQAAAAAAAAAAAAABAQAAAAABAAABAQH/AQAAAQABAQAAAP8BAAAAAAABAP8AAP//AP8AAAAAAAAA//8AAP8B/wAAAQAAAgAA/wH/AP8A/////wAAAf//AP8A/wABAAIAAAABAAAAAAEAAQABAAEAAQAAAAEA//8A//8AAf8A/wAAAAAAAAABAAEAAQEAAAH/AAEAAQAAAf8B////AAD///8AAAD/AQD/AAAAAAEA/gD/AAAA/wAAAAAA/wACAAD//wACAQAAAAAAAP8BAv8AAAAAAAAAAAECAAH/AAD/AAD//wEAAAAAAAEAAf//AQEB/wEAAAH/AAEBAAD/AP8AAAH/AAD/AAAAAAAAAAEAAAAAAAEA////AP8BAAAAAAABAAAAAf8AAQD+AP8AAAAAAQAAAQEA//8AAP////8A/wAAAAAAAAABAQACAQH/AP8AAf8AAAAA//8B/gEA/wEAAAEAAAD/AAAAAQAAAQAA/wACAAH//wD//gAA//8AAAEBAAH/AQAAAAAA/wABAAAB/wD//wH//wEBAAEBAQAAAAD/AAEAAAAA/wEB/gAA/wAAAAAA//8AAAAAAQAAAAEAAAEAAAAA/wAB/wD/AAAA/wH/AAD/Af8B//////8CAAEBAQAAAP//AP8AAAEC/wAA/wAAAAABAf8A/wH/AAD///7/AAICAAAC/v8A/wD/AAD/AQD//wAA/wEA////AAEAAQAAAQAAAAEA/wEAAP8AAgD/Af8BAf///wEBAAEAAAAAAQEAAQAAAAAA//8B/wAB/wEAAAAA/wAAAAAAAAABAAD+AP//AAD//gAB/wEA/wAAAQAAAf8BAP8B///+AP8BAAD/AAEAAAH/AAAAAAABAQAAAAABAQEAAAAA/wAAAAH/AAAAAAABAAAA/wD/AQAAAQAA//4A//8B/wD/AP8AAP//AP8BAQIAAP8BAP8BAAAB/wEBAQAAAAD/AAAAAP8BAP8AAAEB////AAACAP8CAQEAAP8A//7/////AQIAAAAA/wAAAQD/AQEB/wAAAAEAAAH/AAD/AAH/AQEAAAD//wABAQD/AP8A/wAAAQD///8A//8A/wAA//4A/gD/AAAA/wAAAQAAAf8BAQAA/wH/AAD+/wEAAAEAAAAA/wIBAP8AAf8A/wD/Af//AP//AP8AAf8AAQEA/wD//wABAP//AQABAP8BAAEBAAEA/wAAAQEAAAAAAAH//wABAAAA/wD///8BAAAAAAAAAAD//wAAAAECAQAAAAAAAQEAAAH/AAAAAQEAAAD+AQAAAAAAAP8A/////wD/AAAA//8A//8A/wAA/wD/AAAAAAAAAQEAAAEBAAAAAQAAAAAAAQABAP////4AAAEAAQEA/wAA/wEAAAEBAgABAQABAAABAQH//wEAAAD/AP4AAP8A/wH//wAAAAAAAAEB/wABAf//AAEA/v8AAQAAAAAAAAABAP//AAD/AAAA/wAAAAD/AAD/AQABAAAA//8AAAAAAf8AAAEBAAAA/wEAAAEAAP8AAQEADxEPgIB9DQ0NAAABAAAAAAABAAAB2bbn7uT3/v0B+/8A/P4B+/8B+///+////P4A/P4C+v4A+/8A+wAA+/0A+/4A/v4B+/7//f7+/QD//P8A/v///f0A/QAB/f4A/f///f8A/v8A/QD//gD//v///////v///v4A/////P4A/v///f8A/f4B/f4A/v4A/P4A/f8A8fj+sKHr58TzAQD8AQD+ADMTAEMRAAEBAP//AAD+AP8AAAAAAP8AAAABAAACAAAB/wEAAAAAAAAAAAABAAEBAAAAAAD//wACAAAAAf8AAAAAAf//AP//AAAA//8BAP8A/wAC//4C/wAA/v//AAEBAQABAQD//wAAAAABAAEAAAD/AAH/AAAB////AAAAAAH/AP8AAP8BAAD/AQECAObwAMna//7/AAABAAABAAACBwYIgYGAEBISAP8AAAAAAQEAAAAB/wAA/wAAAAEBAQD/AP8A////AQH/AAAAAQD///8AAQEAAgAAAAD/AP8BAAD/AAAAAQAAAP/+AP//AAABAAEAAAEAAAH/AP8AAAEAAP8AAAAB/wAAAAAA/wABAQEBAQD/AAAAAP8AAAABAAAAAAEAAAAAAP4AAAEAAgEBAgEAAAH/AAAAAQABAAD//wD/AAAA/wAAAP//AAAA/wD+AAAAAQD/AAEAAQEBAAEAAP8AAAABAAAA/wD/AP8AAAEAAP7/AQAAAAAAAP//AAAAAQD//wD/AP8A/wAAAQD/AAEBAv//AAAB//8AAQAA/gD/AAEA//8AAAABAAAB/v8BAAAAAP8AAAH//gD/AAABAQAAAP7///8A/wD/AQABAAAAAAH/AAD/AQAA/wAAAQD/AAABAQH/Af8A/wAAAQH/AAAAAAABAAAAAAAAAAH/AAAAAAAA//8B/v8AAf8AAf8AAf8BAAD//wEAAAEBAQAAAAAAAAEBAQEB/gAA//8AAAAB//8AAQEA/wEA/wL/AAD/AP///wD/AP///wH//wL//wEA/gD/AQEAAgIBAAD//wD/AAD/Af8BAAAAAAAAAAAB/gEAAQABAQEAAAAA/v8AAAABAAAA/wAAAP/+/wEA/wAB//8A/wD/AAD/Af8AAAH/AAEAAAAA/wABAAAAAgAAAAEA/wABAf8A//8AAQEAAgAAAAAAAQABAQECAP/+/wD//wEBAAAA//4A/wABAP8AAAECAQAA/v8B/gIB/wAAAQAAAAAAAP//AAH+/wEAAAD/AAAAAP//AAH+/wD/AAAAAP8B/wAA/wABAAD//wD/AQH/Af8BAAABAv8AAAEAAQD/AAEAAQABAAD/AAAA/wAAAAAAAQAAAQEBAQEBAAD/AQABAP8AAAAB/wEBAAEAAQAB/wD/Af/+AP//Af7/////AP8AAQD/AP//AAAAAAH/AAD/AP////4A/////wIAAQEAAAABAQIBAQEAAAAAAf8AAAAAAQEBAAD/AAABAAAA/wAAAAD//gAAAAEAAQAAAAAA/wABAgAAAAAAAf8A//8B/wD/AAECAAEBAAAAAQAA/wEAAQEAAAD/AAAAAAEA/wD//wEAAAAAAQD/AAEAAAD/AAIBAf8AAQAA/wD/AAAAAQD/AAEAAQEAAQEAAQIAAAAAAAEAAQAAAAAC/wAA/wAAAQEAAQAAAf8AAQAAAP///wIAAAABAQAAAQD/Af//Af8AAAACAP8AAAABAQEB/gABAf8AAAAA/gD/AAH/AAABAP8AAAEBAQEBAQD//v8AAAAAAAEA/wEAAP8B/wAAAQABAP///gD//wABAQD/AAEAAAAAAQD//gD/AP8BAAD/AAABAAEAAQAAAAAAAAAA/wABAQD/AAEAAQAAAQD/AP8A/wD/AP8A/wD/AAEAAP8B/wAAAgEBAAD/AAD/AAD/AP///wD///8A/gAAAAAAAP4AAQD/AAABAAACAAAAAAD/AAD//wABAAEAAQAA//8AAP//AAIA//8AAAAAAQAA/wABAAABAP8AAAAAAQD/AQAAAf8A////AAABAAAAAP8BAAEAAP///gAAAP8AAAABAP8AAAH/AElIRnNzcgEAAQAAAAAA/wAAAfrz+9Ou5v8B//0AAPoAAfwAAPr+Afr/APsAAPv+//0AAfz/Afz+AfsAAfv+//v+//3/AfwAAvv/Af7/Af0AAvwAAfz+AP7/Af4AAf0AAf3/AP3/Af7/AP3/Avz/Afz/Af7/Af7/Af8AAv4BAf3/Af7/AP4A//z//vz///n+Aby17uS97wD7+wEAAAEVCABMFAAF/wD/AAAAAAD/AQAA/wABAQABAAAAAAAA/wAAAAD/AAAAAAD/AAD//wABAAAAAQAAAAAA/wEB//8A/wAAAf8BAQAB/wD/AAAB/wABAAEA/gEAAAEBAAABAP/+AP////8AAAD/AAAAAAD/AAAAAQD/AQAA/gAAAAD//wAA/wAAAAD/AAABAf/t8gC80wD0+AAAAQAAAAAA/wEAAWBiYU1OSwIBAAABAP8B/wAAAAAB/gEBAQEBAQABAP//AAH/AAAAAP//AAABAP8AAAEBAf8AAP//AAAAAAD//wD/AAD/AAAAAAAAAgEAAP7//wAAAP8AAQAAAP8BAAD/AP8BAP8A/wABAQAAAAEBAQD/AQABAgAA/wEAAAAAAAABAAAAAAAB/wECAAABAP4A//8AAQEBAAAAAAD/AAAAAgIAAAAAAQAAAAEAAQAAAAABAQD/AAAAAQAAAP/+Af/+/wABAAAA/wABAAABAAACAAAAAAACAP//AAEBAP8AAQAA/wAAAQAAAQAA/wEA//8BAAAA/wAAAAAB/wIBAP8AAAEBAQAAAQH/AAAA/wD/AAEAAAD/AP8BAP//AQAAAQAB/wD/AAEBAAD//wEAAQAAAAAAAP//AP8AAP///wEBAAAAAf8B/wAAAP4BAAAAAAEB/wD+Af8A//8AAAEAAf//AQABAQEAAAEA/wMAAAEBAQAA//8B/wEAAQEAAf/+AP8AAQAAAAD//wAA/wEBAAABAQD//wABAP8AAQD/AQD/AQD/AQABAQEBAQABAQD/AQD/AgAA/wIAAAD/AP///wABAgEBAAAAAf8A/wEAAQAAAf8B/wD+AQD//wEAAP8BAQAAAAAB/wAA/wH/AP8CAf8AAAEB/wEB/wH/Af8AAAAAAAAAAQD+AAABAQEB/gD/AP//AP7//wL//wEBAAEBAP//AAIBAAH/AP8BAf///wAAAQD/AQAA/wABAAABAQIB/wAAAP///////wEB/wD/AAEAAAAAAAAAAAACAAAAAQEAAAIAAAAAAQAAAQAAAgAAAQEAAAH//wIAAAH/AP8AAf8AAAD/AP8A/wD///8A/wD///8AAQD/AP8A/wAAAAAAAAEA//8AAAL/AAH/AAAA/wEAAAABAP//AAAA/wEA//8AAP8A/wEAAAAAAAAAAAABAQEA/wEB//8BAAABAP//AAD/AgABAAAAAQECAAEAAAH/AQH/AAAA/gD/AP//AP8AAP8BAQAAAAD/AAD/Af8AAAABAAH/AQAB/wEAAAAAAAAAAAAA/wAA/wD/AQD/Af8AAAAAAQAAAgH//wAAAAEAAAH+/////wD/////AP8A/wD/AQEBAQIAAAABAAABAAEAAQEBAQH///8AAAEAAQEBAgEBAAABAQAAAAEBAAD/Af8A/wEAAAEA//8BAQD//QD/AAABAP8AAAD///8BAP8AAAAB////AP//AP8AAAD/AQABAQABAQAAAAABAAAB/////wD///8BAQD/AAH/AQD+/wAAAAAB/wAA/wD//wAAAQEB//8BAAABAAAAAP8B/wH/////AAABAAD/AQD//v4AAQAA/wEAAP8AAQEAAAEA/wEAAP//AAAAAAAAAAD/////AQEAAP8AAQEAAQD/////AAEAAAEBAf8BAAD/Af7/AQH//wAAAAD9/wEAAAAAAAABAAACAAAAAAAAAAEBAP8AAQACAAABAP8A/wAAAP8AAAAA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AAABAAIBAAEAAP4AAP//AP8AAP//AAABAP8AAAH/AP8AAQACAP8AAAAAAf//AQH/AP8AAAD/AP8BAAAA//8BAP//AQAA////AAAB/wABAP8BAAAAAAAAAAAAAAAAAP4AAAD/AAAAAAAAAAEBAP/+AQH/AP8AANflAN3pAAD/AAAAAAD+AAAADAsNgYWBGhgaAAAA////AAABAQD/Af8B////AQAAAQD/AgEBAAD/AP8A/wD//wH/AP8A/wD+AQD/AAAAAAABAAEAAAAAAP//AAAA/wABAAAAAAAAAAAAAAAAAP8BAQEAAAEAAf8A//8AAQEBAAD/AP8AAAAAAAD/AAEA/wD//wAA//7/AP8A/gAAAAAA//4AAP8B/wAAAAEAAAD/AAABAQAB/wAB//8AAAIAAQEAAAH/AAD+AAH/AP//AAIAAAEAAP8BAP8B/wABAAEAAP4A/wEAAP8BAAEAAP///wEBAQAAAQEBAAAB//8BAP8AAQD//wAB/wAAAAEAAP8B/wD/AP///wAAAP//AAABAAAB/wAAAQABAgABAAAA/wH/AP0A////AQAAAAD+/wD/AAD+AQD/AQABAAD/AgEBAAEAAQEBAAAAAAD/AP//AAEB/wABAAAA/wD//wEAAAD/AgAAAAD/AP8AAAH/AQEAAQD/AAAB/wAAAAEAAP8AAQEAAQECAP8AAAEBAAAAAAEBAAAB//8AAAAA/wEBAP4A/wAA/wEA/gD/AAH/AP//AAD/AQAA/wEA/v8AAAD/AQAAAAEBAAAA//8AAAAAAP//AP7/Af8BAP8A/wAAAwAAAQAAAAAA/wABAAEBAAACAgAAAgIA/wAAAQD//wAAAP//AAD/Af8AAAAAAAD/AP8AAAAA/gEAAAABAAEAAAAA/wEAAAAB/wAC/wD/AgABAP//AQEAAAAAAP8BAAAAAf8A//8AAQABAP8A/wABAQEAAf8AAf8AAAAAAP8B/wD//wABAAABAQAA////AAAB/wEB/wD//wH//wD/AAAAAAEAAAH/AQEAAQAAAAAA//8AAAAAAAEA/wAAAAEAAQIAAAAAAAIBAv8A/wABAP8AAf//AP8CAAEBAAAAAAD/AAAAAAEAAP8BAAAAAAAB/v8A/wEBAAEAAQEAAQEAAP8B/////wAAAAAAAQL/AAAA/wEAAAEA/wAA/wAAAQIAAQD/AAEAAAD/AAABAAAAAP//AAEBAP//AAD/AAAB/wD//wH/AQAAAP8BAAAA/v//AAH///8A//8AAAAA//8AAAEAAAEBAQEAAAABAQEAAP4AAf8AAAEA//4AAAEAAAABAAABAAAAAf8A/wEAAAAAAAAA//8B/wAAAAD///8AAAAAAAAAAAEAAP8AAP//AAAA/wAAAAABAf8AAAD/AQAAAAEAAgIAAP4AAP7//wABAAAAAAAA/wEB//8BAP8CAAEAAP8BAAL/AQABAQABAAD/AQEBAQABAP8A/wAB/gEAAf8AAAH/AAAA/wEBAP//AAAAAv8A//////8AAAEAAQAAAQAAAP8B/wABAAIAAAD//v8AAf//AAD+/v8B/wEA/wD/AAIBAv8A//8BAP//AAD/AAAAAAEA/wAAAP8AAAABAP///wD/Af4BAAACAAD//wAAAAAA/wECAQAAAQD///8BAAABAf8AAf/+AP8AAP8AAAABAQEBAAAB/wEA//8A/wD/AAABAAD+//8AAP8BAP8BAP8AAP//AQD/AAAA/wEAAAAAAP4BAQABAf///wH/AQABAAAAAP4AAQABAAAAAAH/AAABAAAA/wH/AP8B/wD/AP8A/wH//wEA/wAA/2BhX0NDRQAAAQAAAAAAAQAAAO3a8Nu45/3/Afz+AP0AAPr+APr///oAAPr/APr+AfwBAfoA//r///r+Afv/APv+//sAAPz/Afr/APz+APwAAvz/Afz+AP3/AP3/AP3+/v0AAf3///3+Avz+Af3/Afz+Afz+AP3/APz/AfwBAfz+Afv+AcSs7PPh9wAB/wIAAAA8FQAxEAAB/wABAAAAAAD//gAAAQD//wAB/wAAAQAAAAD+AQABAQABAgAAAAD/AQABAQAAAAD/AQAAAf//AAAB/wAA//8B///+AAAAAAD/AQAA/wH/AQAAAAAAAAAAAAAAAAAA/gAA/wAB/wEAAAAAAQEBAAD/AAABAAD/AAD//wAAAAD//wD/Af8AAQDg7QDF2QD+/wAAAAAA/wAAAAEBAltcWkNDRAABAQEBAQAAAgAA/wD/AAAB/wEBAf//AAD/Af///wAAAAABAAEBAAD/AAEBAP8AAf4AAAD/AQEBAAH//wABAAECAP//AAAA/wAB/wABAQAAAAEA/wEAAAAAAQAAAAABAAD/AAAAAAEAAAAAAP//AAAAAQAAAQEA/wABAQEB/wABAAH/AQABAQABAQABAAAAAQAA/wAAAAIA/wABAAEAAAAA/wH/AQH/AAD/Af8BAgAA/wEAAAD/AP8A/wAA/wAB/wEBAAD/AAABAAD+AAAB/wAAAAEAAP//AAAA////AQEAAAD/AAACAQABAgEBAAEAAAEB/wAA/gAAAf8BAAEAAAH/AQAA/wEB/wAAAQEAAP8AAQAAAAEAAQAC//8AAAD/AAAAAQAAAAAAAf8AAAAA//8AAP//AAAAAP///wAAAAD/AQABAAD//wEAAAAAAP8AAAEAAQEAAf8BAP8AAAABAAH/Af//AQAAAAAAAAEBAQAAAAABAAEAAP8A/wAAAP///wABAQD//wEA/wEBAAAAAAH//wAAAQAA/////wD/AQEAAf8AAP8AAAAAAAD/AAEAAP8AAf8A/wD//wAAAQABAAAAAAAAAAEBAP8A/wEBAAH/AAAAAAAAAAEAAAEAAAAA/gAA//4A/wD+AAEAAP8AAAABAAH/AAEBAQEAAQAAAQAAAQH/AP8A/wEAAAAA/wAAAQAAAAAAAP8B/wD//wAAAAL/AP8AAP8AAf////8A//8AAf8BAAEBAf4A/wEBAAEBAAD/AAABAAAB/wAAAAEA/wIAAQL/AP//AAAAAAH+AQAAAQEB/wD/AAAAAQIAAAABAQH/AAH/AP7+AQAAAQD/AAEA/wAB/wAAAf8AAAAAAAD/AAD//gD/AAAAAAEA/gABAQAAAQH//////v4AAAAAAAAAAP8AAP8A/wAAAAD//wEAAAD//wD/AP//AP4AAf8AAAABAf//AP8AAAD/Af8A/wD/AAEAAQEAAQAAAP8A////AAD//wAAAP8BAAAAAAABAQEAAAAAAf8AAAD//wEBAAL//wD/AP8AAQAAAQEBAAAAAAABAAABAQIAAAEBAgEAAAD/AAD///////8AAAAA/wAAAAAAAQACAAAAAP8A/wEAAAAB//8AAAD//wD/AAEAAAEBAAH/AAD+AQACAAEBAAD/AAAA//8A/wEBAP8AAQH/AAH/AAAAAP8BAQAB/wEA/wD+AAACAAABAAAAAAD/Af8AAAH//wECAQEB/gD+//8AAAD+////AAAAAAD/AAAA/wAAAAAA/wAAAAIAAAABAAD+Af8AAAH/AAAAAQD/AP8BAAIAAQABAAD/AP//AP7/AP8BAAAA/wD/AAH/AgEBAAEAAAEBAQECAAL/AAH/Af7+AP8BAf8BAAEAAQD/AAAAAAD/AAAAAAEB/wAA/wABAAEAAQAA//////////8AAP8AAAEA/wAAAP8AAAD//wEBAP8AAP4CAAABAAAAAAD//wAA/wAA/wH//wEA/wAAAAAAAAH/AAEA/wAB/gAB/wABAgACAv//AAH//wL/AAEBAAABAAD///8CAQD/AP8A/wAAAQACAAAAAAAAAAD/AAABAP8AAAD/AAD//wH/AQAAAAEAAAEAAAH//wAPDw90dHMKCQsAAAAAAAEAAAIAAAHZsubr3Pb7AAD6/gD6AP/6/wH6/v/5/gD6/f/6/gD8/gH7/gD6/gD8/gD8///8/f/7/v/8/gH8/gL6/QD6/gH6/wL7/QL8/wL8AAP8/gD9/gD8///+AAD8/gH9AQH8/gL8/wD8/gD+/gL9/gLPvvHYvO8AAP0B//4AIwv/SRoAAf4AAQAAAQEAAf8AAQEAAP8AAQEA/wAA//4A//8AAP8AAAAA/wAAAAAAAf8A/wAA/wEAAAAAAQAAAP8AAAEAAAEAAAEAAQAAAAAAAP8BAQH/AP8AAAD/AQH//wAAAAEB/wIA/wAA////AQAAAAD///8A//8A//8AAAIAAQEA//8AAAAAAAAA7vb/vNIA9/oAAAEAAAEAAP8AAAAzMjF1dnQAAAAAAAD/AP4AAQD/AAD/AAEA/wH+AP8AAAAAAQAAAQAAAQH//wD///8AAP8AAAECAAACAAABAf//AP//AQEA/wD//gAAAAAAAAAA/wAA/wABAAH/AAH/AP8BAf8A/wD/AP8AAgABAQD/AQAAAQECAf8AAf4BAP8AAQL/////AAEA//8AAgAA/v8A//8A////AP8A/gEAAAAAAQAA/wEAAf8A/wD+AP/+AAABAQAB//8AAAH//wAAAQABAAAAAP//AAD///4AAAAAAAAAAP8BAQAAAAAAAQABAP8AAAEAAf7/AP8BAgAB//8A/////wEAAAAA/wEBAAEAAP8A/wAA/wD/AQD//wD+/wACAP//Af8AAP8BAAEBAAAAAQAB/wAAAQAAAAEB/wEAAAAAAQD+AAABAQEAAQAA/wAAAAEAAQAAAAH/AAEAAAIAAAAAAAABAAH/AP8AAP///wEB/wABAAAA/wAAAQAB/wD/AAAA//8B/wAA//7/AAAB/wD/AAAB/wD///7/AAAAAQAAAAAA/wAAAAAAAf8AAQEBAAABAgAA//8B/wAAAP8A/wABAgAAAAABAAAAAAEBAAH/AP8A/wAAAQD/AAAAAAEBAAD/AQD/AAD+AQD////+//8AAAD/AAICAQAB/wH/AgAAAQABAAAAAAAAAQD//wD+AP8AAP8BAAAAAQAA/wH/AAAA/wH//wD/AAEBAAAAAAAAAP8AAQACAP8BAQIAAQACAAEBAAAAAP8AAAD/AP8A/wD/AAAA/wAAAf8AAQAAAAH/AAEAAAAA/wAAAP8BAQAAAAEAAQD/AP8A/wD/AAD/AP//Af8B/wABAQD/AAEBAf8AAP4AAAD//wD/AAD///8BAAD//wD/AAAA/wH//wD/AAAA/wL/AP7///8AAQABAAECAAAAAAIAAAAAAAABAAAAAAAAAQAAAAABAAH/AQD/AP8BAAABAQAAAAACAQABAAAA/wABAAIBAAD///8AAQABAf8CAAEBAAAAAAAA/wAC/wAA//8A/wAA//8AAAAAAAEAAQH/AAD/AAEBAAEBAP8AAf8A/wH//wAAAAD/AP//AAAAAP////8AAAD/AQEBAQABAAD/AQEAAAEAAP//AP///wABAAAAAP8AAAABAAABAAEBAAAAAQAB/wAAAQAAAf//AP8AAP//AQD/AAEBAQL/AAABAP//AP/+AQAAAQACAP//AAD//wEAAAAAAAD/AAAAAP4AAP8BAf8AAQEA/v//AAAAAgIBAAEAAQIBAQAAAAAAAQD//wAA////AQIBAQAA////AAD/AQABAAAAAP8BAQABAQEAAAEAAAAB/wD/AAD/AQABAQEBAP8AAAEAAAD///8AAAAAAAAA/wAB/wD/AAEAAP8BAgAA/wABAAAAAf8BAgD/AAAAAQAAAAD+AAEAAAEA/wD/Af8AAQACAAD/AAEBAAABAAD/AAEAAP8AAP8BAf/9AAAA/wAC/wEAAAAA/wD/AAEA/wAAAAABAAEAAAIBAQAB/wD/AQH/AAEAAAH/AAEA/wAA/gAAAAD/AQIAAAD//wAAAAD+AQAA/wEAAAEB/wAAAAAB//////8AAAH/AAAA/wABAAAAAAAAAgAAAf//AP8AAAAAAP8AAAEB//8ASEhFaWtpAAAAAQD/AAD/AAAC+/D60qHg+PL++///+v4A+v//+AAB+f8A+v8A+/4A+v//+v4A+///+v7++v4B+v8B+/0A+v7/+v///P7//P///f4A/f8A/f4B/P0A/f4B+/8C/f4C/P4B/P8A/P0B+wAA/P0B/P8C/f8A5+D8yabp/ff6AP//ARQI/1YbAA0AAAAAAAABAAD/AAAAAP//AQABAP//AAD+AP8AAAAAAAAAAP4BAAD/AAEAAP8BAAD/AAEAAP8AAP8AAAAAAf//AP8AAf//AAAAAP8AAP8A///+AAAAAAEAAP4BAAABAAAA/gD/AAEAAAAAAP8BAAAAAAABAQEAAAABAAL/AAABAAABAP8BAPP4ALjRAPD3AAACAAD/AAAAAAAAGhobk5SSIiIjAAD/AAAAAQACAf//AAAAAQH/AAH/Af7/AAD//wD/AQAA////AQAAAQACAAAC/wD//wEB/wAB/wEBAQABAf8AAAABAAEA/wEAAAAAAAABAQAAAAAAAQEAAAAB//8AAQABAAACAP8A//8AAQABAP//AP8AAf8CAAEAAP8AAQAAAAD/AAICAP//AAH/AAIAAAAAAf//AQH/AAEA//8AAAH/AQAB/wH/AQAAAAAAAAAA/wEAAQD//wEAAf8A/wAB/wABAQABAQAAAQAAAP8AAAEB//8AAP8AAP8BAAAB/wD/AAAB/wABAAAB/gABAP8AAQAAAAAA/wAA/wAAAQD/AQIAAAEAAQD/AQEAAQD//wH/AAAAAAD/AAD/AAEAAP8AAAEAAP8AAAD/AAIAAAAAAP8AAQEAAP8AAP8AAAEAAAEAAP8AAAAAAQAA/wD/AP8AAAAAAAAAAAD/AQABAAD/AAEAAAABAAEAAf4B/wEAAv8AAAAB/wAAAAAAAP8AAAAAAAAAAAIAAQABAQEAAP8A/wAA/wD//wAAAAAAAf4BAAAA//8A/wEB/wEAAP8AAQIAAP4AAQH//wD///8A/gAAAQAB/wAA//8AAQABAP//AAEBAAAAAQEAAQAAAQABAQEA/wEA/wD+//8A/wEAAf8A//8BAAABAQABAAEAAf8AAAAAAAAB/wAB/v8AAQEAAf8A/wH/AAEAAf///wAAAf8AAAABAP8AAgEBAAD/AP4AAAEAAAAAAAABAP8AAQD/AQEAAAAAAAAAAP8B//8AAP8AAAD//wAA/wEAAAEA/wD//////wH/AQD/AP8AAQEBAf4A//8BAP///gAAAAAAAf8A//4A/wD/AQEAAf8BAQAA/wAAAf8AAQABAAEAAgEAAAEBAAH+AP8BAgEBAAD/AAH/AAEAAP8AAAAAAv8AAAAAAf8AAAABAAAAAAAAAgAAAQEB//8A/wAA/wEA/v8AAAAAAAEAAAD/AAD/AAEAAP////8A/wAAAAEA/wEBAAAA/wEAAAEAAQAAAAAAAAEAAAAAAQAAAP8AAQAA/wAAAQD/AP8B////AAEAAAAAAQEBAAAAAAH/AQIBAQAAAv8AAAAA/wABAQAAAAAAAAD/AP8AAAEB/wD//wD//wABAAAA/wAA/wABAP8AAP////8A/wAAAgABAAABAf8AAQABAP//AQAAAP8AAQABAf8AAAAA//8BAQAAAQAAAAEAAf8BAQAAAf8A/wABAP8CAAD/AAEAAv8B/wAAAQEAAf/+AAD/AAD//wABAAAAAAEBAQAAAP8A/wEAAgAAAQD/AP8A/wABAP8A/gAAAP///gAAAAEBAQAAAP8A/wD/AQAA//8AAAAAAAEBAQAA/wEA/gAA/wAAAP//AAEAAf/+//8A/wD//wAA//8AAQAA//8AAAABAQAB/wAAAAAAAf8AAP8A/wEAAQAAAQABAAABAAD/AAAAAAACAP8CAQAAAQEAAAAAAf8A/wEAAQEAAAAAAP8A/wABAf8AAQAAAAH/AAEAAP8AAAAAAQAB/wH/AAH/AAEBAQD+/wH/AAABAAAAAQEAAAD/AP8A/wD/AAD//wAAAAEAAQH/AAH/AAEA/wD/AAABAP8B/wAAAQABAP8A//8B/wD/AAAA//8AAHZ1czQzNP8AAAAAAQAA/gAAAe7S8NCk4vr9APkAAPn+APr+//r/APn///n+//n+APr///n///n+Avr///v/Afv/APv/APz+APz+Af3+Avv+Afv/APr9//v/APz/Af0AAfr/Afz+Avz+A/0AAf3+Avz/Av79AfT0AMSk5/Xn9wD/AAIDAf9SGf8gCQAAAAACAAAA/wAAAQAAAQD/AQD+AAAAAAAAAQAB/wD//gD//wAB/gAAAAD/AQD/AAD/AQD+/wABAAD/AAEAAAAAAQEAAQD/AAAAAQABAAABAAAAAAAAAAD/AAAB/wAAAAH/AAAAAAAAAAAAAAAB/wD/AAAAAP8B/wABAAEAAQAAAAD+AgDz+AC20ADk7wAAAAAA/wAAAAAA/wAAAYiHhjg4OAEA/gEBAAAA//////8AAAAAAP8AAf8AAAEBAv8AAQH/AP//AQAAAf8AAf4AAP///wEAAQAA//8AAAAA////AP8A/wABAAABAAAAAQAAAQAA//8A/wAA/wD//wEAAAAAAP4A/gAA/wABAAEBAP/+/wAAAP8AAP8A/wD/AQABAAAAAQAAAQD/AAAAAAAAAAAAAQABAAEBAf8AAAH/AP8AAAD/AAD//wEAAQAAAQEAAf8A/wIAAAAAAQIBAP8AAAEAAAEAAAAA/wAAAAAA/wABAAABAQAAAAAAAAAA//8AAAEAAQEAAAEAAAD/AAAA/wEBAAEA/wAAAAAAAAAAAP//AQH/AP8A//7/AAAAAAD/AQD/AQD/Af//AAAA//7/AAEA/wEAAAECAAAAAAD/AQEAAQAAAAD/AP8AAQAAAAD/AP///wD/AAAA/gAAAAD/AQAAAAAAAP8A/wAAAP0A/wD/AAD/AQEA//8AAAAB//8AAv8BAAD//wEAAAEBAf8AAAABAAAAAAD//wAAAAAAAAAAAQEBAAABAQIAAAH///8C/wH/AAEAAAH/AAEA/wEBAf//AAAAAAD/AQAAAQEA/wAAAAAB/wIAAAABAP8A/wAAAQAAAAH/AP///wD//wABAAAAAQEA/wEBAP4A/wEAAP//AAAA/wAA/wAA/wD//wAAAAEAAAAA/v8A/wIBAP8BAQACAAAA/wH/AAABAQAAAf8BAP8AAAEAAAIA/wAAAQEB/wAAAAAAAAH//gAB/wAAAQAA//8AAP8A////AAD/AAABAAH/AAEBAP//AP4AAAAAAAAAAAH/AQD/Af8AAAD//wACAQACAf8AAAD+AQD+//8AAAACAQAAAQH/AAEAAAAAAQIAAAABAP8A/wAAAP///wD//wEBAgEBAP7//wAAAQD/Af/+AAAB////AP8AAQAAAP4AAQAAAAAAAQABAP7/AAD/AQEBAAEAAAAAAAH/AP8AAQAAAAEBAQABAgIAAAEA/gAAAAAAAf//AAH/AAAAAAAAAAAAAf8B/wABAAD//wH/AAAAAAAB//8BAP8A//4AAf////8BAQAAAAEAAAAAAAAA/wABAf/+AP8BAP4BAAD/AAEA/gEAAAABAAD/AQEBAQH//gH/AQD/AAEA/wAAAAEAAAEA/wAAAQABAQH/AAEAAAAAAP//AP8BAAEA/wABAAD/AAABAAAAAAAAAAH/Af8AAAAAAAABAAD/AP8A/gH/Af8BAQEA/wAA/wAAAAD/AP4BAAD/AP//AP8BAQABAP8A/wD//wABAAD///8A//8BAQD/AQD/AAAAAQABAAAB/wABAAAA/wABAAEBAAAA/wAAAAEBAQEAAP8AAQEA////AAAA//4A/wD/AAAAAP8A/wABAQD/AP8AAQIA/wEAAQAAAAAAAQAAAQL//wAAAAAAAAEA/wABAP//AP8CAAEAAAABAAAA/wD//gD//wD/AQAA/wAC/wL/AAAAAAAAAf8BAAEA/wAB/wABAAABAAAAAAAA//8AAP//AAD/AAACAAAAAP8AAAIAAP8AAAD+Af8AAQD/AAD//wD//wAAAAH/AAAB/wABAQD/AAEAAAEBAf//AAAAAf///wABAQEB/wAA/wH/AAAAAAABAQABAAEAAQAAAQEA/wAVFRSIiIgNCw0AAP8AAAAAAAAAAADouubUqOb8/AL6/wD6/gD4/QD4/wD4///5///6///6/v/5AP75/wD4/v75/wD6/wD6///7///7///7///7/QD7/wH8/gD6AAL7/gD7/gL7/wH6/wD6/gD8/wH7/gD6/QLHs+3iyu0AAP0AAP8ANBH/MQ4AAf4AAQAA/wAAAQAAAf8AAP8AAf7/Af8AAP8AAAAA/wAAAQEAAAEAAAAA/wABAAAAAAEAAAABAQEA/wABAQD/AAEAAAD/AP8AAAEA/wAA/wAAAAABAAIB/wH//wAB/wAAAP//AAABAAAAAAAB/wEA/wEAAQAAAP8AAAEAAP////8B/gAB5/EAtdEA4/AAAAAAAP8AAAAAAP8AAP9ZV1hXVlcA//8A/wEAAAD//gEBAAEAAAEAAAEA//8AAAAAAQACAAH/AAABAP8AAP4BAQACAAABAQEA//8B/wECAQAAAAAAAAAAAAAA//8BAAAC//8AAP8AAAABAAAAAAAAAAD/AP8A/wABAAEA/wAB/wD/AAAAAQEBAQAA/wAAAQD/AP8BAAAAAAAAAQAAAAAAAQEA/wEB/v8AAAEAAQEBAQH/AAABAAAAAAH/AQD/AAAAAf//Af8AAAH//gD/AAAAAAAA/wAAAAAAAf8AAAAAAQEAAAEB//8B//8AAAD/AAEA/wECAQEAAAAAAAEAAQAAAAAAAAH//wD//wAAAf8AAP8AAQAAAQH/AAABAAEAAQAB//8AAQABAAAA//4BAQEAAAEBAQD+AAEAAAD//gAAAAAA////AP8A/wD/AAAAAP//AQH/AP8AAAEAAf8AAAIAAAABAf8AAf//AAAA/wAAAAABAAAAAQAAAQD/AAAAAAEAAP8BAP7/AAEAAQEA/wAAAAABAAAB/wAAAP8AAQABAAD//gAAAf8A/gABAAD+AAD/AQEB/wD/AQD/AAABAQAAAQEAAAAA/wAAAP8AAAAB/wAAAAEA/wAA/gH/AP8B//8BAAH/AQEA/wD+AAABAAD//wAAAAAAAAD//wEB/wECAQABAAEBAf8BAP8A/wAA/wEAAAL/AAD/AAD/AAABAQD/AAAB//8A/v8BAAEAAQAAAAABAAABAAABAQD/AAACAAEAAP8AAAEAAAAAAQABAQABAAEB//8AAAEAAAAAAAEBAQAAAQAA/wEAAQD/AAAAAAABAAAAAAAAAQH/AQD/AAABAAAA/wD/AP7/AP//AAABAf8AAgAAAAAAAAABAAAAAP//AQAAAf//AAAAAAAA/wABAAAAAAAAAQD///4BAAABAf8AAAAAAAABAAAAAAABAgEA/wAAAAABAf8BAP4AAP7/AP8BAAAAAP4AAP///wAB/wAAAQEC//4A/wD///8A////AAD+AQICAQIA//8BAAD/AAAAAf8A/wD//wD/AAEAAAEAAAEA////AP8AAAEAAAEAAQEAAQEBAQABAQABAAD/AAABAP8BAQH//gAAAQAA//8AAAD/Af8AAAH//wD/////AAAA/wAAAQABAQABAAEB/gAA/wAAAAD/AP//AP8AAP//Av//AQD///8BAAEA/wH//wD//wD/AP///wD/AP8AAAD/Af8BAQH//wD/AAEBAQH/AAH/AP8A/wAAAP8AAAAA//8AAf8AAAACAP8AAQABAQEA/wEBAAEAAQEBAAD/AQABAAABAP8A/wD/AAAA//4BAAEAAAD/AQACAQD/AAD/AAAA/wAA/wD//gAA/wAA/wAAAAABAQEAAAAB/wEAAQEA/wEAAAEAAAAAAP//AQD/AgAA//8AAAEAAP//AAD/AAEAAP8BAP8BAAEA/gAAAgAA/gAA/gAAAAEAAAAAAQIAAQEBAgAA/////gAAAAAAAP8A//8A/wAAAAIA/wAA/gAAAAEB//4AAgEBAAABAQAAAAEA/wD//wABAAAAAAABAAEAA/8AAQAAAAAAAAABAf8A/wAAAP8A//8BAP8AAAAAAAEA//8AAAEA/wAAAQAA////AAAAAAEAAAAAAP7///8A/wD/AQAAAQAA/wEAAAEBQ0Q/U1NSAQABAAABAAABAAAAAP8A5azh16/k/P4C+P4C+AAA9v4B9v8A9/4A+P8A+f4B+v4B+v7++f7++f//+v4A+P4A+f8B+f4A+v8B+v8B+v8A+v8A+/3/+v0B+/4A+/7/+wEB+v4B+v8A/f8C29f517XlAP78AAD+ARMG/kgWAAIAAP8BAAEAAAEAAAD/AP8BAAH/AAEBAAD/AAIBAAH/AAEAAP8AAAD/AQEAAAD///8AAAD/AP//AP8AAQAAAAAAAAAA/wAAAf8B////AAAAAAEAAP8A/wD//wD/AQEA/wAAAQABAAAAAAAAAP8A/wEAAAD/AAD/AAABAAABAAECAPwB/83j/63JAOLuAP8AAAAAAAACAAEBAAABSkpLj5CNBQgGAAABAAEBAP8AAQH/AAD/AAD/AAAAAAEAAf8A/wAA/gD/AAAAAAEBAQABAP8AAAH/AQAA/wEA/wAAAP//AP8AAQEAAP8AAAEBAAAA/wAAAQEBAQAB/wAA//8AAAEAAAAAAAEAAQAAAQAAAAAAAAABAQAA/wABAQEBAAAAAQAB////AAEAAP///wD/AP//AAIBAAEBAP8A//7/////AAAAAAAAAAD+AP8AAQD/AP8AAv8AAQABAAEAAQAA/v8AAAEAAQEBAP8AAAAA//8B//8A/wEBAAEB//8AAQD/AAEA//8AAAAA/wAAAP8BAP//AQAAAAEAAAD/AP8BAAAB//8AAAD//wAB/wAAAQABAAEBAAAB/wAAAAIBAQAAAAAAAP8AAgAA/wD/AQEAAAAAAAEAAQAA/wIAAQAAAQEAAv//AQABAAD/AAAB////AAAAAQAAAAACAQD/AQIAAQABAP8AAQAA/wAAAP8AAAD/AAAA/wABAQH//wH/AAEAAQAAAAAA/wH/AAEAAP8C/wAAAQEAAP//AAEBAAAA/wD/AQAAAAAAAAAAAf8B/gAAAP8BAAEAAAEAAAAA/wAA/wAAAP8AAQEAAAEA/v8BAAAB/wAAAAD+/wEAAgAA/wAAAAEBAAAAAAAAAAAAAAAA//8AAAD/AAAA//8BAAH/AAH//wD+AAD/AQAAAQABAP8AAAAAAAD/AAEBAAABAAAA/wD/AAD/AAAA/wAAAAAABAAAAP8AAAD/AAEBAAAA/v8AAQEBAQEA/wABAQEAAP/+AAEBAgAA/wEAAP8BAQH/AAIA//8AAQAA///+AQEBAP8AAAAAAAEBAf//AP8AAAEAAAAAAP4AAAEAAP8BAAD/AAEBAAAAAAABAQH+AAAB/wAA/wAAAP8AAAAAAP8B/wEAAAABAAAAAAEAAf8A//8A/wD/AQEBAAABAAD///8BAAEBAAAAAAAA/wEAAAAAAQEAAP//AAD/AP8AAAEAAAAAAAEB/wH/Af7//gEAAQH///4BAQEAAQAB/wAAAQAA/////wEBAQEAAAAAAf8AAAEAAAD/AQAAAAAAAP8AAQH/AP//AAEB//8CAAD/AgAA/gAAAQABAP8AAQAC/wD/AAEBAv8A/wABAAH/AAAC/gAAAQD//wEAAAD//wABAAECAf//AAEBAQABAQD//wABAAD/AAAAAAEAAQAAAAAB//7/AAEBAAABAQD///8AAQAAAP///wD/AQABAAABAAH///8BAAAAAAABAf8AAQD//wEB/wAAAP7/AAEAAAABAgH///4AAAEAAAAAAP8AAAEAAAD/AAEA/wEAAf4AAAAA/wABAQAA/wD//wEAAAAAAAH/AAAAAQD+/wABAAAA/wD/AQAB/wD/AQEAAAAAAQAB/wABAP8AAAAAAAEA////AAEAAf8AAAEAAAAA/wABAf//AAEB//7/AQAA/wIAAAD//wAAAf///wEA//4BAAAAAQEAAAABAP8A/wEAAP8AAP///wIAAgAB////AAEBAP///wAAAAAAAP///wEAAQH/AAAA/wAAAQH/AAAA//8AAf8A/wAA/wAAAQAA/wEBAAAAAAAAAAAA/wD+AAABAAD/AAEAAAAAAAAAAP4AAAH//gAAAQECAP8AAf8AAAH/AP8BAAEAAAAAAP//AYKEgt7f38PDxP8AAAAAAAAAAAAAAeap4/4EACFNG/7+AAMD/wIAAQT+/wUBAAUBAAP+/gQAAAICAfz+/wIAAAMAAf0CAAH+AAEA/gIBAQIAAAD/AAAAAAAA/wEAAAABAf/9////Af//Afr4/86x6Pzv+QEAAAEA//5CFQAYBgD/AAAA/wD/AAD/AAAAAQAA/gD/AAD//wABAAD+AAAAAAD/AAAAAAAAAf8AAAAAAQAB/wAAAAAAAP8A/wEAAf//AQH/AP//Af//AAAAAgAAAAEA//8AAAAAAAAAAP//AAAAAP///wAAAv8B/wAAAAD/AAEAAP8AAQAA/wABAAD/AQDU5QC+1QD9/gAAAAAAAQAAAAAA/gD/ADo4OZSTkBcYGAAAAAAAAQAA/wABAP8AAQH/AP8A/wEB/wAAAQAB/wD//gABAAAAAv8A/wABAQH/////AQAA/wABAAH//wAAAAAAAf8A/wABAQD///8BAQAA//8A/wEBAQAAAAD//wD/AgEA/wD/AAABAP8AAAAAAQAA//8AAAD/AP//AAD/AAEA/wAA//8AAQAAAgEA/wAAAAD/AAAB/wAAAQAAAQAA/wD/AAAC/wAAAQD/AAAAAP8AAAAAAP8AAAEAAP8AAQEA/wABAf///wABAgH//wAA/wEAAP8AAP///wEBAAAA/wEA//8AAQEAAQAAAAEAAP8BAf8A/gAAAQEBAQEAAP8AAAEAAQAB/wEA/wD/AAD//wAA/wABAAEAAP8AAAAAAAD/AAABAP8BAAD/Af///wABAQAAAf8B/wD+AP8A/wH/Af8BAP8AAQAAAP8AAQEB/wAAAP8AAAAA/wAAAf//AAH/AAECAf//AAEB/wH/AAAAAAABAAH/AQAAAAH/AAAA//4AAAAAAAH/AQEAAAAA//8AAAEAAP8AAQEA//8AAAIAAQD/AAABAAABAAAA/wAAAAAB//8AAAEA/wABAAEAAf8B/v4BAgH//wEBAQIA/wAA/wEAAP8AAAH/AAAAAQEAAQAA////AAEBAAEAAAD/AQEB//4A/gAAAQEB/wAAAP8B/wAAAAD/AQAAAAAB/wD/AQEA/wAAAQD/AAAA//8B/wEBAQD/AAAAAAEAAP8AAAIAAAAB//8BAQD/AP8AAQABAQAA//8AAQIAAAD+/wAAAP//AP7/AAAAAP8BAAAAAAD/AAEAAAAAAQEAAQD/AAECAQABAAAA/wEBAQIB/wL/AQH/AAAC/wABAAAA/wAAAAD/AAAAAAD/AP8AAf//AAH/AQAAAAAA////AAABAP//AP//AQH/AQD///8BAAAAAAEAAAAB/wABAAEAAAEBAQEB/wAA/wAB/wEAAAEAAP8AAAAAAQD/AP8CAAEAAAAAAP4A/wL/AAAAAQH/AAH/AQIB//8AAf8AAAABAAEAAAIAAAH/AAAAAQAAAQABAQAA/wD/AQAAAP8AAP8BAP8AAAAAAQD/AAAB/wABAP8B/wEAAAABAAEAAAD//gAAAAD//wAAAAAA/gD/AP8A/wEA/gAAAAEAAAEAAAABAAD/AP8AAP//AAAA//7/Af8AAP8BAAECAf//AP4BAP//AAABAAAA//8B//7///8A/wABAf4BAP8AAf4BAP8B/wD/AQAAAAAAAAAA//8AAQEAAQAAAAEAAP8BAAAAAAAA////Af8BAAH+AAAAAAABAP8BAAAAAQAAAAD//wAAAP8AAAAA/wAA/wEAAAEAAAEBAAD///8AAP//AQAAAAAA/wD/AQABAQAAAAAAAQD/AP///wABAAEAAAD/Af8AAAEBAAEAAAACAAAA/wAAAAD+/wABAQAB/wIAAP8BAAAAAQAAAAAAAP8BAAD/AAAAAAABAAAAAP8AAAEBAAAAAAAAAAAAAQIAAf////8BAP4AAP8BAAEAAP8AAAAAAQIAAAD/AQAAAQABAQD+AP//AQH//wABAAEAAAAAAv8AAP8A////Af8AAQAAAQEAAQEAAAEAAAD/AAH/AAEAAAEBAAEAAQEAAAD/AAEAAAAAAAD/AP8A//8A/v8B/wABAAEcHRudnpswLy8BAAEAAAEAAAAAAP8A/f/ppeLepOP8+wL4/gH3/gH2AAD0AQD0///3AP/2AP/3///4/gH6/wD4AP76/QD7/v/6/gD4/v75/QD4/wD5//75///5///5/v/5/QH5/gD7AADg2Pju0O0AAP8AAP4BHAsANxAAAv8AAAAAAQAAAAAAAQAAAP8AAAAA/wEAAAAAAAEAAf8AAAEBAAEB/wAAAP4A/gAB/wAA/wAA/wABAAAB/wH///8BAP///wABAf8AAgAAAAAAAAD/AAAAAQAAAAEAAQAAAQAAAQAAAQAA//8BAAAA/wAA/wD//wAAAQAAAQIAAAEA/wAB2OgA/f0AAP8AAAAAAP8AAP8AAAEoJyeVl5QhIiIA//8A/wAAAf8A/////wAA/v8AAP8BAAAA/wAB////AAABAAEC/wH//wABAAAB//8AAAEAAP8BAAAB/wAAAQD/AAABAP8B/gAAAAAAAAEAAP8BAAAA/wAAAP8B/wEAAgEAAP8AAQAAAQD/AAAAAQAAAQAA/wABAAABAQAAAf8AAQD/AQD/AAIBAP8BAP8AAQEAAAD/AP///wEAAP8A//8AAAEAAAD//gEA/wABAAAAAAIBAQEAAAACAAABAQEAAAAAAAEA//8AAP8A////AAEBAQEAAgEAAAAAAAAB/wD//wH/AAIAAAD/AP4AAAD/AAAAAP4BAAIBAAABAQD/AAAAAAAAAAAAAAH/AAD/AP8BAQD/AQEA/wD//wAA/wD+AQD/AQAAAAD//gABAAABAQEBAQAAAP8A/wABAgABAgEBAQABAQEAAP4AAAABAP8AAAAAAQAAAAAAAQD/AP8BAQABAAAA//8CAf8A/gD+Af8AAAH//wH/AP8AAP//AP8AAP8BAf8CAQAAAQAAAAAA/wABAAD/AP8AAAAAAAABAP///wAAAQD/AP//AAEAAAABAAD/AP8B/wD/AQAAAQH/Af8AAAEB//8AAQD//wAAAAAAAAEAAAEAAQEBAP8AAP8AAP8AAQABAQAAAAD/AQAAAv///wEBAQABAAEAAAEAAAAAAAAB/wAAAQAAAAAA/wEAAP8AAAH///8AAQAAAQAB/wH///8BAP8AAAAAAAAAAQECAAAB/wEAAAEBAAABAAACAf8A/wABAP/+AP8BAQEBAAEBAQABAQAA//8BAP8AAAH/AAD/AAAAAAAAAQAAAAD/AP4AAAAAAQD//wAAAAEAAf8AAf8A/wD//wAAAQAAAAD/AQAAAAAAAP7//wEAAf8AAf8A//8AAQEBAf//AP8AAQAAAQD/AP8AAQH/AP//AQEA/wD/AP8A//8AAAEAAAAA/wEAAAAAAAEAAAAAAP8BAAD/Af8AAgAA/wD/AQAAAQED/wD///8AAP8AAP7+AAD//wEAAP4A/////wD/AQD/AAIAAAAB//8AAQEA/wAA/wEAAf8BAAAA/wABAQAB/wAAAAAA/wABAAAA/v//AAEA////AP8AAQEAAgABAQABAQD/AAAAAAEAAAAA/wAB/wEBAP//AAD+AAAAAAABAP8BAAAAAP8A/gABAP4BAAAB//8A//8AAQEB/gAAAQAAAAEBAQIB//8AAAL/AAAAAP8CAAEAAAEBAAEA/wAAAv8BAgACAP8AAQEBAP//AAD//wD/AP8AAAEAAQEAAAD///8C/wEAAgAAAP8A//8AAAD/AQAAAAEA/wH/AP8BAP8AAAAAAf///wAAAAD//gAAAQEA/wEAAQAAAAEB/wAAAAAA/wABAP//AP//AAAAAQAAAAAA/wEAAP8B/wEAAAEAAAH//v8A/wD/AAD/AgH/////AP/+AQACAAEB//8AAAEAAAAA/wAAAAAAAf8AAAAA/wAA/wAA/wAA/wAAAgAAAf///wAAAQAB/wAAAAAAAAD/AAABAAAAAf///wAAAAABAP4A/v//AQAAAf8AAQEAAAH/AQEB//8AAAABAAICAf8AAP8AAv8AAAD/AAAA/wAA////AAAAAQAAAAH+AAAAAAABAAD/AQD/AQD/AQEAAP8AAAEB/wAAAAEAAAABIyQjp6mlNzc3AAAAAAABAAAAAAD///0A6bHi2pTZ9uv7+QAA9gAA9v7/9f7/9QAB9f8B9v4A+f//+P4A+v0B9/7/9/7/+AEB+QAA9/8A+/8A+f4A+v8A+f7/+f//+//+/f//9f3/3cjvAPn7AAD/AQD/AEQYAA4EAP8BAAEAAAD/AAEBAAAAAAEAAAEBAAEAAP8AAAD/AAEAAP///wD+/wH/AAEBAAD//wH/AP4AAQD///8BAAD/AAABAP8AAQL/AP//AP8AAQD/AP/+AP8BAP4AAAD/AAAAAAAAAP8AAP//AQEA//8AAAAAAAEAAAAAAAABAAEAAAEAAAMB/w8KAAAAAAABAAAAAAD/AAAAISAgpqemMC8xAP8BAAABAAD/AAAAAAABAAAAAAEA/wAAAAAAAAEA/wAAAAAA/wAB/wAAAv////8A/wAAAAD/AQEAAAEB/wAA//8BAQEB/wEA/wEBAAD/AAEAAAAB/wEBAAAA/wAB/wD/AQAB/wD///8A/wAAAQEBAf8AAAD/AQEB/wAA//8AAQEBAAAAAQEAAQEAAAAAAAEAAP//AAAAAgEAAAEAAP4BAAEA/wD/AAEBAQH/AAAA/wABAQEAAAD/AAAB//8AAP8AAAD/AAD/AAD/AQABAQABAAH////+///+AAAAAAAB/wAAAQAAAAD/AAD/AAABAQH+AAH/AAABAAD/AAAA//8AAAABAAABAAD/AP8AAQAAAgAB/wABAAD/AAL/AAEAAQAAAf8AAQEAAAAAAgEA/wD//wD///8AAAAAAAAAAP8A//8B/wAA/wAAAQEBAQAAAAAA/wEAAAAAAP8AAP8BAQACAAAA/gEAAAAAAP8A/wH/AQAAAAH/AQEAAP8AAP//AQAAAQACAP8B/wAAAP8AAQAAAAEAAAEBAAACAAAAAAEAAAABAQIAAAAAAP8BAf8AAAAAAAEBAf8B/wEAAf8B////Af7/AQD/AQEBAf8BAQD/AQH+/wAAAP/+Af8A/wAB/wAA/wAB/wAAAP//Af8AAf8BAP8AAgEA//8CAAH/AAAAAAEAAP8BAAAAAAH/AAAA//8AAAAC/wD/AQAAAP8AAAAAAAH/AAAB/wEB/gAAAAEAAQAAAgD//wEAAgD//wEAAAD///8AAQAA/gAAAQAB/wD//wEAAAAA/wEBAAABAAAAAAD/AAEAAQAAAAEAAf8BAAAAAQABAAEAAP8AAQAAAAAA//8A//8BAAEBAQAAAAABAAEBAP//AP//AAAAAQD/AAABAAAAAAEBAAAA/wACAQABAAABAQD/AAABAAAAAQABAQEAAAH/AP8BAAAA/v//////AAD/////////AQAAAAACAf8AAAAC/wAB/wABAAAAAAD//wEAAAABAAABAAACAQH/AAIAAQAB/wEBAAAAAP8AAAD//wEA/gEAAAD//wH//wH/AP8A/wAAAQAA/wD//wAAAAABAAEA//8AAAEAAf8AAAABAAAC////AAABAAD+AAAAAQEAAAEBAAAAAQAA/wAAAAEC/wAAAQABAP8BAQAAAAEBAAECAAIAAAEBAf///wACAP8AAP//AAAAAf8AAQAA/wD//wECAQD/AQAA/wAA/wD/AQH/Af//AQEB//8A//8A/gECAQAA/wD//wEAAAD/AP8BAQD///7//wD/AAEA/wEAAAABAAABAAACAf8AAf8A/wD/AAD/AAEBAAECAAAAAP8BAAEAAP8AAQABAQAAAQD//wAB/////wAAAQEAAQH/AAABAf8AAgH//wAAAP8A/wH/AQAAAAEAAf8A/wAAAQEA/wABAQABAQAAAQEAAf8CAQAB/v//AAEB/wD/AQD/AAH//wH//wAA//8AAAEAAAEA/wAA/wH/Af8A/wAAAAAAAQAAAAL/AAD/AP4AAAAAAAD/AP8AAAEBAAAA//8CAQEAAAAAAP8A/wABAAD//wAA/wH//wD/AP///wAAAP////4A//8AAAAA/wAAAAAAAAAAAP8A/wD/AQAAAQEB/wD/AP8AAAH/AP8AAAABAAAAAAEB/wAAAAD//wD/ACYnJpWWkR8eIAAAAAAAAAAA/wEA/wAAAfPH7N6G1fDK8fj9BPQABvMAAvH+APT+APYAAPX+//f/APn9APr///kAAPr9//r+APsA/vj///r///r///v///v+APv///X/AN/g/OzH6gAA/wAAAQAgD/4xDQAB/wAA/wAAAAD/AQAA/wABAAD/AAAA/wAB/gACAAAAAAD+AAAC/wAAAAAAAAD//wABAAAAAQECAAD/AQD/AAABAAAA/wAA/wD/AQD/AQEAAf8AAAAAAQABAAABAQD/AAD/AAD/AAABAAABAf///wAAAAABAQD/AAABAAAB/wAAAQABAQABAQAqGAAHBgAAAAAA/wAAAQMBAn9+fS8uLv8A/wAAAP8A/wABAf8A//8AAAEBAAAAAP8AAAEAAAAA/wEAAAD/AAAA/wEAAP8BAAEBAAABAAABAf8AAP/+/wEAAAAA/wAAAAEAAQAB/wABAAAA/wD//wD//wAA/wAA/wEBAQAAAAH/AgEAAQAAAf8A//8AAAEAAP8AAAAAAQAAAf//AAAAAP//AP8A//8AAP8AAP8AAAEBAf8AAQH//wEB/gABAAEAAQD//wABAQAAAQAA/////gH/AAAA/wABAP8AAAAAAAAAAAAAAf//AP8A/wH/AAEAAgEAAQABAQEA/wABAAEBAAAAAQAAAP8AAP//AQH/AAEAAAAAAAAAAAABAAAA/wAA//8AAAEA/wD/AAAAAAAA/v8AAgEAAQAAAf8BAAAAAAD+AP//AAAAAAABAgEBAQAA//8AAAAAAQAAAQAA//4AAP///wAAAAAAAAEBAAH//wEAAP8BAAAA/wAB/gD/AAAA/wAAAP8AAAAAAf8AAQD/AAH/AAEBAAD/AAABAP8AAAAAAAH/AAAAAP8A/wD/AAD//gAA/wEAAAEA/wAAAAD/AP8AAQEAAQAA/wABAAD///8A/wH/AQAAAQEAAf8AAQD/AQD//wAA//8AAP7/AQAA/wABAgAA/wAAAAABAAAAAAD/AP8AAv8BAAD///8AAP0A/wEA/wAAAf//AAD/AQAA/wAAAAEAAAD/AAEAAAAA/wAAAP8CAgABAP//AAAAAQEA/wD/AAEA////AAAA/wIBAQAAAP8AAQEAAAEBAAEAAf8BAAEAAAD//QAAAAAAAAAAAAH//wAB/wAAAAABAAH/AAABAAD///8A/gAAAP8A/wAAAAEAAAABAP8AAQEBAP8BAAD//wAAAQD//////v8BAQAAAf8AAAAA/wD/AAAAAP8AAP8A/wAA//8AAQD///8AAAEA/wD/AP//AAD+//8AAQEBAQABAAAAAQABAQAAAAEBAQAAAP////////8AAAH//wEAAAEA/wAAAQAAAQD/AAAAAf8AAAAAAP8AAf8A/wAAAAD/AAEAAAAAAP8AAAEA/wAAAAAA/wD+AQEAAP8BAP////8BAAEBAAEBAP8A/wEAAAAAAP8AAgAAAQABAAH//wIBAQD/AAD/AwD/AP8A/wAA//8AAAAB/wABAAAA/wEAAAAAAQEA//4AAAD/AAAAAAD//wH+//4CAQEB/wEAAAEAAQEAAf8BAAAAAAEAAQH//wAAAQAAAAAAAQH/AAD/AAABAQD//wAAAQAAAAEA/gAAAAEBAQH/AAABAAEAAAAAAAEBAAEAAQEBAQD///8AAAD//wAB//8B/wABAAH/AgAAAAAAAP////8BAAAAAQH/AP8AAAAA/wAAAAABAQH//wEBAQAAAAAAAf//AAAAAAAAAAAAAQEAAQEBAAH/Af8BAQABAP4A/gEA/wD/AQEA/gAAAAAAAP8AAP8A/gD//wEAAP///wAAAAAAAgEAAQEAAQD/AAEA//8A/wAA/wAAAAIAAf8AAAEA/wAA/v4A/wD+AgEAAQABAQAAAP8AAgEAAAAB/wABAAAB/wAA/wD/AAD/AAD//v8AAAH//wAAAQEBAQABAAAAAAEBAQEBAAEBAAEAAQABAAACAQABAP8AAP8B/wAA/wAA/wAAAAEBAAH/AQEA/wEAAQABAQD//wH//wAAAAH/AAH//wExMjGsrKdDQUEAAP8AAAAAAAAAAAABAAD65Pfkj9brquny8gjz/gTx/QTw/wLx/QHzAAD0//70AP/4/gD5/gD5//75///4/v/7///6/wD7///6/v/6/v70/wDr/wHixO//8vgAAP4CAP7+PhP/CgIAAP8AAgAAAQAAAQAA/wAA//8AAQAA/wAA/gAA//8AAAAAAf8AAAEAAQAB/wEAAAAA/wAAAP8AAAD/AAEBAAAA/gEA/wH/AAH/AP//AQD///8A/wAAAQABAAABAQEA/wEBAP8AAQAAAAAA/wEAAQAAAAEA//8AAAEAAQAA/wAAAP8AAQAA//4AIRMATS4AEwsAAAEAAP8NDxAkJSP+//8A/v//AP8AAQAA/wD//gABAAD/AAAAAf8BAAAAAf8B/wD/AAABAQEBAAD/AQABAQEAAP8BAAEA//4AAAEBAQH/AAEAAAEAAAD/AP4AAAD/AAEAAAABAAAAAAAAAAEA/wAAAAD+AP8AAf8AAP8AAAAA/wEB/wH//wEB/wAAAQABAAAAAAAAAQEAAAEAAAEAAAAAAAACAAD/AP8AAP8AAAH/AAH///8AAAAAAQEA/wEAAAAAAQABAAL//v8AAAAAAP8A//8BAAEAAQAAAAAAAQAAAQH/AQH/AP//AAAA////AQAAAQD/AAAAAP8AAQEBAP8AAAD/AAAA/wAAAQH/AAEAAAAAAQABAAABAQD+AAAAAAD/AAABAAIBAf///wEAAP8A/wAAAAABAQABAQD+AQEA///+AAH/AAEAAAEAAP8AAP8B/wACAAEBAQAA//8AAP///wD/AAH/AAEBAAABAAAB/wEAAAAB/wH/AAAAAAABAAACAAH/AAD/AAEBAAAAAQH//wAAAP8BAAD/AAH/AP8AAAH/AQAAAQEBAAABAP///wD/AP8AAAEBAAAAAgAAAAD/AP/+AP8AAAEAAf7/AP//AP8AAf//AQAAAAAAAQAAAP8B/wEAAAAAAP8AAAEAAAAB/gAAAP8BAQABAf//AQAAAAEBAAEC/wH/AAH//wAAAf8AAf8A/wEAAQAA/wH/AQD/AQAAAP8BAQEA/v//AAABAQAAAAAAAAIAAQABAAEAAAAA/wAB/v39/wEAAQABAAABAQD+/gABAgAA/wAA/wAAAQH/AP8BAAEAAP8AAAH/AAAAAP4AAAIBAP8AAAAAAAAAAAD///8BAAAAAAAAAQEB/wD/AAAAAAAAAAAAAP8AAAAAAQAB/wD/AQEBAAAA/wD/AAAAAQEA/wAAAf///wD/AAABAQABAAAAAAAAAAEAAP8AAAEAAAAA/wAAAAAAAP8AAAEAAf8BAP//AAEB/wD/AP8AAQIA//8BAAAAAAD/AQD//wABAQAAAAD/AAEB//8AAgAA/wEA//8AAQAA/wAAAQAAAAAA/wAAAAAAAQAA/wAAAQAB/wH/Af8A//8AAQEB/wD/AAAAAAAAAQAB/wD/AAABAQAA/wD/AAAAAQAAAAAA/wD/AQAAAAAAAAAB//8AAAEAAAAAAAEAAf8AAAAAAAH///8B/wD/Af8AAAAAAAEBAQAA/wAAAAEAAf///wEBAP//AAEBAP//AQEB//8AAQAAAAEA//8BAQD//wAAAAEBAAD+AP8AAQAA/wAAAQABAAH///8AAQEA//8BAgAA/wD/AAAAAAABAP8AAAH//wAAAP8BAAH/AAEBAP//AQABAAAB/wH+AP8AAQAC/wH/Af8BAAD/AAH/AP4A/wABAAEAAQAA/wD/AQAC/wD+AAABAQH///8BAQAA//8AAQH/AAABAAEBAP///wAAAAAAAQEA//8AAf8A/wEBAQH/AAAAAP8AAAH/Af8B/wAAAAD/AAABAP8AAAEAAAAAAAEBAAAAAf8A/gH+AQACAP//AAAAAAEA//8AAQAAAAAAAAAAAAEBAP//AQAA/gD/AQAB/wAAAQEBAP//AAABAAD/AAABAAAA/wD/Af8AAAEAAAEBAP7+AAECAAD+AAEBAAAAAP//AAAAAAEBAAAAAAABAQD//wAAAP8BAAEAAf8A/wEAAQAA/wAA//8A7Ovqenl+oaGh/P37AAACAQD/AAAA/wD/AAAABSARCFEhBDQMAQP/Av//BQEACP/+BgH/BAD/BgABAgD/BQEBAgAAA/8AAgAAAf8BAQD//gEB7AMC7e4E6n3QAOr2/wAAABsO/3okAAcAAP4BAAH/AP8BAAAAAP8AAP8AAAEBAP//AAAAAP8AAAABAP8AAP//AP8AAP8BAAABAP8AAf//AP8CAP8A////AQACAP4A/wD/Af8BAP8B//8BAAH/Af8B//8AAf8B//8BAP8AAP8BAAAAAP4AAAABAP8BAP8BAP//AAEBAAAAAP8BAAEAAAEAAP8BAP0BAL/YAMTeAAD/AAACIiAhTUxILy8wNzs6JiQlAwMEAAL/AAABAf8AAAAA/wAAAAABAQAA/wD/AAEBAP//AQEAAP8AAAEA/wABAP//AAAAAQAA/wABAQEA//8AAAAAAQD//wH/AP4AAAICAP//AAH/AP8BAf8AAAEA//8AAAIA//8AAQEBAQD//v4AAgIAAP8B/wH/AP8BAAD/AQEBAP8A/wAAAAH/AQABAP//AAAA/wABAAD+AAEB//8AAgEA//8AAAAAAQAB/wD/AQAA/wAAAAAAAP8AAAEBAAD/AP8AAQEA/wAAAP8AAAIBAP7/AAEAAAEAAP8AAQAB/wD/AAAAAAABAAD/AAABAAD/AAABAAAAAAH/AP8AAAAA////AAIBAgAA//8AAAAAAf8A/wEBAAD/AAAA/wAAAQAAAAAAAAABAAD//wABAQD/AAAAAQAA/wAAAAD/AAABAAAAAAEAAP//AAEBAP///wEBAP8AAQABAAD/AAD/AAEBAP8AAAAAAAAAAAAAAAAAAAD/AAAAAf8B/gEAAQAAAAAAAAAAAAABAAH+//8CAgD//gAAAQAAAQAA/wD/AQAB/wAAAAEAAP//AP8A/wIAAf8BAAAAAAAAAAAA/wD/AAABAgAA/gAAAAAAAf8A/wEAAQAAAAEAAAABAP8AAP//AAEAAAAAAAEAAP//AAAA/wABAAD/AAEBAQABAP//////AQAA/wEAAQAB/wAAAQAB/wD/AgAA/wH/AP8BAAD/AAABAAEA////AQEBAP8BABaE6XsB/f7+Af8AAQEA/wABAAD+/wABAQEBAf////8AAAEAAAEAAAAAAP8AAAAA/wAAAAEAAf8AAQAA//8AAAEA/wAA/gAAAwAA/wABAP//AAEAAQAA//8AAgEA/wABAAAA/wD/AAAAAQD///8BAQEA/wAAAQD//wEBAP8AAQEA//8AAgH//gABAQAA////AQABAAEB//8AAQAAAAD/AAAAAAAB/wD/Af8AAAEB/wH/Af8A/wABAf//AAIB////AAAAAQAA//8AAAIAAf8A/v//AgEB//8AAAEAAAAAAAAAAQAA/wABAP//AAEAAf8A/wEAAAAAAAAAAAAAAAAAAQAA//8AAQEAAAABAP///wEBAAD/Af8AAAEA/wABAAD/AQAA/wAAAQEA////AAAAAAAB/wD/AgAAAAEAAP8BAAD/AQABAAAB////AAEAAAAA/wD/AQABAAEAAP8A/wAAAQAA/wAAAAD/AQAAAP8A/wAAAAEAAQABAAAA/wAAAQAA/gAAAgAA/wAAAQAAAP8AAAH/AAAB/wEAAf4AAAAAAAEBAAD/AAD/AAAB/wEAAP//Af8BAAAA/wIAAP4AAgH//wEC///+AAEBAf8A/wAAAAAAAQAA/wD/AQAA/wACAQD+/wABAQAA/wD/AQEC/wD/AQAA//8BAAH/Af4AAAEBAAAAAAAA/wD/AQEA//8AAQAA/wABAQD/////AQEBAAEBAP//AAAAAQD//gABAgAA/wAAAAAA/wAA////AgEBAAAAAAEA////AP8AAQEA/wECAP//AQAAAAEAAP8AAAAA/wABAQH//wAAAP8BAf8AAAH/AP8AAAIB///+AQABAAAA//8BAAEAAv/+/gECAQD//gAAAgAAAAAA/wAAAAEBAQD/AAAA//8AAAEAAgAB//8AAAD/AAEBAP//AAEBAAAAAQAA/wAAAQAAAAAA//8A+vv6kJCSg3+D9vj2/wAAAQAA/wAAAQAA/wD/AQQDAzwWBUscAxsK/wD+AAH9AgEAAgH+BQEBBgH/B/4BBwEABf8AAgAAA/8A/QAA9QEC7wID7b/wAJbYAgAAAAAAAEMZ/lkZAP8AAAABAP8AAAEAAP8AAP8AAP8AAAABAP8AAAD/AAEBAAD/AP4BAP//AP8CAAABAP4AAP//AP8AAAAAAP8AAP8AAAACAf8BAP//AP4A/wABAAEBAP4AAAAAAP8AAf8B//8BAP8AAP8BAP8AAP4BAAABAAAAAAAAAP4AAAEAAAACAAH/AAACAP8AAP8AAP8BAMXcAL3ZAAAAAAACAQAAAAH/AAEBEA4PKiwqNTU0Ly4uKyoqKSgoDAwP/wABAAH/AAEAAf8BAAD/AAEA//8BAAD/AQAA/wEBAQAA//8AAP//AQEB/wAAAQAAAAAAAAH/AP8AAAAAAAAA/wAAAAAAAQH//wABAP8AAAD/AAABAP8AAQIB////AQEAAAABAAD//wAAAP8BAAD+AQECAP///wABAAH/AAAAAP8AAAEBAAAA/wD+AQAB/wAAAv8BAAD/AAEBAP//AAAAAAEA//8AAAAAAAEAAf8A/wABAAD/AAAAAQAB/gAAAQD/AAAAAAABAQAA/wD/AQAA/wAAAAAB/wD/AQH/AP8AAAEBAP8AAAD/AQABAAEB////AQAA/wAAAAEAAf///wABAQAA/gD/AQECAAD+AP8B/wAAAQH/AP8BAQAA/wAAAAABAAAAAQEA//8AAAAA/wD/AQD/AP8BAAEAAAAA/wEBAQD+AP8B/wAAAf//AQEC/wD/AAD/AAABAQAB/wD/AAABAAD/AP//AAEAAAABAAAAAf8A/wEBAAAAAAD/AAAAAAEBAP//AAH//wABAP8AAAAAAAAAAf8AAAAA/wIAAf8AAAAA/wD/AQABAAAA/wABAQD+AAABAAEBAP//AAAAAAAAAAEA//7/AQIBAP8B/wD/AQAAAAAAAAAAAAAA//8AAQEA/wAAAAAAAAAAAQAAAAD/AQAA/wEBAP8AAAAAAAAAAAH///8BAQAAAAAA/wAAAQEAAP//AAABAAAAAAAAAf3+/QEAAQD//wABAQABAf//AAEA/wAAAP8AAAH/AAABAP8BAQH+/wABAQAA/wABAAD/AP//AAACAAD/AAH//wABAgAA//8AAQAA/wAA/wAAAAD/AQEB//8AAQEAAP8AAQEA/v//AAEBAP//AAABAAAAAQD//wEAAP8BAQEAAAAAAP8AAAEAAAAA//8AAAAAAQAAAQH//wABAAABAP//AAEAAf8A/wAAAAAAAAAAAAIAAP7/AAAB/wEAAv8A/wEBAP//AAABAAD/AAEA/wD/AQAAAAAB/wAAAP8AAAEAAAAAAf8AAQAA/wH/AP8AAAEBAAAA/wD/AAABAP8BAQD+AAAB/wEAAP8AAQEAAf8A/wEBAAD/Af8BAAIAAP8A/wAAAAD/AAAAAAAA/wAAAQAB/wD/AQAA/wD/AQABAP8B/wAAAQH/AP8AAAAA/wIAAf4A/wEBAf///wAAAQAAAAAAAAAAAAAAAQAB/wL/AP8B////AQEAAAAAAP///wABAQEAAAAAAP8B/wEAAQH+AP4CAAD//wAAAAAAAAAAAQEAAAD/AQAC/wD/AP8AAAIB////AAAAAQAAAP8A/wAAAAEAAQAAAAAAAAAA/wABAQAAAP8A/wD/AAD//wEBAQAAAP8BAAEAAQD/AAAA/wAAAf//AAEBAAAAAAAAAP4AAAIAAQAAAAAA/wAAAAD/AAAAAAABAAAAAAAAAQAA/wAB/wH/Af8AAAD/AAACAAD/AAAAAP8A/wEAAQAAAQAAAP8B/gH/AQABAAD/AAAAAAD/AP8A/wABAQEBAP//AAAAAP8AAAD/AQIBAP8B/wH/AP8AAAAAAAAAAAEA/wEBAf3/AQIA//8AAAEBAAD/AAD/AAAB/wAAAQAAAAAAAf8A/wEBAQAAAAD/AAAB/wD/AQAA/wAAAAABAAEAAf8AAAH/AP8BAAD/AAEBAAAAAAAAAP7//7a0tn9+gc/Q0AAA//8AAAAA/wAAAQEAAAAAAAIRBgM8GwM9E/0dBv8A/wD/AAIBAAEA/gQDAQP//gUAAQIAAAEAAPoBAfoAAv3+A/iI2gHQ7f8AAAIAAQBuJv4uDAD/AQAA/wAAAQD/AAAB/wD+AAD/AQAAAAAAAQD//wAAAQAAAQD+/wD/AAD/AAABAQD+AAAA/wD+AQD+/wABAQD/AAH/AP8AAQH/AQH/Af7/AAD/AQD/AQAB/wD/AAD+AQH/AP8AAQD/AAD/AQD+AAAAAQAAAQD/AAAAAAD+AAACAQABAgAAAQD//wD+AAAAAQDD3AG/2gAAAAAAAAAAAAAAAQEAAP8AAAAAAAAAAAAAAgcIBCgoKjMzMiorKS4sLSkpKRsbGwAA//8AAQAA/wEBAgAA/wD//wABAv///wAB/wD/AgAA/wAAAAAA/wEAAQAAAAABAAAAAQAAAP8A/wEAAP8AAP8AAQH//wABAQEA/wAAAQAA/v//AQAAAAAAAAAAAAD/AAEBAP8BAAH/AAAAAf8AAAEAAP8BAP///wEAAAAAAP8B/wH/AAAAAQEAAP8BAAAAAP///wEAAgAAAAEA//8AAQAAAAEB//8AAAD/AQAA/wAAAAAAAQEBAP///wAAAAABAAEAAAD///8AAf8AAAEAAQAB/wD/AQAA/wAAAQAAAAAB/wAAAAAAAAD/AAEAAP8AAAAA/wAAAQAB/wH/Av8A//8AAAEAAAAA/wAAAQAAAAAAAAAAAAD/AAABAAABAf8A/wH+AP8BAAEAAAAAAQAA//8AAQEAAAAA/wAAAAABAAH/AP8AAAEAAP4AAQIA//8AAQAA/wABAAAAAAD/Af7//gEAAQIAAQAB//8A//8BAQAAAAH/AQABAAD+/wECAf/+/v8AAQEBAAD/AAABAP///wECAAD+AQABAAAAAf8B/wH/AAAAAAABAAD/AAAAAAD//wAAAP8BAf8AAAH/AAAAAAEBAAAAAf8A/wD/AAEAAAAAAP8BAAD/AAAB/wEAAAABAQEA/wD/Af////8BAQEBAAAAAAH///8AAP8AAAABAQEAAAEAAAAAAP8AAAD/AAAAAAH+/v4A//8AAQEAAAEA//8AAQAAAAD/AAABAQEA/////wABAgEB/wD/Af//AAABAAABAAH+/v4BAQH/AAAAAAABAAEAAf8A/wAAAAD//wAAAAABAQAAAP8AAAH+//8CAgH//wABAAAAAAD//wAAAAABAgAA/wAAAAH/AQAB/gD/AQABAP//AAAAAAABAAAAAAAAAAAAAQD/AAAA//8CAAH+AQAB/wAAAAAAAAD/AAAAAP8A/wEAAAABAAD/AAABAQAAAAD/AP8AAAIAAP8AAAABAQAA/wD/AP8BAAIAAP8AAAD/AAAAAAAAAAABAAAAAAEAAP//AAAA/wAAAAABAQD/AAABAQEA//8AAP//AAAAAAEAAP8BAQH///8AAAEBAQEA//7/AAEBAP8AAAH/AP8BAAEAAAD///8BAAH/AQABAAD/AAAAAP8AAQEB/wD/AAABAAAAAAD///8BAQD/AAEBAAD//wAAAQAB/wAAAQD/AAABAQAA////AAH/AAAAAP8CAAEAAAD/AP8BAAAAAQEA/wD/AAAAAP8BAAEAAAAA/wAAAAD/AQAAAf8A/wABAAD/AAAAAAEBAP//AAAAAAABAQD//wEAAAAAAAACAQD/AP//AAAB/wH/AQAB/wAAAAEAAP8AAAAAAAD/AAAAAAAA/wAAAQAAAAEAAP8BAQD+/wACAAEAAP//AAAA/wAAAQABAAH/AP8BAAAAAAD/AAABAAD/AAACAAH/AP8BAAD/AP8AAAH/AQD//wACAAD/Af8B/wEAAP8AAQAA/wEAAAAAAAH/AP8B/wAAAQD/AP8BAAL/AP8BAQEA////AAEBAf8A/wAAAAAAAAABAAD+AAABAQD/AAABAAAA/wEBAf8AAAD/AAD//wABAAH/AP8A/wABAQEAAP8BAAD+AAEBAQABAAD///8BAQH/AAABAP//AAEBAP8A/wEAAQD/////AAHq6Op8en6goJ79AP4AAAAAAAEAAAEBAP8AAAEAAP4CDQYAPhgBRBYAGAj///4B/wABAP8AAv8BAQEBAP/9AAH/AAEAAgH+4PgAe9MA+///AP8CFwz/fiX/CAQA//8AAAEA/wAA//8AAAEAAP8A/gAA/wAAAAEAAAAA/wAA/wAAAAEAAQAA/gAA/wEA/wAA/wABAP///gAA/wEBAAH//wAA/wAB/wEAAAH//wAB/wH//wAAAAEAAAAA/v8A/wEAAQEB/gD/AAEA/wAA/wEAAAEA/wAA/wEAAAAAAQEAAAAAAAEAAAEA/gAA//8AvNoCx93//wAAAAD/AAAAAAEBAAD/AP8BAAEAAAAAAAEAAgAA/wAB//8AAQEAAAAZGhosKyo6OzshISAhICEjJCQYFhYAAQABAAAAAgIA/wAAAP8AAQD+AAECAAAA/wAAAf8AAAAAAAH///8AAQH/AAAC////AAEAAP8AAAAAAAAAAAAAAAEBAAAAAP4AAAIAAP8AAAD/AAEBAQAA////AQABAAAAAAD//wAAAAAAAQEAAP8A/wAAAQAB/wAAAAAAAAD+AP8BAAIBAf//AAAA/wAAAQAAAAAA/wD/AAACAQH//wAAAAAB////AQEA//8AAgAA/wAAAAABAQD/AAEA//8BAAD/AQEB////AP8AAQEAAAEAAP7/AAEB/wABAQD///8AAAIBAAD/AP8BAf///gEBAQH/AP8AAf8AAAEB/wD/AAAA//8AAQABAQL///8AAQAB/wD+AQAAAAEB//8AAP8AAAD/AQEAAAACAAH/AP8A/wEAAP//AAABAAD/AP8BAAIA//8AAQAAAAAAAAAAAAAAAQAB//8AAAH/AP//AAEBAAABAAD/AAAB/wD/AgAAAAAA/v8AAQEAAAEAAP8AAAD/AAABAAAAAAAAAAAA/wEAAf//AAAAAAD//wEBAv4B/gEAAQH/AP8AAAABAAD/AAABAAD//wABAQD/AAECAP//AAH/AP8BAAAAAP8AAAEAAAAAAf///wEBAP8AAQEA/wD+AP8CAAABAQH/AAAAAAD//wABAQAAAAEA//8AAAAAAAAAAAAB/v7/AQH//gD/Af8CAf///wEBAQD//gAAAQAAAAAAAAAAAAAAAAAAAAEAAP8A//8AAQH//wEAAQAB/wD/Af8B/wAAAP8AAQH/AAABAAD/AAABAP8B/wAAAQEA/wD///8AAgEAAAABAAEA//7/AQEAAAAAAP8A/wEAAQAA/wD/AAABAAABAQD+/wEBAf8A/wABAQH/AAAAAAAAAP8A/wAAAAAAAf8A/wAAAAEAAf8AAAEBAAD/AAAAAAAAAAAAAAABAAD///8AAAH/AAABAQAA/wAAAAAAAAH/AP4AAAEBAgAA/wAAAP8AAAAB/wD/AQEA//8AAQEA//8BAAH/AQH///8BAgAAAP8A/gAAAAH/AAABAAH/AP8AAQABAAAAAQAA/gAAAQEA////AQAAAAAA/wEBAf8AAAAA/wAAAf///wEBAf8AAAEAAP8A/wD/AQEBAAAAAAAA///+AQEC/wEAAf8A//8AAQD/AQEB/gAAAQEBAP/+AP8A/wEAAAAAAQEAAP8AAP8B/wEAAQAA/wAAAAEAAAAAAf8AAP8A/wH/AQABAAEAAP8AAAAA/wEAAAD/Af8AAAAB/wAAAAAAAQAAAAD//wAAAQAAAAEAAP8BAAAAAAD/AAEB/wAAAf8BAAD/AAH/AP8A/wEBAP8AAgAA/gAAAgAA/gAAAQD/AP8C/wH/AQAAAAAA/wAAAQEA//8AAQAAAAAAAP8B/wH/AAAAAQAAAAEAAAD/AP4BAAH/AAAAAAACAAD/AAEAAP8A/wAAAAD/AP8BAQEAAAAA//8AAQH/AAEBAAAB/wD/AP8BAAD/AAAAAQAAAQEB/v//AQAAAAAA/wAAAgAB/gD/AQEA/v8AAgD//wACAQD/AAAAAAAA/wD/AAABAQAAAAEA//8AAQAAAAEAAAABAAAAAAAAAP//AAABAQD/AAABAAH/AP8A/wAAAQEBAAAA/wAAAQAA/wD/+fn6ure6k5OVvb6+/wD/AAAAAAAAAAABAQAAAQD//gAAAhAFATcY/jYQAiYN/wT/AP3/AAL//v//AQEBAAAB/wECAKjkALHkAAABAQABAjsV/WEdAAAAAAAAAAABAAAAAP8BAP//AP4BAAEAAP8AAP8AAAABAAD/AP8AAAAAAP8AAP8BAP8BAP8AAP8AAP7/AAACAf///wABAP8BAP8AAP8BAQD/AP8BAAAA//8BAP8BAP7/AAABAAAAAP8BAP8AAP8BAAABAP4AAAAAAAABAP8AAAEAAAABAAABAAAAAP4BAP8BAAABALXUAc3iAAAAAAAA/wAAAgEA/////wABAAAAAAABAQD/AAABAAAAAAAAAQIBAP7/AAEBAAD///8BAQAABQgHFhMTHyAfHx8fJCMjJSUlIiQjLS8rDAkLAAECAAD/AAABAAD/AP8AAAEA/wAAAAAAAAABAAD/AP8AAAEBAQAAAAD//wABAAD/AAABAf8AAAH//wABAP//AQAA/wABAAAAAAEAAAD/AP8BAAD/AAEAAQAB//8AAAH+AAABAQAA//8BAAAAAAEAAAD/AQAA/wAAAP8AAAEBAP/+AAAB/wAAAQAAAAD/AAECAP//Af8A/wEAAAEAAAAAAf8A/wAAAQD//wABAQAAAAEB/wAAAP8A/wD/AQAAAf8AAAEA/wABAAD+AAECAAAAAAAAAAAAAf/+/wAAAQABAAD///8BAAEAAAAAAAAAAAAA/wABAgH///8A/wABAQH//wD/Af8BAAEA////AgEBAP8B/wH+AAABAP8BAAD/AQAA//8AAQIB//8AAAAA///+AQEBAP8AAAIAAP//AAEA//8BAQAAAP8AAAEBAAD/AAEA////AAAAAQACAAD//wAAAAAAAAD/AQAC/wAAAQD/AQEA//8BAAAA/wH/AP8BAQAA/wD+AQAB/wABAQD+AQAB/wAA/wAAAAD/Af8BAAEB/wD/AQEA//8AAQAA/v//AQEBAQAAAAABAP8AAAH/AAABAAD/AAAA////AQIA//8AAQEBAP8AAQD//wABAAAA/wD/AAABAP8AAAD/AAEBAAAAAf7+/gAAAAAAAAABAQAAAAD//wAAAQEAAP8A/wAAAAAAAP8A/wEBAQD/Af8A/wEAAP8AAAEB//8AAAD/AQH/AP8B/wEAAQABAAAAAAAAAAD/AAABAP//AAEAAP8AAAEAAAAAAAD/AP8BAQEB/wD+AP8BAAAA/wEBAf///wAAAgEAAAD//wABAP8A/wEAAf8AAAAB/wD/AQABAQD//wAAAAAAAAEBAAAAAAD//wD/AQABAP//AAEBAQD//wAAAP8B/wAAAQEAAf8A/gD/AQABAAAAAAAAAAAAAAEAAAAB////AQAA/wEAAP8AAQEAAAAAAAAAAP//AAECAP///wD/AAAAAQAAAAAAAAEB////AQABAAAB/wD/AAEAAf8AAAEAAAAAAAAA/wAAAAABAQD+AAABAAAA//8AAAEAAQAB/wD+AQABAP///wEAAQABAAAAAP//AAEBAAEAAP7//wEBAf4AAAIAAP8A/wABAAEAAQD/AAAA////AQAB//8AAQIAAAAA/wAAAf8AAQAB/wEAAAD/AAAA//8BAQH/AP8BAQAA/wEAAP8AAAH///8AAAEAAAABAf///wAAAAEBAQH/AP8AAAABAAD///8AAgEB/wAAAQD//wAB/wD/AP8BAQEAAAAAAAD/AAAAAAAAAf8A/gEAAAAAAAABAv///wEA/wAAAQEA//8BAQAA/wD/Af8AAAL/AP4C/wEAAf///wAA/wEAAQAAAQAAAAAAAf///wABAAEAAAAAAQAA//8AAAAAAAIAAf8A/gAAAv8AAAEA////AAEBAAAAAAAAAAAAAf8A/gAAAAAAAAAAAQEAAAAAAAAA/wD/AQAAAAACAf//AAAA/wAAAAH/AAEBAf4B/wH+AAABAQAA/wAAAQAA/wAAAAAAAAEAAQAB//8AAAAAAAAAAAEAAP8AAAEAAAAAAP8AAQEAAP8AAAEA//8AAAEAAAAAAQAAAP////Py85eXmpKQk+fp5v8AAAEAAQAA//8AAQEAAAEAAf8A/gAEAwAnDgE6FgAlDP8YBQAE/wD9/wAAAAD5Af+D1QHh9v8A/wIAAf9hJf86DwAAAAAAAAABAQD//wD/AgAA/wAAAAD+AAAA/wD/AgD//wD/AAABAgD//wAAAQD/AAD/AQD/AAD+AQAA/wH+////AgABAAEAAP/+AAD/AQAAAgD//wD/AAEAAf//AAD/AAAAAQD/AQH/AP//AAD/AQD/AAAAAQD/AAAAAAD/AQAAAQAAAAABAAD/AgD//wD/AgAAAAC11QHN4gEA//8AAAAAAAAAAQABAAD/AP8AAAAAAQEAAAAA/wAAAP8AAQEAAAAAAAAAAAAAAf8AAQEA/wEBAAD/AP8AAAAAAAIAAP4A/wUFBCQjJCIiIxscGzs6OSAiISsrKhISEv//AAABAAEAAAAAAP8A/wEAAf8A/wD///8BAAIAAf8AAAAAAQEA////AAABAQAA/wEAAf7//wEBAQEA//8AAAD/AQAAAAEBAP7//gIAAQABAf///wAAAAAAAQH/AP8AAAAA/wEBAf8AAAAA/gEBAf//AAEA/gAAAv//AAEBAAAAAP//AQABAAEA//8AAAEBAf4A/wEA/wH/AQAAAP8AAQABAAH/AP8B/wD/AAABAAAAAP/+AQECAAH/AP8B/wD/AAAAAAEAAP8AAAEAAf8AAAABAAD//wABAAAAAQAAAP///wEAAAH/Af8A/wACAQAA/wD/AAEBAP7//wEAAQAAAAABAQD//wAAAAAA/wAAAQD/AAABAP8AAAEBAAAAAQD//wAAAf8BAAD//wEBAAD/AQAB/wH/Af8AAP8A/wIBAP//AQAAAAAAAAD///8BAQIA//8AAP8BAAH/AP8BAAL///8AAQABAAD/Af8A/wAAAAD//wABAQEBAAH/AP8AAQAA/wAAAAAB///+AQEBAAAAAP8AAAAAAAAAAAAAAAEAAAAAAAD/AAABAAAAAAD/AAECAP3/AAIAAAAA/wAAAQD//wABAgABAAD+AAAB/wAAAAAA/wD/AQABAAAAAP8A/wD/AAH//v3/AAEBAAD/AAAAAQEA////AAEBAAABAP7/AAEAAAAAAAH/AP8AAAEBAP8A/wABAQH+AAAAAP4AAAEAAAAAAAEAAP4A/wEBAQEAAf4A/wEAAQD+/gACAQH/AP4BAAIAAP8AAAH/AP4A/wEBAQH/AP8AAAAA/wAAAQEAAP4AAAEAAP8BAAL/AP4AAAAAAAEAAAAAAP8AAAEAAf8A/wEBAAAAAAAAAAH///4BAAH/AQEBAP//AAAA//8AAQABAAEA/wAAAgD//wAAAQAB/wEAAP//AAAAAAABAAAAAAD///8BAAH/AQABAQAA/wAAAAAAAAD///8AAAEAAQEAAAABAP8AAQAA/wEAAP7//wEAAgAB/v8AAQD+AAEBAAABAP8A/wEAAQD/AP8BAAAAAQH/AAAB//8AAAAAAAEAAP//AAEB/wD/AAACAQD/////AQEBAAD//wAAAQD/AP8CAAH/AAAB/wD/Af8AAAAB/wEBAQD/AP8A/wD/AQEBAP///wEBAQD/AAEAAP8BAAD//wABAQD+AAAA/wABAAABAgD//gABAf//AAEBAQAA/wAAAP//Af8AAAEB/wD+AAADAAH+AP//AQACAAEAAAD//gEBAQAAAQD///8AAP8BAAEA/wD/AP8AAQEBAQAA/wAAAQD//gAAAQABAQAA//8AAQEA/wAAAAD/AP8CAAL/AP8AAAD/AP8A/wAAAQAA/wEBAQAB////AQEAAAEA//4AAgEA/wABAAD//wAAAv///wIA//8BAQEAAP8AAAD/AP8AAAEBAAEAAP8AAP8AAAH/AAAAAAEBAP8AAAAAAAD/AAABAAAAAQEAAP///gABAAEAAP8BAQH/AP//AAAAAAEBAf8AAAH///8BAAABAAD/AAAAAAD/AAEBAAAAAf8A/wAAAQEA//8AAQAAAAEA/gABAv8AAAH/AAAB////AQEAAP8A/wEBAQD/////AAABAAD////Z2NmIhIqmqKb9//8AAAEAAAAAAQAB/wD/AP8AAAAAAAIBAP8BCAUAFwoAHQsBGgr+CgIA1u4Ayuz+AAAAAAAAAwABdiz/IwgA/wAAAP8AAAEAAAEAAAAA/wAAAAAA/gEAAP8A/wEAAP8A/wIA/wAAAP8A/wEA/wAAAAAA/wAAAAAA/gEA/wAB//8BAAL+/wAB/wH//wAA/wAAAAIA//8A/wEA/wAAAQEA/gAB/wH//wAAAP8AAAIA//8A/wIAAAAA/wEA/wAAAAEAAAAAAAEAAQEA/gAAAAEAAAAAtdUCzOH/AAABAAD/AQAA/wAAAAAAAAAAAAEAAQD//wABAAABAP8AAAH+AP8BAAEBAAEBAAD/AAH/AAAAAAAAAAAAAAD/Af8B/wD/AAEAAP8BAAEAAP4AAAEAAP8AAAEmJScpKigiISEYGBcnJycbHRweHhwUExQAAP8A/wAAAwMAAP8AAAAAAAEA//8BAAH/AAAAAQABAP//AAEAAAABAAD/AP8A/wABAAH/AQAAAP8AAP8BAAH//wEAAf4BAAEAAAAAAAD+/gACAgH//wABAf//AAEB/wD/Af//AAAA//8BAAIAAAABAf7//wEBAQH/AP8AAAAAAAAAAAAA/wAAAAAAAAAAAAAAAQAAAAAB/gD/AQEAAf8A/wABAAH/AAAAAP8AAQEA//8AAQEB/wD/AAAAAf8AAAAA/wEBAAAA////AQAA/wD/AQABAAAAAP8AAQEAAAAAAAAAAAAA/wAA//8AAQH/AAABAAAA/wEAAAAAAf8AAAAAAAEAAAD/AP8BAQAA/wAAAAD/AAABAAEAAf////8CAAH/AQAA/wAAAAEAAP//AAABAAEAAP8A/gAAAgAAAAH/Af8C/wD/AAD/AAABAP//AAEA/wABAQAAAP8BAAL/AAAAAP8AAAD/AAABAQAA/gAAAQAA/wD/AQAB/wD/AQAAAAAAAAABAAAAAQEA/wD/AAAA//8BAAD/AQAAAAAB/wD/AQACAAH/AP//AAABAAD/AAEBAP//AAEBAP8AAAAAAQAA/wAAAAAA/wH/Af8AAAAB/f7+AgAA//8AAQEB/wAAAP8AAAL/AP8AAAAA//8AAQEBAAAA//8AAAH/AQEB/wAAAf///wEAAP8AAQAA////AQIB//8AAf8AAAEAAAAAAAEA//4AAAIAAQAAAP//AAABAP8AAAEAAP8A/wEAAQEA//8AAP8AAAIA////AQABAQEAAP//AP8A/wEBAAAAAQAA/wAAAQAAAAH/AP8B/wEAAf8AAAEBAf/+/wAA/wAAAAABAQAA/wAAAQAA/wAAAQEAAP8A/wAAAAAAAQAA/wD/AQEC////AQEA//8BAAD/AAAAAP8BAAH/AQD/AAABAAAAAP8A/wEBAAD/AQAA/gEAAf8AAQAAAAAAAAAB/wD/AAEAAf////8AAAEBAP8AAQAAAAAAAAEBAAAA/wD/AAAAAAD/AQAB//8AAQD//wEBAAAAAAD/AgAC/v//AAEBAP//AQEA/wABAAD+AAABAP//AAABAQEA/wD/AQAAAAAB/wAAAQEAAP8BAf/+/wAB/wH/AQAAAAABAAAAAAAA/wAAAAAA/wAAAgAAAP//AAEB//8AAQIA/wD/Af4A/wIBAQAAAf8A/wAAAQEA/wD/AP8A/wABAQD//wABAAEAAP7/AAEBAAD/AQAA/wAAAAABAAD/AAABAQAAAAEA/wAAAf4AAAIAAAAAAAD/AP8BAAEAAAAAAP8AAAAAAAAA/wAAAf8AAAEA/wD/AP8BAAEBAP//AQEAAAAAAAAA//8AAAEAAgAA/wAAAP8AAAEBAAD//wD/AP8BAAIAAf8AAAAAAAAA/wABAQAAAAD//wAAAAAAAf8AAAEAAAAA/wH/AP8BAQD/AAEBAP///wACAQD/AAAAAAAA/wAAAgAA/wAAAAEB/wD/AP8AAQAA/wABAAD/AAAAAQEB//7/AgEBAAD//wEBAQD//wAAAAABAAD/AQAA/wAAAQABAP8A/wAAAQEA/wD/AQABAAAAAP8AAAEA//8AAAAA+fj3rqyvkJCTzM7MAAABAQAB/wABAQD/AAAAAAABAAABAAABAAD//wD//wAAAAD+AAAAAAAAAAAAAQD//xEGAXcs/xQEAAD/AAAAAP8BAAABAP//AAAAAP8BAP//AP8CAAAAAP8AAAD/AP4AAAEBAAABAP//AP4BAAD/AP4BAAAAAAAAAP4BAP8AAP8BAAABAP8AAf4BAAAA/wABAP8AAAAAAP8BAP8BAP8AAAAAAQAA//4BAAAAAP8AAP8BAAEAAAABAP8AAP8BAAAAAAABAAABAP8AAP8BALTVA87h/wAAAAAAAAAAAAEBCf8A9gD/AAEA//8AAAABAAD/AQICAxQRCBQR+ejs/u7x/wD/AQAB/wAAAAAB/wAA/wABAgAAAAD//wAB/wAAAQD//wAAAQAB/wAAAAD/AQABAQD/AQEDAAD/AAAABQYGGhgaIiIhIyQiHBwdHh4dHx8eHR0cCAkJGBgYAAEAAQEBAAH/AAAAAQAB/wAA/wAAAf8AAAAAAQEAAAAB/wAAAAAAAAAAAf8AAAH//wAAAP8BAAAAAQAA/wAAAAH/AP8AAAAB/wH/AQAAAAAAAP8AAQEA/wAAAP8BAAH/AAAA//8BAgD/AAAA/wEAAP8AAAABAAD/AAAAAQEA//8AAQAB/wD/AAEAAAAAAP8AAQAA/wEAAAABAAD/AQAA//8AAQAA/wABAQAA/wD/AAEAAP8AAAAAAP8B/wH/AQD/AAABAQEA/wD/Af8C/wD+AAABAAAAAQEA/wABAP4A/wD/AQEAAQAA/////wECAQAA////AQAAAAEAAAAAAAEAAAABAP//AAAAAAEAAAABAP//AAD/AAABAAAAAAAA/wD/AAACAQD/AAABAAD/AAEA//7/AQEA/wABAQAA/wAAAP8AAQH//wECAP7/AQEAAP8AAQEB/v//AQABAQH///8A/wEAAQAAAAAAAAAAAAEAAP8B/wD/AQAAAAAAAP8A/wEAAQABAAH/////AQABAAEBAP/+AAAAAAABAAEA//8AAQEB////Af8A/wH/AQABAAD/AAAB/wEBAf8AAf79/QAAAQEBAAD/AAACAf7//wAAAAEA/wEAAv8A/wAAAAAAAAAAAP//AAABAAD+/wECAf8AAAEBAP//AQAB/wD/AAEAAAAAAAD//wACAf8AAAAA/wEAAAEAAv///wAAAf8A/gEAAQAA//8AAQEAAAABAAD/AP8AAAEBAAD/AP8B/wH/AQAAAP8B/wH/AQD///8CAQEAAP//AAEAAf8B/wAAAQD//wAA/wD/AAAAAQABAAAA/wAAAgEA//8AAAAAAAAB/wH+AP8BAQH/AP8BAAEAAP///wABAQD/AAABAAABAAAA/wD+AQABAAABAAL+//8BAf8AAAD/AAABAQD//gABAQEB/wD/AAABAQD/AQAA/wAAAP4A/wIAAAD/AQABAAAAAAAAAAAAAAAAAP8A//8AAQEA/wAAAQH//v8BAQEAAf8AAAEAAAAAAQAAAAAAAP//AAEA/wAB//8AAAD/AAEBAAAAAf8A/wAAAQAAAAEA/wAAAf8A/wEAAgAA/gABAAD/Af///wABAQD//gABAQABAQD/AAD//wEAAQAAAQAB//8A/wEAAf8B/wD/AAEAAf8A/wIBAf//AAH/AP4AAAEBAP8A/wEAAgAA/v8AAQAAAAAA/wAAAAEAAQD/AAABAP8BAAD/AAEAAP8AAAEA/wAAAQAB/wD/AgAA/gAAAQAAAAH///8BAP8AAQEBAAD+AQEB//8AAP8AAAD/AAEBAQD//v8BAQAAAAEAAAABAQD///8A/wAAAQD/AAAB/wAAAgEAAP8A/wD//wEBAQAAAQABAP/+/wABAAEAAP///wEAAQABAAD/AAABAAAAAAAAAAAAAAD/AP8B/wH/Av8A/gEBAgH///8B/wAAAQABAQD/AAAA/wABAP//AQEAAAABAAH/AP4A/wH/AQAC/wAAAAEAAf//AAAAAAAB/wEAAAAAAP8AAAH/AQABAP8A/wAAAAD/AQEBAAD/AP8BAAAAAAEAAP8AAAAAAO7s7ZiXmpSTlurr6gAAAf8AAAIAAf0A/wEAAAIBAP8AAgABAP/+/v8A/wEA/f8AAgAAAAEAAP8ZBwF3LP8LAgAB/gAAAQAAAQD/AQD//wAAAQD//wD/AAAAAQD/AAAAAAD/AAD/AQAAAQD/AAAAAAD/AAD//wD/AQAAAAH+Af//AAD/AgAAAAH+/wD/AP8AAQH/Av///wAAAAD+AQAAAQD/AAD/AAAAAQAA/wD/AQAAAAD/AQD/AgD//wABAQABAQD+AAAAAQAAAAABAQD+AAD+AACw0gLT5QEAAP0AAAAA/2UEC1j/B73+/JsA9ez//gABAP8AAQD//wEFAgMdFAgpGQAGBP/3+v30+v32+f/y+P/1+f/6/P/8/gL6/QD4/P////8A//8AAQAAAAEAAAAAAAAA/wAAAQAAAQEAAAAAAAAAAAEA/wEAAf8AAAAAAAAAAAQDAxEQDwoLChoaGg8RERYWFhgZGA4ODRkbGhsaGhESEf8A/ygnJwsKDP8AAQEA/wABAAAAAAEAAf8A/wEAAAD/AQABAP4AAAL//wABAf///wEAAAABAQD///8AAQAA/wEAAf8A/gEAAP8AAv///wEA/wEBAQAAAf8BAAAA/wEAAP4AAQL/AAABAP8A/wAAAAH/AAABAP8AAAEAAP8AAQAA/wD/AAAAAQAB/wAAAQD//gAAAQAAAAABAQH//wABAf///gABAQD/AAAAAAAAAQAB/wAA/wD+AgAB/wAA/wABAQAAAAH/AP8A/wAAAQAAAAAAAAABAAD/AAAAAAAAAQD//gACAQAAAAD/AAAAAAAAAAAAAAABAAD/AAABAQH//wD/AAABAQAA/wAAAP4A/wH/AQAAAAAB/wAAAgAAAP8B/wD/AAH/AP8AAAECAQD//gEAAf//AAAB/wAAAgEA//4AAQEB/wD/Af8AAAAA/wEAAP8A/wH/AQEBAP4A/wAAAQEA////AQEBAAAAAAAAAAD/AP8C/wD/AQEB/wAAAf//AAEAAP8AAAD/AAEB////AQECAP//AAEAAAAAAAAAAP8BAAH/AAH+/f0AAQEA//8BAQH/AQAAAAEA//8AAQAAAAAAAAAA/wEAAf8A/wAAAP8BAAL/AP8AAAD/AP8BAAL///8CAgH+/wABAAAA////Af8BAAL///8AAf8BAAH/AP8BAAEAAAAAAAABAf///wEAAAAAAQAA/wAAAQAAAAD//wABAf8A/wEAAAAAAAD/AAAAAAAAAQABAAEA/wD/AP8BAAABAAD+AAABAQD//wABAAAA//8AAQD/AAEBAAAAAAEAAP//AP8AAAAA/wEAAQAAAAAAAQAA//8A/wEAAAEBAf//AAAA/wAAAf8BAAD/AAEAAAEB//8AAQD/AP//AAAB/wAAAQAAAAEAAAAAAP8AAQEA/gABAP//AQEBAAAAAAAAAQD+/wADAQD///8AAQH//wEBAQAA/////wABAAAAAAD/AQABAAAAAf8A/wEA/wD/AQAB/wAAAf///wEBAf8A/wEAAf8AAAEAAAAA//8AAQAAAQEB/wAAAAD//wAAAQD//wABAQD/AQABAAAA/wD/AP8AAAAAAQAA/gEAAQAA/wABAAD/AgAA/wAAAP8BAAAAAQAA/wEAAQAA/wD/AAABAf//AAABAAEAAAD//wABAAD///8AAQAAAAEBAAAAAAD/AP8B/wEAAgEA////AAAAAf8B/wHEmBvYAAEAAElEQVQAAQD//wEAAP4BAAH/AAACAAD/AAD/AAAA/wABAQAAAAD//wABAQAAAAH///8BAAAAAQAAAAAAAAABAP//AAH/AAAB//7+AQEC/wAAAQH/AAABAAD/AAABAAAAAAD/AAAAAAABAQEAAAD//v8AAQABAQAAAAAAAAEA////AAAAAAAAAAEBAQAB/wD/Af8BAAAA/wD+AQAB/wAAAQAA/wAAAQEA////AAABAAAAAAEAAP8AAAD/AAABAQAAAP///wEBAAAAAAEAAP8AAQAA/wAAAQABAAEA/wAAAAAAAQD//wAAAQABAAD//wABAAAAAQAAAAAAAAAAAAAAAAAA/wDJyMmTkpe6urvs7usAAAEAAAECAAD/AQEA/wAAAQD/////AP8AAP8AAP8AAAAAAAAAGwgBdy3/CQAAAgAA/wAA/gEAAAAAAQAA/wEA//8A/gEAAAAA/wAAAAEB/wD/AQAA//8A/wEAAAEA/wAA//8A/wIA/v8AAQAB/gL//wAA/wAB/wH//wAAAAEA/wAA/wAA/wIAAAAA/v8AAAIA/wAAAQAA/wAA/wEAAAAAAAEAAAAA/wAA/wEAAAEAAAAA/wEAAP8AAAEA/wEAAAAAp84D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AAD///8AAQEBAP8AAQH//wAAAf8AAAEA/wABAP//AAEAAP8BAAH/AAAA//8AAQEAAAAA//8AAQEAAP4AAAEB/wH/AgAB///+AAAB/wAAAQEAAP8AAQEA/wAAAP8BAAD/AAAAAAAAAAAAAQEA//4A/wEAAQAAAAEB////AQAAAAAA/wAAAgEA/v//AQACAAAAAAEAAP//AQAB/wH/AAAAAP8AAQEAAP8A/wAAAAAAAQEA/v//AQACAAD/AAAA/wAAAQAA/wAAAQEAAP8AAAAA/wAAAQAA/wABAAD/AAD/AAEAAf8B/wABAQAAAAEAAAD/AP8AAP//AAAB/wD/AgEB/gAAAQAAAAAA/gAAAf8AAQEA/wAAAQAA/wAAAQAAAQAA/gD/AQABAAAA/wD/AAAAAQEBAP7/AAEBAAABAf79/gABAAH/AP8AAAABAAD/AAEB//8AAQABAAD+AAABAAAAAAAAAP8BAAH/////AQEBAQEA//4BAQD//wAAAAAAAQEBAAD//wAAAAH/AP4CAAD/AAIAAf8A/wEBAP8A///+AQEBAAABAAD/AAAAAAAAAAH/AP4BAAEBAP8AAAH+AAABAQAAAP8A/wAAAAEAAAABAf/+/wEB//8BAgAA/gD/AQD/AAAAAAECAP7/AAEAAAEAAAAAAQAA/wAAAAAAAP8AAAEA//8AAQAAAAAAAAAAAAEB/wD/AQAAAAD/AP8BAAAAAAH/AAAAAQAB/gAAAAABAf/+AAEB/gD/AQABAQD/AAAAAP8AAAEBAP///wEAAAAAAQEBAP8AAP//AAEAAf8A/wECAP/+/wAB/wEAAv8AAQEA//8AAAEAAAAAAAD/AAAAAAEBAP////8AAQAAAAABAAEAAQEA/v//AQABAAD///8BAAAAAgEA//8AAAAAAQAB/gD/AAH/AAABAgAAAAAA//8BAAH+/wABAf8BAAAAAAH//wD/AP8BAQABAAH/AAAAAP8AAAEAAP8A/wEBAAD/AQAAAP8A/wEAAAAAAAAAAQAAAAAA////AQACAAH/AAAA/wAAAf8BAAH/Af8A/wEAAQAA/v8AAAAAAgIB////AAAAAP8AAAEBAAD/AAAAAAAAAAAAAP//AQEAAAAB/wAAAAAAAP8AAAIA////Av8B/wEBAP//AAEAAAD///8BAAEBAAD/Af8AAQEA//8A/wEAAAAAAQAA/wAAAQAAAAAAAQAA/gAAAAAAAf8AAAIBAP7/AAEAAQAA/wAAAAAA/wAAAf//AAEBAf8A/wAA/wEAAgAAAAAB/wD/AAEAAP8AAAAA//8AAQAAAAEAAP8AAAEBAP///wEBAQD/AAEBAP8AAAAAAAD/AAAAAAEAAP8AAf8AAAEA/wABAQD/AAABAAAA/wAAAQEA/wAA////AQEBAP8AAQH//wABAAAAAf8AAAEAAP//AAAA/wAAAN7e3sbEyMzNzuPi4/Dw7wEBAs/P0O/x7gABAAD/AAAAAAEHAQB9L/8WBQAB/wAAAQAA/wABAgD+AAAA/wD/AAD/AQD/AQABAAD+AAD/AQAAAAEAAf8A/wD+AAAAAQD/AAAA/wD9AgD/AAAA/wD/AQD/AQEAAf/+AQAAAAD/AAD/AQAA/wD+AgAAAQD+AQAB/wD/AQAA/wD/AQAAAQD/AAAAAQAAAAABAAD//wD/AgD/AQABAQABAAD+AAD7/wCgyQLl8P8A/wAAAJsHD177BQACAv//AAIA//4AAP//AdkB/Zz/+qb+9O0A/wABAAD/AAAAAQABAAAAAAEOBv8mFwAiEwAcDwIBAv8A//8AAAABAgEDAf/+AAABAgECAf8A/wD/AQD2+wDu+QDt9QHs9ALn8gDu9QD2+P8AAAEAAAAAAP8AAP8A/wAAAQEAAAAAAP8AAAAAAQAA//8AAAAAAAEAAQAA//8AAAEAAAEAAf8AAP8A/wEAAQEA/wABAf////8A/wAAAQEAAAAAAAEAAAAAAAAAAAABAAD//wAAAQAA/wAAAQAA/v8AARkWGCgpKRISESIhIRocGxobGhkZGSgpKBISEgEAAAAAAAACAQD/AAEAAAAAAP8BAAH/AP8AAAAA/wEAAP8AAQAA/wAAAAAAAQAB/wAAAQAAAP/+/wEBAAABAf///wEAAAD/AAECAP//AQAB/wD/AAABAAD/Af8A/wIAAf8BAAD/AAAA/wABAAD/AQAB/wD/AAAAAAAAAQAB////AAAAAAAAAQH//wABAAAAAAAAAAABAAD/AAABAAD/AAAAAAAAAAD/AP8CAAH/AQAA/wAAAAABAQD//wAAAAAAAQAAAP8B/wAAAQH//wAAAP8AAAH/AAAB/wAAAv8A/wEA/wAAAQAAAAAAAP8A/wIBAv//AP8A/wIAAP8BAQAAAAD///8A/wH/AP8AAAABAQAAAAEAAf8A/wAAAQAA/wAAAAEBAP8AAAAAAAIAAAAAAP//AAAAAP8BAAEAAQD+/wH+/v7/AQEA//8BAAEAAAAAAAAAAQAA//8A/wAAAf8AAAAAAAEAAAAAAAAAAAH/AP8AAQAA/wACAQD+/gAAAgAB/wD/AAAAAP8BAAH//wEBAf8AAQAAAAAA/wAAAAAAAQD//wABAAAB/wD/AgD/AAAB/wEAAP//AAAAAP8AAAEBAAD//wAAAf8BAAEAAQH///8A/wAAAQAAAAABAQAA/gAAAAD/Av8B/wEA/wAAAf8AAAIAAP//AP4BAAP/AP8AAAAA//8AAAEAAf8A/wAAAQAA/wEBAf//AAEBAP//AAEBAAAAAAH/AP8AAP8BAQEA//8AAAH/AAAB////AQEAAP8AAQIAAP8AAP8B/wH/AAABAAAAAP8AAAL/Af8B/wAAAP/+AAEC//8AAQH///8AAAACAQL+AP8BAP///wABAAEAAf//AAEAAAAA/wEBAP7/AQEC/wD+AAAAAQABAAD/AQAC/wD+AAAAAQAA/wAA/wAAAP8AAQEAAAAAAAEBAP8AAAAAAAAA/wD/Av8A/wEAAP8BAQH///8BAQD//wEBAP//AAEBAQAA/wAAAAAAAQAA//8AAQAAAAEA//8AAAD/AAABAAH/AP8A/wAAAQEBAAABAP//AAEAAP8AAAD/AAEAAAAB/wEAAQD/Af4B/wIAAP//AAABAQD///8A/wEBAQAAAP8AAAEAAAAAAAAAAAH/AP8AAAABAAEAAP8AAP8AAAH/AAAAAAAAAAEAAP8BAAD+AAABAAAAAAEB////Af8AAAEB/wAAAAAAAQD/AP8BAAD/AQEAAAAB//8AAAAAAAH/AAAB//8AAQH/AAAAAQAB/gAAAQAAAAAA//8AAAIAAQAAAP8AAAABAAD/AQEA//8AAQAA/wAAAAAAAAAAAQAAAP8AAAH//wABAAABAQEA////AAEAAP8AAP8AAAEAAAABAAD/AQAB/wEAAP8AAQH///8BAQD//wEAAf8BAAEAAP8AAAH/AAABAP8A/wEAAAAAAAAAAQD/AAAAAAAAAP8BAAH///8BAQEAAAAAAAAAAABfXGCipaYAAP4AAAEAAP8AAAAAeS4AIggAAf4BAAL//wEA/wAAAQAA/wAAAAAA/gAA/wAA/wAAAQEA/wEA/wAA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AO7x//L0AP//AAAAAAAB/wAAAQAB/wAAAQD//wD/AQAAAAACAAD/AQAA/wD//wABAAD/AQD/AAAAAAABAQAA/wAAAQD//wAAAgAA/gABAAAAAAAAAgD//gD/AQACAAAAAAAAAAD/AAD/AAABAAAAAAAAAAAAExEULi8tICAhHyAfGhsaHh8fIiMhISAgAgAB/wEAAAEAAP8A/wAAAQEAAAAB////AAAAAAEAAQABAQD///8A/wABAQD/AQAB/wAAAAD/AAEAAP8BAAD/AAEA//8BAgD//wAAAAAAAAD/AQACAAAA/wD/AAAAAQEA//8A//8AAgEB/wD/AAAAAAAAAP8BAQH//wAAAAAAAAAA/wEAAf8B/wD/AAEAAf8AAAEAAP//AAAB/wAAAQAAAAAAAQAB////AAEBAAH/AP8A/wD/AAABAQAAAQAAAAAA/v8AAAD/AQIBAP8AAAEA/v//AwEC/wAAAP//AAH/AAACAP//AP8AAQEA/gEAAf8AAAEA////AAABAQAAAAEBAP///wD/AP8BAAEAAgAA/wEAAP//AAEB/wABAf//Af39/gEBAAAAAAAAAP8BAAD/AAEAAAAAAQAA/wD/AAACAAD/AAD/AP8BAAABAAD/AAH/AP8BAAAAAAAAAAEAAP8AAAEAAAAAAP8AAAAAAAEA/wABAf//AAABAAD+//8BAAH/AAAB/wAAAgAB/wD/AAEAAf//AAABAAEBAf/+/wABAAAA/wH/AgAB//8AAQEA//8AAAEBAf//AAAA/wIBAP//AP8A/wEAAAAAAf8B/wD/AQH/AP8AAAEB////AQAB/wEAAQAA//8AAQEA/wABAQD/AP8A/wAAAQAAAAEAAP////8BAQH//wAAAgEAAAAB/v8AAQEAAAABAP/+AAAB/wEAAAD/Af8B/wAAAAEAAQD///8CAQD/AAEBAP/+AAEBAAAAAAAAAAD/AAAA/wABAQD/AAAAAAAB//8AAQEAAQABAAD+/wEBAP7//wAAAQEBAAD/AAABAQD///8B/wAAAQAAAAEA/wAAAQD/AAACAP/+/wAB/wAAAgEBAP///wAAAQEA/wAAAQD///8BAAAAAQIAAAAAAP8AAP8AAAAAAAD/AAAB/wEAAf//AAEBAAAAAAEB//7/AAEAAf8A/wD/AQEBAQAA//8AAAEAAP4A/wEAAAEAAQAAAAAA/wAAAQAAAAAA/wD/AQABAAAAAP8AAAEAAAAA/wAAAQAAAQAA/wAAAP8AAAIAAP8AAAAAAP8AAAAAAQEA/wAAAP//AQAB/wAAAAAAAAAAAAAAAAD/AAABAAAAAAABAAD+AAABAAAAAAAAAAEAAP8A/wH/Af8AAAEBAAAAAP8AAAAAAAH/AAAAAAABAP8BAQD//wEAAAAAAQAA/wAAAP8BAAD//wAAAQEA//8AAAEAAf8AAAAAAAABAAEAAf/+/wIBAP8AAAAAAQEAAP8B/wAAAQAA/wD/AAAAAAABAQH//gAAAv8AAAAA/wAA/wABAQD/AQAB/wAAAAD/AQAA/wEBAAAAAAD/Af8B/wEAAP8AAQAAAAEAAP4A/wH/AAEBAAAAAQAAAAD/AP8B/wEAAAAAAAAAAP//AbSxsU9RVP8AAAAA/wAAAQEA/wBSH/9NGgD9/AAAAAD+AQABAAAAAAD/AAD/AAAAAAD/AQAAAAD/AAAAAgEAAP//AAD+AAD/AQD/AAD//wD/AAD/AAD/AQD/AQAAAQD/AAD/AgD/AAAAAgD//wD/AQD/AQAAAAD+/wAAAAD/AQAAAQAA/wD/AgAA/wD/AQABAQAA/wD/AAAAAQAAAQD/AAAAAAD//wABAwDD3gC82QEAAQAA/wAAAQAAAAACAg8AAYYCCGABCgX9/v8BAf4B/wEBAf0AAAAC//4AAf8AAtL/+63++aj++Oj+/v8A//8AAAACAgD+AAAA/wABAAEAAP8QCQAnFwAlFAAXDwAHBAACAgAAAAABAgAAAAACAwABAQABAAAAAQACAwAAAQACAQABAQD/AQACAQABAAD/AQAAAQABAQAAAAD5+wDu9gDq8gD7/QHx9QD1/QDw8wD0+AD+/wEGBP/u8v/7/gH09/8AAAEAAP8A/wAAAAEAAAAAAAEA//8AAAAAAAEAAf8AAAAA/wAAAAAAAQAA//8AAQEA/wAAAAAAAAEAAQEA//8AAAAA/wAAAgEA/wAAAAAAAAAAAAAAAAAAAgAA/wAAAQ8OECwtKyYnJiYmJSgrKSsqKiAhIQH///8BAQEAAP8AAAAAAAEBAQAA////AAABAQD/AAAAAAEAAAABAAAA/wAAAP//AAEAAAAA/wAAAf8AAAEBAAAAAAAAAAD/AP8AAAEBAAEAAf////8AAAEA/wAAAQAAAAAAAP8BAQH/AP8AAAEAAAAAAP8A/wEAAAAAAQAAAAEAAP8BAAD/AAAAAP7//gIAAQECAQD///8BAAD/AQAA/wAAAAD/AAAB/wAAAQAAAAAAAQAA/wAAAP8AAAEAAAABAf/+AAAB/wEAAAH/AP4AAAEAAAABAP8A/wEBAQAAAAD/AAAAAAABAf///gEAAf8A/wEAAQABAQAA//8AAAD/AAEAAAABAP//AAAAAQAA/wH9/v4BAAAB/wD/AQAA/wAAAQAAAAD//wAAAQACAAD/AAEAAP8AAAAAAP//AAAAAAABAAAA/wEAAQEAAP//AAABAQH//wABAAD///8AAQAAAAAAAP8AAQIB/v8AAQD/AP8BAAH///8AAQIAAAABAQAA//8AAAD/AAAA/wAAAQABAAAAAAAA/wAAAQD/AAABAQAA////AAACAAL/AAAAAAD/AP8AAAECAP//AAEAAP8AAAD/AAAA////AAECAAAAAQAAAAD/AAABAP///wEAAP8AAAAAAQAAAAEB/wD/AQABAQD//wABAQAA//8AAAAAAAAAAAEAAAD/AAABAAD///8CAQH+AAABAAD//wABAQAA/wAAAP8BAQH/Af8A/wEAAP///wABAQH+//8BAQAB/wD/AAEBAAD/Af8BAAH/AAEAAP4B/wL/Af8BAAH///4BAQEAAAEA//8AAQD///8AAAEBAP8AAP//AAIBAAD/AQAAAAAB/wD/Af8AAAABAQEA/v//AQAAAAEAAAEAAP8BAQD//wAAAAAA/wABAQD/AAABAAAAAP//AAEAAAACAAH/AQD///8BAAAB////AQH/AQABAAD///8BAQH+/wABAAAAAP8A/wACAgH//wABAP/+AAEAAQEB/wD/Af8B/gD/AQAAAQAA/wAAAP8BAAAAAAH/AAABAAAAAAAAAAAAAAAAAP8AAAH/AP8BAAEA/wAAAQD/AP8BAAEAAAAAAAAA////AQAAAQIA//8BAAD/AAAAAAABAAAA/wD/AQABAAAA/wD+Af8BAAAB/wAAAgEAAAEA/v//AQAAAAABAAAAAAAA/wD/Af8A/wEBAAD/AQABAQAAAAAAAAAAAAEA////AAEBAP//AAABAQEA//8AAAAAAAAAAAABAAAAAAD/AAABAAD/AP8AAAIBAf//AAAA/wH/AP4CAAH/AQAA/wAAAQEAAP8AAAEA//8AAQEBAP8AAAEA/wD/AQAB//8AAAH/AP8AAAEBAQAAAAD/AAABAP8AAAH///8BAAD/AQAA/wEAAQDj4OI1Njfq6+sAAAABAAEAAAABKxD/cCX/AP8AAQAA/wEAAAEAAP8A//8A/wIA/wAAAQEA/wAA//4A/wMAAAAA/wAA/gAAAQEA/v8A/wAA/gEAAAAA/wEAAAAA/gEAAAAA/wEA/wAA/wEAAAIA/wAA/wEA//8AAQEA/gEAAP8A/v8AAQIAAQEA//8A/gAAAAEAAQEA/wAAAAEAAAAA/wAAAAEAAf8A7/kAos0A7fQAAAABAAAAAQH//wABAgH//wABAACCBgp5/Qj+/wD/Av//AAD/AAAAAQH/AAH9AAD+AQD/AADbAP+2A/q4/PnI+vgAAQEA////AAAAAQMAAf8AAQEA//4BAwP/FgwAIxQAIRMAGhIABgQAAQAAAQQAAP8AAgAAAAIAAQEA/wEAAgEAAwMA/wAA/wAAAgAAAQMAAAAA/wAAAAEAAAIAAP8AAQIAAAAAAP8AAAAAAAIAAQEBAQD/AAIA+PoA+PsA7PMA+/0A+PoA9vgA6PAA7vYA/fwB/P0A+voA/QAA+foA8/cA/v4AAP8BAAEAAP//AAEAAAABAP8AAAEBAP//AAD/AAAAAAAAAP4AAAEAAAEBAAABAAH/AP8AAP//AAIAAAABAP8BAAD/AAAAAAEAAAEQDxIsKycoKislJSQtLi0oKSgeHhwA/wEAAQD/AAEBAAAAAP//AAAAAAABAAEAAf8AAAH///8BAQAA/wAAAQAA/wAAAQAAAAAA/wAAAAAAAAAAAAAAAQAA/wABAAD/AQAA/wH/Af8BAAEAAAD//wAAAAABAP8AAAEAAP4AAQEBAAD/AAAA/wAAAAAAAAAAAAEAAQAA//8AAQEB////AQAA/gH/Av8B/v8AAgEA/wAAAAAAAQEA//7/AAABAAEAAAAAAAAAAAD/AAAAAAABAAD/AAABAAAAAAH/AP8AAAAAAAEAAP8AAAEBAP8AAAD//wABAQD/AAAAAP8BAAIAAP///wABAAAAAgD//gAAAQAB/wAAAQEB/f79AQECAP//AAAAAP8AAQH//wEBAP8A/wAAAQAAAAAAAAEAAP7/AAEA/wAAAf8BAAD/AAIAAAAAAP8BAAH///8AAQABAAEBAP7+/wABAAEA////AQABAQEAAAEAAAAAAP4AAAEAAAAA/wEAAP8AAAD/AAAAAAAAAAECAf////8AAQEBAAEAAP////8AAQEA/wD/AQEBAAAAAP8B////AAEBAAD+AAAAAQECAAD///8AAgEA//////8AAQIB//8AAAEAAf8A//8AAAL/AAABAP8BAAH/AP4AAQIA//8AAAEAAP8AAAD/AQABAAAAAAAA////AAEBAAAAAQAA////AQEAAAABAAAA////AQEB/wAAAAABAP4AAAH/AAAAAQD//wEBAAAAAQEB///+AP8BAAEAAQAAAP8AAQAA/wEAAP8AAAAAAAEAAAAAAAAAAAAAAQABAAD///8AAAAAAAH///8AAAABAQH/AAAA/wAAAQAAAP8BAAIBAP/+/wEBAf8A/wAAAAABAAD/AAAAAAEAAf8AAAAAAAAAAAAA/wAAAP8AAAEAAAAAAAAAAQAB/wD/AAD/AAAAAQABAP8A/wH/Af8A/wEAAAD/AAABAAABAAAAAf///wEBAAABAAD+Af8A/wABAAEAAAH/AQAAAAAAAP8BAAAAAAAA//8AAQD/AAEBAAAAAAEBAAD/AP4AAAEAAAD//wAAAAABAP8BAAH+AAAAAP8BAAEA/wD+AgACAAEBAP7/AAEAAAEAAP8AAAAAAAD/AAAAAAABAAEA//8AAAAAAAABAQH///4BAQL/AP///wABAQAAAQEA//8AAAAAAAEAAP8A/wABAQD//wAAAQABAAEAAAAA////AgAA//8AAAIAAP8AAAD/AQAB/gEAAQAAAP8A/wABAP//AQL/Af8B/wEAAP8AAQAAAAEA//8BAAH/AP8AAAABAAEAAAAAAP//AQAAAAAA/wEBAQAA////AQAAAAEB/gAAAP//AQEAAP8AAAABAAEAAQAA/wD/AQABAAAAAAAAAAAAAAAA//8AU1JUr7CwAAD/AQAB/wAAAAoEAHssABYEAAEBAAABAP8AAP8AAAD/AP8BAQAB//8AAAAAAP8BAP7/AAABAP8BAAD/AAABAP4BAP8AAP4AAAAAAP8BAP8AAAABAP8BAP8BAP//AAABAP4BAAAAAP8AAP8AAAABAP4BAAAAAAABAAH/AP4CAAD/AAAAAP8BAAEAAAABAP4AAAAAAAIBAP8BAPf6ALrfAM3gAAABAQAAAAD//wABAAAAAQEA//8AAAAABQEAegUJdAAJBv0B/wIAAAABAAD/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AAEAAP8A//8A/wEAAP8AAQEA/gAAAQEBAhMSEi4uLi4uLigpKSgqKC4tKg8OEQABAP8AAAAAAAAAAAAAAAEBAQAAAAD/AAAB/wD/AAEBAP//AP8BAQL///8BAQD/AAAB/wAAAAD/AAABAQH///8AAAAAAAAAAQAA/wABAAAAAAH/Af8A/wABAP//AAEBAQD/AAAA/wAAAAD/AAABAAAAAQAAAAAAAAAA/wAAAQAAAAAA/wAAAAABAP//AAH/AAAB//8AAQABAQD+/gABAQEAAAAAAAAAAAAAAAAAAP8AAAEAAQAA/wEBAP///wAAAP8AAQEAAAD/AAABAQAAAAAA/wAAAP8A/wIAAf//AAAAAAABAAH+/f7/AAACAgD//wAAAQAA/v8AAgEA/wAAAAAAAP//AAABAAEA/wAAAQAAAAAAAAAAAP8AAAEAAP8A/wAAAQAAAAAAAAH/AAABAAAB/wD/AQAAAAEA//8AAgD//wAAAAABAAD/AP8BAAIAAP///wAAAAH///8BAv8BAAL///8AAf8BAAEAAAAAAAD//wAAAQAAAP8AAAAAAAEBAAAAAAAAAAD+AAECAAAAAP8AAAD/AAAAAAAAAAAA/wABAf//AAAAAQEB/wD//wAAAQEBAP8A/wAAAgD//wAAAAAAAAABAAD/AP8AAAEAAP8AAAEBAQAA/wH/AP8B/wEAAv///gABAP8AAQEA//8BAgH///8AAAEAAAAAAAAAAP8AAQEA//8A/wH/Af8AAAEBAAAAAP8AAAH//wABAQD/AP8B/wH/AQAB/wD/AgAB/wD/AAEAAP8BAAAAAQAA/wH///8AAQAAAAEA//8BAQD/AAAAAP8AAAEAAAABAQEA////AAAAAP8AAAABAAAA/wAAAQABAAH+Af8A/wEBAf///wABAAD/AQAA/wEAAP8BAAAA/wAAAQD/AAABAAEAAP8A/wEAAQAAAP8A/wD/AQAB/wD/AQABAAH/AQAA//8BAAEAAAD/AAAAAP8BAAEAAQD//gABAQD//wABAQD/AAABAAD/AP8AAAABAAIAAP8AAAAA/wAAAQD/AAABAAABAAH+Af8BAAAA/wD/AAAAAP8BAAD/AAEBAP8AAAEBAAD//wAAAAD/AQAAAAEBAP7//wEBAQD/AQAA/wEBAP8AAAD/AP8BAAEAAAEAAP////8AAQEBAAAAAP//AQEB/wAAAAAAAAD/AAABAAABAAD//wAAAQEAAP//AP8AAAEAAAAAAP8CAAL+AP8AAP8BAQEA/wD/AQAAAAAAAAEB//4AAAD/AAEBAAAAAAEBAQD///8BAQD+/wABAQAB/wD+//8BAgIA//8AAAAAAP8AAQEBAAEAAP8AAAD//wD/AAECAP8AAQAAAAEAAP///wABAAH/Af8BAAAA/wEAAP7o6eo3Nzrj4uH/AAEAAAABAAACGAj+dij/DwYA//8AAAAA/QEAAP8AAAIA//8AAAEAAP8AAAEA/gAA/wAA/wIAAP8A/wAA/wEA/gAAAQIA/wAA/gAA/wAAAAAA/wEA/wEA/wAA/gEAAQIA/v8AAAEAAAEA/wAA//8A/wEAAQEAAAAA/wAA/wAA8vsA4PEA3fAB/f7/BgQABAEA8PUA3ewA+vwAAAMAAP4BAAD/AAAAAP8AAAEAAAEAAAAAAQAAAAMAAf8A/v8AAQIoAf+YBQw4/wYCAf7+/wAA/wH8AwD+/wH9AQD/Af/9AAABAQL+AAD/AAABAQH/AwLtBAbU//3D/PnJ/PfT+vj4/v0A/wD/AQAAAP8AAAIAAQAA//8AAf8BDgn/KBoAJRcAIBcACgcAAQAA/wEAAQAAAQEAAAAA/wAAAQIAAQAA//8AAAIA/wAAAAAAAgIA/wEAAf8AAAAAAQEAAAAAAAMAAf8A/gAAAAAA/wAAAAEAAQAAAQEA/wEAAAEA/wEA/wAAAgAA/gEAAQAA/wAA/wEAAgAAAAEAAAAA//0A/wMAAgIAAP8BAQH/AAEA+/wA5+wB8PQA7PP/8vMA7/YA6u4B7/AA/v4AAP8AAAEBAAAAAAAAAAD/AAAAAAAAAP8AAAD/AAEAAP8BAAH/AP8BAAAAAP8AAAH/AAADAAMmJyYtLS0pJygqLCk1NzYgIB7//wEBAQD/AAABAQAAAAAA/wAAAAABAQD/AAD//wEBAP8AAAEAAf8BAAD/AAEAAP8AAAEA//8AAQEAAP4B/wEAAf//AAIB/wD/Af8A/wEAAAAAAP8AAQD//wABAAEAAf///gEAAf8BAQAAAP8A/wEAAAAAAf8A/wEAAAAAAAAAAQAA/wAAAAAAAAD//wABAf8A/wEAAQAAAAD/AAAAAAAAAAABAf///wEBAQD/AAABAAAA/wAAAQH//wABAP8AAAEA//8AAQAAAAD/AQAB/wD//wABAQAAAAEB/v7+AAAAAAAAAP8BAAH+/wABAP8AAQH/AAABAAD/AAABAAABAQAAAAD///8AAAEAAAAAAQEA/////wABAQD/AAAB/wAAAQH///4AAAEBAP8AAQEAAP8A/wH/AQACAP///wIAAf8AAAAAAAD//wEAAP8BAf8BAAH//wAAAAD/AAAAAQABAAH///8BAAD/Af8BAAEAAAAAAAEAAP8AAAD/AAAC/wD/AQAA/wEBAP//AAD/AAABAf//AAEBAAAAAP//AAABAAEA/wAAAAD/AP8BAAEAAAAAAf8A/wEAAQAAAAEAAP7//wEBAf8AAAH/AAABAAAA/wAAAAEBAP//Af8A/wL/AP8BAP//AQAAAAEB//8AAAH/AP8AAAEBAQAAAAAA/wAAAf8A/wIBAf/+AP8BAAAAAAH/AP8B/wD/AQEB/wEAAf//AAAB/wAAAQAAAAEBAP8A/wAAAQAAAAH/AP8AAAD///8BAgH//wEBAP8A/wAAAQAA/wD/AAAAAQAAAAABAAAAAAEA//7/AQEBAP8AAQH//wEB//8AAf8A/wAAAQEAAAAAAP8A/wAAAQH///8AAAEBAgEB//7/AAD/AAEAAAEA//4AAQEA/wAAAAAAAP8AAAEAAP8BAQD//wEB/wD/AQAAAQAB/wAAAP8AAAAAAQEBAAD//wAAAQAB/wD+AP8BAQAAAAH//wABAAAAAQAAAAD//wABAAAAAQAA//8AAAH/AAAAAAEBAAAAAAABAv///////wABAP8AAQEAAAEAAP8B/wH/AQAA/wD/AAEBAQAAAP8AAAD//wAAAAAAAP8BAAH/AAACAAAAAf//AAIAAP//AAABAP8AAAEAAAAAAAEAAP4AAAIA//8AAQD/AAEBAQAA/v8AAAAAAP//AQEB//8BAQL/AAABAAD///8AAf8AAAEAAAABAAD/AQAA/wEBAP7/AAEB/wH/AQAAAP8AAAAAAQAB/wH/AAABAf///wAAAQEA/wAAAP8AAAEBAAAAAQD//wAAAQABAP//AAEBAP///wABAQH//wAAAQABAP//AAAAb3F0k5GS/wD/AAD/AAAAAAAAA0Yb/VcdAP/+AP8BAP//AAAAAAABAP8AAP4AAAAAAAAAAP8BAP8BAAD/AP4CAP8AAP8BAAAAAAABAP4AAP7/AAECAP7/AAABAP8BAP8BAP8A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AAAAAQD+/wABAwD/AAAA/wD/AQABAAABAgD/AAAA/wD/AAAAAgAAAAAAAAAAAQAAAAD/AAABAgAA/wD/AQACAQD/AAABAQABAAD/AAAAAgAAAQABAQABAAD/AQABAAABAQEBAgD/////AAIA///q7gDl6gLm6//k6//o7P/08gEAAP8AAQEA/wAAAQAAAAAAAP8A/wAAAQEA//8AAQAAAQIAAf8A/gAA/wAAAAEAAR8eIEhKRz0+PkVFRRMUEgD/AAD/AAACAAD/AQABAAEAAAD///8A/wEAAQAAAQAA//8A/wAAAP8AAgEB/wD/AQAA/wAAAf8A/wEBAAD/AQAA/wEB////AAEAAv8BAAAA////AAEAAQAAAP8A/wEAAAAAAQAA/wAAAf8A/gAAAQABAAH/AAAAAP8A/wAAAQEAAAAAAAAAAQAAAAAA/v8BAQEAAAD/AAEAAP4B/wH/Av8B/wD+AAABAAEAAAD/AAABAAAAAAD/AAABAP8AAAEBAP//AAH+/v0BAAH/AAAAAAABAAD+AAABAAAAAAEAAP//AAABAP8AAQEA/wD/AQABAAD/AAAB/gAAAQAAAP//AAAAAAEAAQEBAP7//wEAAQAB/wAAAAD/AQAB/wAAAQD///8BAAH/AAAAAAABAQAA/wABAAD/AAAAAf///wEB/wD/AQABAP8AAAH/AQAA/wD/AAAC////AQEBAP8BAAAAAAH/AP8BAAH/AP8AAAEAAAAAAQAAAAD//gEBAf8AAAAAAP//AAIB/wD/Af8AAAAB/wD/AAAAAQABAf8A/wD//wABAQH/AQEB////AP8AAAEBAAAAAAEAAQAA//7/AQAA/wAAAAEAAAAAAAABAAEAAf7//gABAQEAAAD/AAABAAAAAAD///8BAAEAAf//AAEBAAAAAAEA////AQAAAAAAAP8BAAH/AP8AAAAB/wD/AQEAAAAA//8AAAABAQH/AAABAAEA////Af8AAQEB/gAAAQD/AQAA/v8AAQAAAQEA/gABAf//AAAA/wEAAQEAAAABAP8AAP8AAQEA/wD/AAACAAD/AAEAAAD///8BAQD/AAABAQD//wABAP8AAAD/AAABAAAAAAIA//4AAQD/AAEBAP//AAEBAAD//wAAAQAA/wABAQD//wABAgD//wAAAAEB//8AAQD/AAABAAEAAP8AAAAA/wAAAAD/AQABAQAA/wAAAAD/AAABAP8AAAH/AAABAf8A/wEAAP8BAQD//wAAAQEA/wAAAAAA/wAAAQAAAAAAAQAA/wAAAP//AAEB//8AAQEA/wAAAQD///8BAgAA/wH/AAABAAAAAP//AAEBAAAAAAABAf8AAAH//wH///8CAQH/AP8AAAD/AAABAAD/AAABAAAAAAH/AAABAAAAAAAAAP8AAAAA/wABAQD/AQAB/wAAAAH+AP8AAf8AAAAB/wH/AQAB/wEAAP//AAABAQD/AAAC/wD/AQAAAAD/AAABAAAAAAD/AAEC////AQEAAP8AAAAA/wD/AQACAAD/AAEB//8AAQD//wEAAf8B/wH/AQAB////AQAAAAH///9hYGOioqEAAAEBAAD/AP8AAAACJxD+bSYABgIAAP4AAAAAAAEA/wAAAAAA/wEA/gABAQD//wAA/gAAAQIA/f8A/wEA/wIA/wAA/wAAAAAA/wAA/wEAAAEA/wAAAAAA/wEA/gEA/wAAAQAA/wEA/gAAAgAA/gEAAAAAAAEAAAIAs9oCyOL/AP8AAAABAAD/AP//AAAAAAAAAAEzMjMyMTAPDw/Bw8PLy8oAAAEAAAAAAAAAAAAAAAAANigAFQsAwtoA9PYAAAAAAAAAAAAB//45AgGOBQssAQX/AgL+AAD/AQD+/wH+AQD+AAH+/wD/AQEA////AQEAAQH9AAD+/wL+AP/+AQEAAQH/AAL9AQD8AQPiAQLd/vzW/PjV/vne/Prk/Pn/AQAAAAABAP8AAQEBAP4AAAD+CggAJBcAJBkAIRgAEw0AAgEAAAEA/v8AAgEAAAAA/wEAAf8AAAEAAAEAAAAA/wAAAwEA/v8AAAIAAQEA/wEAAAAAAAAAAAEA/wAAAAAA/wEAAAAAAAEA/wAAAQEA//4AAQEAAAEA/wAAAQEAAQEAAAEAAAAAAAAAAAEAAAAA/wAAAQMAAgAA/wEAAQAAAAEAAAAAAQEAAAEA/wAAAgEAAAABAAEAAQAB//8A8/UB5uwB6u7/4Oj+3eL/8/MAAP4AAAAAAAAAAAEAAP4BAAEAAAAAAAAAAAAAAAD/AAABAAEBAAAAAAABAAAfHyE/Pz40NDRBQUAnKigCAQL/AAAAAf8BAAD//wAAAAEAAf8BAAEAAAD/AAAAAP8A/wH/AP8BAQEAAP8B/wH/AP4AAAEBAQD//wH/AQABAAAAAAAAAP///gABAQAAAQAA/wABAAD/AQAB/wD/AAAAAAAAAAAAAP8BAAH/AAD///8BAQEAAAEAAAAAAP8AAAAAAAD/AAABAAAAAAAAAAAAAAD/AQAB/wAAAQH///8BAAAAAAAAAAAA//8AAQEAAAABAAH+AAABAf8B/v79AAABAAAA/wD/AAEBAf8AAAAAAAEAAP4A/wEAAAAAAQAA//8AAQEAAQAB/gAAAQD///8AAAEAAQAAAAAA/wABAQEAAP///wAAAQEB/wD/Af7//wEAAAAAAQACAAH///8BAQD+AAACAAD/AAAAAP8B/wH+Af8B/wEAAf8A/wEBAf///wAAAQEA/wD/AP8AAAEBAQEAAP8AAAAAAAAAAAAAAAEA//8BAAD+AAABAf/+AAEDAAD+/wEAAf4B/wEBAP///wEAAQAAAAABAf//AAEA/wH/AP8BAQAA////AAABAQEB/wD+AQACAAH///8AAAAAAQEB///+AQABAAD///8BAQEAAP8AAAAAAQEA/gD/AP8AAQAAAQIB/////wABAQAAAAAAAAEAAP8A/wAAAQAAAAAA/wABAQAA///+AAABAAD/AQABAAD/AAEB/wAAAAD/AP8BAQEA/wEBAf////8AAQH/AAEAAP8B/wAAAAAAAQEAAP8A/wD/AAAAAAABAQD//wEBAAAAAP//AAAAAQAA/wAAAQAB/wD/Af8BAAH/AAAA//4BAQMAAP///gEBAf8AAAAAAQAA/wAAAQEAAQAA/wABAP///wH/AP8AAAABAQAB/wEAAP/+AAACAAAAAQAAAP/9AAICAP///wAAAQAB/v8AAQEAAAD/AgEB/v//AAABAQD/AAAAAAAAAAABAAEAAP8BAAD/AAD//wH/Av8C/wD/AAAAAAEBAP//AAEAAP8AAP8BAAEAAQAA/wAAAP8A/wAAAQIAAP8AAP8AAAEAAAAA/wD/AAABAQEAAAAAAAAAAP8AAAD/AAAB/wABAgAA/wH+//8BAAAAAAEAAP7/AQEA/wECAP8AAQD//wAAAQABAAD//wAAAQAB/gD/AQAAAQD/AQAC/wAAAAD//wAAAAAAAQABAAD/AAAAAAAA/wAAAQEB/wD/AQABAP//AAAA/wEAAP4AAQIAAP8BAAH///8AAQEBAAD/AAD/AQAB/wAAAP8AAAH/AAACAAD/AAABAf8A/wAA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AgD//wMAAgIA/wL5+gTg5v/b4vrd4Prh4/8A/gAAAQAAAAAAAAEA/wAAAP8AAQAA/wEAAQEAAf8A/wAA/wAAARkXGDc4Nz8+QDs9OjExLwMEBQD/////AAABAAEBAQAA////AAEAAQAA/wABAP//AAAAAQABAAD//gAAAQAAAAAAAQAAAAAA/wABAQAA/v/+AgEA/wACAQH///8A/wAAAgAB/wAAAAD/AP8AAAIBAf7//wAAAAAAAP///wEBAAABAQH/AQABAAAA/wH/Af8B/wAAAf///gIAAQD///8AAf8BAAAAAAAA/wAAAgD//wH+/v4BAAD///8BAQH+AAEBAP//AP8BAAH/Af8BAAEA/wD/AP8AAAEAAAAAAP8B/wH/AQAAAP8AAAICAP//AQAA/wAAAAD//wABAQD/AAAAAP8AAAEBAAD/AP8AAAEAAP8B/wH/AgAA/wAAAP8AAAD/AAEC//8AAQH/AAABAf///wEAAAABAf///wEAAAAA/wABAgD//wAB//8AAQH///8BAQL///8BAAAAAQAAAAAAAAAAAAAAAAAAAAEA//7/AQEA//8AAAEBAQH/AP0A/wEAAQEB//8AAQEAAAH/AP8AAP8B/wH/AQABAAAAAAD/AAEBAP8AAP8AAQEA/wAAAAAAAAAAAAD//wAAAf8B/wEAAQD/AAABAAH/AP4BAAAA/wAAAQH/AAAAAAABAAAAAAAAAP8AAAD/AAAA/wABAgIA//8AAAD///8BAQIBAf///////wAAAgEC/wD+AAAA/wAAAQAB////AQEBAAD///4AAQIAAP8BAAEAAP8AAQH/AP8B/wAAAAH//wEAAP8BAQD/AQAA/wABAQAA/wD/AAABAP8A/wAAAQEAAP//AAAAAAEAAAABAAAAAAAAAAEAAP///wABAf8AAAEAAAEAAP8AAAD/AP8B/wEAAQEAAf8B/wD+AAAAAAABAAAA/wD/Af8A/wAAAQAAAAEBAAAAAf8A/wAAAAD/AAEBAP8AAAEAAAD/AAAAAAAAAAABAAAA//8AAQH/AAABAAAAAQAA/wAAAAAAAAD+AP8CAAEAAAEAAP8AAP8AAQH/AP8B/wEA/wAAAQAAAP//AAEBAAH///8BAAAAAQAAAf8A/wEAAAD/AAEBAQD//v8CAQAAAAAAAAD/AP//AAEBAQD/AAEB/wAAAAAA//8AAQABAQD+/wAAAP8BAQEA/wABAAD/AAABAAD/AP8AAAIAAf///wEBAP8AAQEAAP8A/wEAAf//AAAB/wD/AP8BAQIA//8B/wAAAQH/AP8AAAABAAD/AAAAAQEB/wD/AP8AAAEAAAAAAf8AAAEAAAAA/////wABAQEAAQAAAAAAAP8AAAEAAP8BAAHX1tdOT1Lc3NoAAAAAAAEAAAAAAAAADAMBVSL/OBQA/f0AAQIAAAAA//8A/wAAAAEAAP8A/wEA/wAA/gEAAAAA/wIA/gAA//8AAQEA/gAAAAAAAAEA/gEAAAEA/wAA/wAAAQEAAAEA/gIA5fUByOf/0OQA/QEA//4AAP8AAAAAAP4AAAAtLS2UkZI+QD0AAQIAAP8AAAEAAAAAAAD/AAAB/wDu7+9PT1HExMMAAAAAAAEAAAAAAAADJBb9aT0AAwAAAf8A3O4AtdcA3usAAP8AAP8AAAAAAP8XAgB3BAtcBAcDAAL+AgH+/wAAAQD/AAD//wH9AQAB/wH+AQD//wD/AAIAAQH7AAL8AQT9AQL9AAT9Af/9AQP8AgT9/wD+AAH9AAH+AAMBAQD/AAP+AQEBAQH/AQH8/v/o//zY/fXZ/PTa+vPf/vX2//wA/wEA//8AAgEAAAAA//8A/wAAEgwAHRUAGxQAJRoAGBQAAgIAAAAAAAEA/wEAAAEAAQAAAQEA//8AAAAAAAEAAAEA/wIAAf8AAAEAAAAAAAEAAAABAAD/AAIAAQEAAP8BAAH/AAEAAAAAAAAAAQEAAAEAAAAAAAEAAQEAAP8B/wL/AgABAP8AAAIA/wAAAgEA/wD/AQABAQL//gECAgAAAAIBAAAA//8AAQAB/wEAAAEBAAABAQADAAIAAf8C+/wA5usB5+z+4ej74+T85eT///4BAAAAAAD/AAEAAAAAAAAAAAABAAAAAP8AAAEAAAAAAAAJBwg/PUBGSEU8PDwxMzEDAwL/AAAAAP8BAAEAAQD//wEBAP//AQEB/wD/Af8BAAH/AAAA//8BAf//AAEAAAABAAD+/gABAQAAAQAA/wAAAQAB/wD+AQABAAAAAAD///8CAQL+AAAA/wABAP4AAAEA/wAAAQD/AAAA/wH/Af8BAAABAAAA//8AAQH/AAABAAAA/wAAAQD/AAAAAQABAP8AAAH/AAAB/v7+AQAAAAAA/wABAAAAAAD/AP8AAAH/AQAB//8AAAEAAAABAAH+AP8B/wEAAP8AAQAAAAEA//8AAQABAAD///8AAQABAAEA/v8AAgEA/wD/AAD/AQAA/wAAAQEB/wAAAgD/AP4A/wIB////AAABAAAAAP8AAQD/AAEA/wABAAAAAAAAAQAAAAAA/wAAAQABAQH//wAAAAAAAQAB//////8AAAH/AAABAAAAAAABAQD//wD/AQABAAEBAf8A/wD+//8AAAEBAP//AgEB/gD/AAABAAAAAAAAAAAAAQAA/wEA////Af8BAAEBAP//AAAA/wEAAf/+AAABAQEBAAAA/wAAAAD/AAABAAD/AAABAQAAAAAAAAAAAP8AAAEAAAEAAP4A/wEAAAAAAAEAAQAA//4AAQEA/wAAAQAAAAD/AAAAAAABAAAAAAAAAAEA////AQAAAQEA/wACAP7//wH/AAABAP8AAQEBAP//AAAA/wH/AP8AAAAAAAEBAQAAAAAAAAAAAAAB/wAAAAD/AP8AAAAA/wD/AgEB/wAAAQAA/wD/AQABAf8A/gD/AQEBAAAAAAABAP///wH/AAAAAAAAAP8BAQD/AQEB////AAIBAP8A/wAAAf8AAAEAAAD//wAAAQABAAD/AAEBAAAB///+AAABAQD//wABAv8B/wIA////AAAAAAAAAQAA//8AAAEAAAD/Af8B/wH/Af8B/wEAAQD//wEAAQAB////AQAAAAEBAP8BAAD+AAAB/wAAAAAAAAAAAgAA/wAA/wD/AQAAAAABAAAAAAAAAAD/AAABAAAAAQEA//8AAAAAAAAA/wD/AAAAAf8C/wL+Av8A//8AAAIBAP8AAAAAAAAAAAAA/wD/AAECAQD+AAABAAD///8BAAH/Af8BAAAAAAAAAAEBAP//AAEB/wAAAP//AQEBAAAAAAAAAP8AAAD/AAEAAAD/AAABAP8B/wD/AAAAAQEAAAD/AP8BAP8AAAEAAAABAAD/AAABAAAAAQD//wEA//8AAQEBAP//AAAAAAABAAD/AQEB//8AAQH//wAAAAABAAD/ube5W1pd7vDtAAABAQAA/wAAAAAAAAUCAD0XAEUcABAEAP7+AAEBAP8BAAAAAP7/AAECAP8AAP8AAP4AAAABAP8BAP4AAAAAAP4AAAAAAAABAAABAAABAP4BAAAAAO76ANjxANTqAN/vAP7+AAEAAAABAP/+AAAAAAAB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AQAAAgABAAABAQIBA/4A/wD/AgAAAAABAQAAAAAAAQD/AQACAQD+/wEBAAAAAAH/AQABAAIBAv4AAf8AAAAA//8BAAH/AQABAAH/AP8AAQEAAP8AAQEBAQH/AP8AAAABAAAAAgEAAAAAAAAAAP8BAQIAAQMAAAD/AAAAAQEBAQL/AQAB/wH+AQICAAD/AQEAAAIAAQH/AAD+/v/s7wDi5vvg4vre4fvp6AEAAAAA/wAAAQAAAP8AAAEAAP8AAAEAAP8AAAEAAAEAASAeH0NDQkpMSkNFRAwLDAECAAD/AP8A/wEBAf8AAQEA//8AAAAAAQAA/wD/AAAAAAEBAP//AQAB/wAAAAD/AP8BAAD+/wECAf///wEBAf//AAEBAAD/AAAAAAAAAAAB///+AQEB/wAAAAAAAQD/AQAB/gABAf///wEAAv8A/wEBAAD/AAAAAAABAP//AAEAAP//AAH+/v4AAP8BAAH+AAAAAAAAAQEB//8AAAAAAAD/AAAAAP8AAAAAAAABAAH/AQAAAAABAAAA/wAAAAEAAP8AAP//AAEB/wAAAQD/AP8A/wIBAP8AAv8A/wH/AQAB/wAAAAAAAP8AAAL/AP4B/wH/AAAAAf8BAAH///8AAAL/Af8CAAAA/wAAAAAAAQAAAP8A/wAAAAIAAf8AAQD+//8CAAH/AAAAAP8B/wH/AQAAAAACAAD/AAD/AP8BAAEAAP//AAEA//8AAQEBAP8AAAD/AAEAAAABAP8AAAH/AAAAAAABAAAA////AQEAAAEAAP4B/wAAAgAA/wAAAAEAAP//AAEBAQD//gAAAQAAAAAA/wABAQAA/wD/Af8B/wAAAQEA/wD/Af8BAAEBAAD/AP8AAAAAAAIBAQD///4AAAEA/wAAAQEAAP//AAACAAD+AAAAAP8CAAH/Af8AAAAAAAIA/v7/AAEAAP8BAQEBAQH+/v8AAQAAAAAA//8BAQL/AP8BAAAAAAEAAP4AAQH///8B/wD/AQEBAP8AAAEAAP///wAAAAABAAEAAf8AAAAAAAD/AAEBAAEA//4AAQEAAP8AAAEAAP//AAEA/wEAAf8AAAAAAP8BAAEAAP/+AAABAAEAAAABAQAA/wAAAf8A/wD/AAEAAP8BAAEAAQD//wABAAD/AAAA/wAAAf8B/wEBAf/+/wAAAgEB/gAAAQD//wAAAQACAQD//wEAAP8AAQAAAAD///8CAAEAAP///wEBAQD/AP8AAAAAAAH/AAABAP8AAAH/AQABAAD/AP8B/wEAAAAAAf8A/wEA/wAAAQAAAAAAAAD//wABAgAA/gH/Av8B/wAAAAAAAAEAAP8AAQAA/wD/AQEBAAAA//8AAQD//wEBAf8A/wAAAAAAAAAAAAAAAAEAAP4AAAEAAQAA/wAAAAAAAAAAAAAAAAAAAAAAAQEA/wABAAD/Af8A//8AAAAAAQEAAAAAAAEA//0AAAIAAAAAAAAAAQH///8B/wAAAgEAAAAA/wABAAD/AP8BAAD/AAD/AQAB/wAAAQEBAP8AAAD//wAAAAABAAC1s7VmaWrn5uT/AAAAAAEAAAAAAAAAAP8AAAAAFQkAMRUALBQAEQQADwUA/wAA/wAA/gAAAQEA/wAAAAAAAP8A/wEA8/wA7voA5/cA5/cB3fEA6vX//f8AAAAAAQEBAQD///0A/wEAAP8AAgAGBARZWFd/gYEgIB8A/wABAAD/AP8BAQEAAP8AAAAAAAH/AAAAAAAB//8AAQD/AAEAAADr6ulFREjS09IAAAAAAAEAAP8AAAEAIhQAZDoABgIA/gAAAAAA//8A7vYAttYA0+UAAAEBAAD/AP8BAP8AAABTBQdwBQonAgT8/v8AAgL/Af///wH+AQH/AAD/AAAAAAD//wH/AAL/AQL5AQT8AQb7AQT+AAD7AQP6AgL/AAL/AAH/AAEBAAH+AAL+AAL/AQD/AQQAAQH+AAH+AAABAAH+/wEBAAIBAQEAAAD//wDxAPzZ+/Hd+/Pb/PHa+fLvAPkAAP8AAAAAAAAAAAEAAP8AAAAAAQAAGxQAIxoAHxkBHxsADgwBAQH//gH/AwAA/wIAAAEBAQD/AAEAAAAA/wAAAgEB/gABAwH//gABAQEB/wEAAQAAAQD//wEBAQD+/wEAAP8BAAEBAAH///8BAgAA/wH+AAAB/wEBAgAAAAAA/wEAAAAAAAAAAQEB/wECAAABAAABAAH/AAEBAAAC/wEBAQEBAQAA/wECAf8AAAEB/gEBAP8BAAECAQIB/wABAQEA+fv94+f83N363+L43dwA/vwAAAEBAAD/AAAAAAEAAP8BAAAAAAEAAP8AAAACAQAwMTFNTExKSUovMS8GBgYAAAAAAAAAAQD/AAAAAAEBAP8AAP///wEAAAAAAQAA/wAAAP8BAAH/AAEAAP8AAP//AQEC/wD+AAABAQAA/v8AAQEAAAAAAAAAAAAAAAAA/wAAAQAAAAEAAP8A//8AAQIAAAABAAD/Af8A/wH/AP8AAAAAAP8BAAAAAQIB/v7+AP//AAEB/wAAAQABAAAAAP//AAH/AAABAAAAAAEA/wABAv7//wL/AAAB////AQABAAAA/wAAAQABAQH///8A/wABAAD/AQAAAAAAAf8A/wAAAAAAAAEAAAAA//8AAQAAAQH//gEBAQABAAAAAAD/AAAA//4AAAEAAAABAP//AQIAAP8BAAD/AAAA/wD/AAABAQABAAD+AAEB//4AAAEAAP8AAAAAAAEAAAD/AP8BAQH//wABAAAAAQAAAAD/AAAB//8AAAEBAQAAAAH//////wABAAABAf/+AAABAAAAAQL/AP8B//8AAgIB//7/AAEAAQAA//8AAAEAAP8A/wD/AQEBAAEAAP8A//8AAQEAAAD///8AAAEBAAD/AQAAAAAAAAAAAP8BAAH/AAAA/wAAAgAB/wD/AAACAAAAAAEA////AQAAAQD//gAAAQEB//4AAAEAAQD//gABAQH/AP8BAQAA/wD/AAABAAD/AP8AAAEAAQABAAAAAAAA/wAAAQAAAAAAAAD//wAAAP8AAAAAAAEAAAECAP//AAD/AP8AAAAAAAIBAP//AAABAAD/AQAA/wAB//8AAgEAAAAAAQAA/v8BAAD/AQIAAP///wAAAAAB/wAAAf8AAQD/AAEA//8AAQEAAAABAP8AAAH///8AAQEAAAAA/wACAQH/AP8AAAAAAAAAAAAAAAAAAAD//wACAQD/AAAA/wABAQD/AP8B/wH/AQEA/gD/Af4BAQAAAAH///8AAQAB/wEBAAD/AAEAAf8BAQH//v//AQAAAAAAAAAAAAEAAAAA//8BAQAB/wD/AQAAAAAAAAEAAAAAAf8A/wAA/wAAAAAAAQABAAD/AQAA/v8BAQH//wAAAQAAAAEA//8AAQEAAP8AAP8AAAEAAAABAAD/AAEAAP8AAP//AAEBAAEA////AQABAAAAAAAAAQEA//8AAAABAAH/Af8A/v8AAQEBAQAA/wH/AQAA/wAAAP8AAAAA/wAAAQABAAD/AAAB/wD/AQEAAP8AAQEA//8AAAAAAAEBAP///wEAAgD/AAAC/wAAAQD/AAAB/wAAAQD/AP8Ay8rK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//8CAAEAAAEBAAEAAQABAAEA/wECAAAAAgEBAAICAAAAAQEDAQD65ef2z9L30tP65+QBAAD/AAAAAAAAAAAAAAEAAP8AAAMAAP4AAAACAAElJSNLTExWVVU3ODf/AQAAAAAA/wAAAQAA/wEAAAABAP//AAAAAQABAAD//wEAAf8AAAD//wABAAABAQH+//8CAAD+AP8BAAEAAAEAAP//AAEAAAABAAAAAAAA//4AAgEAAAH/AP8BAAAA//8AAQH//wABAP8B/v7+/wD/AAABAAD/AgAA/gAAAQAAAAEBAAAB////AQEA/wAAAf7//wEBAQAAAAH///8BAQAAAAAAAAEA//8AAAAAAP8AAQIA////AQABAAAA/wAAAQD/AP8AAAEAAAAB/wD/AAABAQAA/wD+AAACAAABAAD/Af8A/wAAAQEAAP8A/wIAAf4A/gH/AQAAAAAAAAAAAAAB/wAAAQAAAAAAAQEAAP8A/wAAAP8AAAEAAAAAAQAA/wAAAAAAAQAA//8AAAEAAAAAAQAA/wD/AQAC////AAEBAP//AQEA/gAAAf//AQEBAP8A/wEAAAD/Af8BAAH/AAEAAAD/Af4BAAEB/gAAAQEAAP//AP8BAAEAAAABAP//AAIA//8AAQD//wABAAAAAP//AQEA/wABAQD/AAAB/wAAAQH///4AAQEAAP8AAAAAAAEBAAAA/wAAAAD/AAEAAQAB////Af8B/wEAAQH///8BAAAAAAAAAAAAAAEBAP8AAf///wEAAAAAAQAAAAAAAAEA/wAAAP8AAP//AAEBAAD/AP8BAQEA/wEBAP/+AAAB/wD/AQABAAD/AAABAP8BAQEA/wD/AQAA/wAAAQAA/wAAAQEAAP8AAAAA/wD/AP8BAQEA////AAABAQEA////AAEBAAAAAAAAAQH///8AAQAAAAABAAEAAP8A/wAAAf8AAAEBAAD/AAAAAQD//gECAQD/Af///wEBAf8A/gEAAP8AAQAAAAAAAAAAAP//AAEA/wABAQAA/wAAAQAA/wABAQD//wABAQH/AP4AAQEA/wAAAAEA//8AAAAAAQAAAP8AAAAA/wEAAQAAAAAA/wEAAf//AQEB//8B/wD/AAEAAQAAAP8A/wAAAQAAAAH/AP8B/wAAAAAAAQAAAAD/AAAAAQAB/wAAAAD//wAAAQAB/wAAAQAAAAEB/v//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AAD/AP8ADQsAJR0AKSQAKCMCDQ8AAAABAAD/AQEBAQIBAQECAQABAAAC/gEDAgED/gIBAAEBAf///wADAAADAAMB/wEBAAAAAP8B/wEBAgEA/gABAgAA/wEAAQAAAAABAAH+/gACAgEA/wD/AAEBAQAA/wAAAP8AAAEAAgEAAQEB/wD/AAECAQH//wABAAEAAQAAAAD/AQEBAAEBAQAAAQIAAAECAAAAAgIA8PD009TzzM7429kA/fwAAAAAAAAAAAEBAP7/AAEAAAAAAP8AAAAODQ9iYWBvcW8fICAA//8AAAEAAAABAQD/AP8A/wEAAP8AAAH/AP8CAQH///4BAQD+/wEBAQH///8CAAD/AQD/AAAB/wAAAP//AAABAQEA/wD/AAAAAQAA/wAA/wAAAP8BAQIB/P3+AQEAAQD/AAABAAAA/wAAAQEA//8AAQAB/wEAAQD/AAAAAP8BAAD/AAAAAAAAAAEAAAAB/v//AgAAAAD/AAABAAABAAD/AAAAAAAAAP8AAAEA//8AAAH/AP8AAAEAAQAB//8AAQEA/wAAAAABAAD/AQAAAAD/AP8CAAH/AAEBAP7//wEAAAAAAQAA/wABAP//AQH//wABAAAAAAD/AQAB/wAAAQD/AP8BAAIA//8AAQAAAAEA/wAAAf//AAAAAAEB//8AAQD/AAABAP8A/wD//wEBAQEAAf8A/wEAAP8AAAAAAAAAAAAAAP8AAQEAAAD/AAAB/wAAAAAAAAABAAD+AP8AAQAA/wABAQEAAAAAAAAAAAD/AAACAP//AAIB///+Af8BAAEAAAAA/wAAAAD/AP8AAQABAAD//wAAAQIBAP7//wEAAQAAAAAA//8A/wEBAQABAAD/AAAAAQD/AAABAAH///8BAAD/AQAB//8AAAH/AQABAAAA/wD/AgAB/wABAAD/AP8A/wEAAAAAAQD/AAAAAAAAAAAA/wAAAf8BAQEA/gAAAAAAAAAAAQAAAAAAAf///wEB/wAAAQAAAQD//wAAAP8B/wH/AQAB/wAAAgAA/wAA/wAAAAAAAP8AAAH/AQABAP8AAAH/AAAAAAAAAAAA/wAAAQEA//8AAAABAQD/AQAB/wAAAAAB///+AAEBAgAA/gAAAQD/AAEBAP8AAQAA/wAAAAD/AAABAP8A/wH/AQABAAAAAAAAAAEAAP4AAAD//wEBAAAAAAAAAAABAAD/AAAAAQAA//8AAAEAAgEA/v8AAQAAAQEB////AAAAAAAAAAAAAAEAAAAB////AgABAAAA/gD+AAABAQEAAP4AAAEAAQAA/gEBAP8AAQD/AAABAAH///8AAAEAAf8AAQAB/wH/AP8BAAEAAP//AAAAAAABAAD/AAEAAP8AAAEAAP8AAQEA//8B/wD/AQABAAEAAAD/AP8BAAD+AAABAQEA/wABAAD///8AAAAAAAAAAQABAQH//gAAAP8BAQEAAAAAAAAAAf///gAAAQAAAQEBAAAA/gD/Af8AAAEBAf7/AAIB///+AQAAAAABAAD//wAAAQECAAD///8AAAAA/v7/AwMBAAAAAAAB7/Du8fDxsrK0hYWH6uroAAABAAABAQD+dGT/iosF/wIDAAICAAEBAAH/AQL+//38WVwCqrYM//r/AAABAgEEampjjY6BBQYFAQD/AAAAAP8AAAEAAP8AAAEBAAAAAAD/AP8B/wAAAQH/AP8AAAEB//8AAAEAAP8A1dbUSkhL4+TkAAAAAAAAAAAAAAD/AC8eAFMxAAMAAP8AAAAAAAABAAAAAP//AP8AAP8AAAAAAPT5AMPeAM3gAPv8AAAAAAD/AAABAAAAAAAAKgQFbQcJRAIDBwED/QAAAQEB/wEB//7/AAEA/gEC//8A/AEG9wMJ9gIM+gEE/wED/wED/wAA/gAC/wABAAABAAAB/wAB/wAAAAECAAAB/gAAAAEC//8AAQAA/wAB/wABAQABAAEB//8AAAABAAABAQD//gABAQEA/wACAAAB/wABAAEAAAAAAQAA//8BAQEA/wAAAAAB4/301Prr0ffo2Pjs8P/4AAD/AAAAAAACAAD/AQH//wwKACQgACkkASMfAhMRAQIDAAD/AQEBAAEBAgEBA/4BAv8AAwABAf8BAgECAgAAAQAAAwACAAIAAf4BAP//AAEAAQACAf8AAgEBAP///wEBAQAB/wAAAQEBAAEAAP4AAAEBAP8AAQEAAAABAQEB//8AAQEA//8BAAEAAgAB/wEAAAABAQEA/wAC/wAAAAAAAQEAAQECAQAAAAEBAQABAQEAAv8A9dfZ88TD9NXV//f1AAABAAAAAAD/AAAAAAAAAAABAAD/AQACISEhamppaWpoCQkJAQEA//8BAAH/AP8AAAEAAAAAAP8AAAAA/wD/AQAA/wAAAQABAQEA////AAEBAQAA////AAABAP8AAAAAAAEA//8AAAEAAAABAP/+AQEB/wAAAf39/wEC/wD/AP8AAQEBAAAA///+AAAB/wABAAAAAQIAAP//AAD/AP8BAAEAAAAAAQAAAP8B/gD/AQAAAAL/AP8BAAD/Af4B/gIAAQAAAAAAAAAAAf8A/wEA//8AAQAAAAAAAAAAAAH/AAACAQD+/wAB/wAAAv8AAAEA//8AAAEAAQD+/v8CAQEAAP8AAQD//wEC/wD/Af8A//8AAQEAAAEAAAAAAP8AAAEAAAABAP//AAIAAP8AAAABAAD/AAAAAP8AAAEAAQD//v8AAQAA/wAAAQABAP///wIBAP//AAECAf/+AAECAP/+/wAAAQEBAAEAAP8BAP//AAEAAAD/AAEB////Af8BAAEA//8AAAEAAQD//wABAP8AAAEAAAD/AAAAAQABAAAAAP8AAAEB/wD/Av///wEB/wAAAAD/AQABAAAB////AAEAAQAAAAAAAP8AAAABAAAAAAAAAAL/AP///wABAf///wAAAAEBAf8AAAEAAAABAAD//wAAAQABAAD/AAAAAf///wEAAAABAAH/AP8BAAAA//8AAQAAAAEAAQAB//8AAAH///8AAAH/Af8BAAEAAAAAAP//AAAB/wAAAAD/AAABAAEAAQAAAAAAAAAAAQAA/wAA////AAABAAAAAAH/AAABAQD+AP4C/wH/AQEBAAAAAAEB////AAAAAAAAAAD/Af8AAAEBAP8AAQH//wAA//4CAQH//wEAAQAA/wAAAQEBAP//AAAAAAAAAQAA//8AAAEAAAAAAAABAAAAAAD/AAAAAf8A/wEAAQAA/wABAP8AAAD/AAAAAAEAAAD/AAABAP8AAAH/AP8B/wEAAf8BAAD/AAAA/wAAAQEAAP//AAEBAf///wECAAD///4BAQL/AP//AAEBAP8A/wH/AQABAAEAAP8BAAAAAQAAAAD//wABAQAA/wD/AP8AAAAAAQEB/wD/AAABAP8A/wEAAQAAAAH/Af8B/wD/AP8BAAH/AAABAAD/AAABAAAAAAD/AAABAAD/AAAAAAAA/wAAAAAAAQEAAf8AAAEAAP//AAAB/wD//wABAgAA/wEAAAABAAAAAAD/Af8BAAEA//8A/wD/AgAAAAEAAP8BAAD//wABAAEAAAD/AAABAQAAAP8AAAEA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AAAAAAAAAQED/wH/AAD/AAECAAABAP8AAQIAAP8CAAEAAAEAAf8BAQIAAf8B/Ovq8sPF8cC//PXyAAACAAAAAAD/AAAAAAAAAAABAAAAa2tojIuMCAkIAAAB/v//AQD/AP8BAAEAAP8A/wL/Af8AAAABAAAA/wAAAAAAAQAAAAAAAAAAAAAA/wABAQD//wAAAgEA//8AAAAA/wEAAf39/QEBAgEB////AP8BAP///wMBAf//AAAAAAABAQAA/wAAAAD+/wABAQAAAAD/AP8BAAEBAf/+/wEAAP8BAQEA////Af8B/wIA//8AAQEAAAAAAP8BAAEAAQD+/wAB//8AAgD//gAAAAEAAAAAAgAB/gAAAgAAAAAA/wAAAP//AAABAAH/AAAAAAABAAAAAQAA//8AAAD/AP8BAAEAAAABAAH+AAECAf///wABAAD///8AAQAA/wAAAQEAAAD/AAABAAAA////AP8BAQH/AAAAAAAAAAABAAAA/wEAAf8AAQEA////AAAA/wAAAAAAAAEAAAAAAv8B/wH//wABAP8AAQEAAQAA/wAAAP8AAAEAAAD/AAABAP8A/wH/Af8AAAEB//8AAgEA//8A/wEAAQAAAAAAAAAAAAAA/wAAAf8BAAEA////AQEAAP8A/wAAAAAAAQEAAP8A/wAAAAEBAf//AAIB////AAD/AQACAP///wD/AAABAAH/AQABAAD//wABAQAAAAAAAAABAAAAAAD/AAAAAAABAf/+/gABAQEAAAAAAAAAAQAA/wD/AAAB/wD/Af8A/wEBAQEAAP8B////AAEA/wAAAf//AAEBAP8AAAEAAQAA//8BAAD/AQAAAAD/AAEBAP8AAAD//wEBAAAAAf8AAAEB///+AAABAQEBAAD/AP8AAQABAAD+/gEBAgAA/wD/AP8BAAEAAP8AAAAAAAEAAf8A/wEAAAAAAP//AAABAAAAAAEAAAAAAAABAP/+/wEAAAABAQAAAP4A/wEAAAAAAAEAAf8AAAEAAAABAP8AAAH/AP//AAABAAEA//8AAAAAAAEAAQAAAP8AAQH/AAAB/wAA////AQABAAEAAAAA//8AAQAAAAAAAAEAAAABAf8A/wIAAf////8AAAAAAAEBAAD/Af8AAAAAAAEA/wEBAP7+AAEBAAAAAAEBAP////8BAQD//wAAAQEBAAAAAQD//wAA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AQAB/wH9/f0BAQEAAP8AAAIAAf8AAP8B/wH//wAAAAAAAQAA/wD/AQAAAP8BAAAAAQEAAAEA////AAAB/wAAAf//AAEAAAABAAD//wAAAf8AAAEBAP8AAQEA/wAAAAAAAQAB////AAL///8AAQAB/wAAAQAA/wD/AQABAAD/AAAAAAAAAP8A/wEAAAAAAQAA//8AAAEBAf8AAAEAAAD/AP8BAAIAAP8AAAD///8BAQEAAAAAAAD/AAABAAAA//7/AAIBAf//AAEBAAD/AAABAQH///4A/wD/AQEB/wABAQD/AP8BAAH/AAAAAAABAAD//wAAAP8BAQH/AAEB///+Af8CAAH//wABAQAAAAD/AAABAAH///4BAQAAAAH/AAABAP8AAAEA/wABAQD//wH/Af4AAAABAAH/AAEA//8AAQAB///+AAACAQH//wEAAP8BAQD//wACAf/+AAEB/wD/AQABAAD/AQAB/wAAAP8A/wH/Af8AAAEAAP8BAAAAAAAA/wIAAf8AAAEA//8AAQD/AP8AAAACAAEAAQD+/wAA//8BAQAAAAEAAAAAAP///wEBAv8A/wH/AAABAP8BAAD//wEBAAAAAP/+AAEAAQABAQH///8AAAABAAAAAAAAAAAAAP8A/wD/AQEA//8AAQEA//8BAAAAAQEAAP8A/wABAAH/AP//AgAA/gEBAQH//wAAAP8BAQD///8AAP8AAAIAAQAB/wH/AQAAAP8BAAD/AAABAAD/AQAB/wAAAP//AAEBAf8A/wD/AAAAAQEB//8AAQEAAAAAAAD/AAAB//8AAAEAAQEBAAD+AP8B/v8AAQAAAAEAAAAAAP/+AAEBAAEBAQD///8B//8AAgEA/gD/AQAAAAAA/wABAQABAAD+AAEBAAD/AP8BAAAAAQAB/wD/AP8AAAEAAAD/AAEBAP8AAAD//wAAAQEBAf8A/wAAAAEAAP8AAQD//wABAQAA/wAAAQD//wAAAAABAAAAAQEA/wD/Af4BAAEB/wH+AP4AAAEAAAABAQD//wAAAAABAAEBAP//AQD//wABAAAAAAD/AAABAAH/AP8AAP8BAAIAAf8AAAAA/wAAAQEAAP8BAAH/AP8AAP8AAAEBAAH/AAAB//7/AAIAAP8AAAAAAQEB//8AAQEA//8AAQH///8AAQEA/wAAAAABAQBydXmQjIoAAAD/AP4ZFALHwAMdHwEBAQEAAf8BAP//AP7EzAB+ohXf4hn28wv8+AgAAAL37/D44dwVFRLP0MMZGhgAAAABAAAA/wAAAf8AAAABAAH/AP8BAAAAAAEAAP8AAAAA/wAAAAEAAQD/AAABAAAAAADw8PBbXF63tbX/AAAAAAAAAAAAAAAABAIASS0ANSAA//4AAAAAAAAA//8AAAAAAAAAAQAAAAAAAAAA//8A/wEAAAAAAP8AAAEA//4A//8A3e0AyuIA3OgAAAAAAAEAAAAAAAAAAAAAAP8PAQJZBQlZBgcpAwb+AP0AAQQA/wAAAAAC//8BAAL/AAD2AAfwBAzvCBD2BAwAAwL//wEAAQD/AQH/AAEAAQIB/gAAAQAAAQH//wEAAQEBAf8A/wEAAQH//wEAAQAA/wEAAAABAQD//gABAQAA/wEAAQIA/wAAAQEA/v8AAQAA/wAAAQEAAAABAAH+AAABAAL/AAABAAAAAQAA/wAAAgEB/wEAAQD///8AAgIAAP8B/gHz//nT9ufF9uPU+ejt+vMAAAAAAAAAAQAAAAAACQoAIyIDLCsIJiMHFBQBAP8BAAMCAP8CAAICAQEBAAACAAEAAQEB//8AAQEBAAEBAQEAAQABAAEAAAEAAQAA/wABAQEAAQEAAAD/AAABAQEA/wAAAgIAAAD/AAABAQD//wAAAAICAgD/AAEBAAD/AgECAAEAAAEAAQEBAAAAAQIA/wECAQABBAMBAgME/QMAz8/gop7z6uQAAAEAAABqa2uVlJIA////AQD//wABAQAA/wAAAQAA/gD/AQAAAQABAAD///8BAAH//wACAQD/AAH/AP8AAAACAAD/AQD/AAAA/wAB/f39AQEB/wD/AQABAAEAAP8A/wABAgD//gAAAQAAAP8BAAEAAAD+/wABAAAAAQAAAAAAAAAAAAAAAAAA/wAAAQAAAAAB/wD/AQAA//8AAAAAAAEAAQD/AAAB/wD/Af8BAAEAAAAA/v8AAQEAAQABAAD/AAABAAEAAf//////AAAAAAIBAP8A//8AAQEA/v//AgEBAAAA/wAAAP8AAQEA/wD/AQABAAAAAAEAAP8AAAD//wEAAf8B/wD/Af8AAAEB////AAECAAAAAAAAAf8A/wH+AAAAAQAC/wD/AP//AAEAAQABAAAAAAAA/wAAAv8A/gEAAAAAAf8AAAEAAAAA/wD/AQAAAP4BAQL//gAAAAABAQD/AP8BAAIAAP8AAAAAAAD/AAAAAP8BAAH//wAAAP8AAAAAAQEBAAAA/wAAAQD//wAAAQAB/wAAAP8AAQEAAAD/AAAC////AQEBAQH///8AAAD/AAABAAH///8AAQAAAAABAP8AAAAA/wEAAQEAAP8AAAAA/wD/AgEB/v8AAAAAAf//AQIA//4BAQEA/wAAAP8AAAH//wABAQD//wAAAP8BAAH/AQABAAAAAP8AAQD//wEA/wAAAAABAAD/AAABAAAAAP8B/wH+Af8BAQEAAAD/AAAA//8BAAEAAQAAAAAAAAD//wAAAQAAAAAAAAAAAAAB/wD/AQABAP8A/wH/AQEA/wAAAP8BAf8AAAD//wAAAQABAAABAAD/AAEB////AAH/AQAB////AAAAAQEBAP///wEAAAABAQH/Af8B/wEAAP8AAAEAAP8AAAAAAAAAAAH/AP8BAQAA/wAA/wD/AAABAP8AAAD/AQEBAAAA/wAAAQAA/wH/Af4B/wEAAAAAAQAAAAAAAAEAAP8BAQD//wEAAP8AAAAAAAAAAAAAAAAAAQAA/wEBAP8AAAD+/gACAgD/AAEBAP8AAAD/AAEAAQAAAAAAAAAAAP8A//8AAAEAAP4A/wIB/wAAAQD/AQABAAH///8AAAAAAQAAAAEBAP//AAAA/wABAQD+AAEBAQAA//8AAAAAAAAAAAAAAAABAAAAAAEAAQD//wAAAf///wABAAAAAAEBAQD//wAAAQAA/wABAQAA///+AAABAAEAAQAB/wAAAAAAAQD/AP8AAAH/AP8CAAEA/wAAAAAAAAAAzc3QRUNF8PHtAAAAAAAAfncBgX4DAP4C/wD+AAIAAAD/5Or+hJ4PxdAT+voG8Of8+fsO+wES+OLb//Tnzc7HMTEvAP8AAQEBAP8AAAH/AAAA//8BAAH/AQABAAAAAAAAAAD/AP//AAECAP8AAAEA/wAAAAAAAP//2tvbUlBT2NfX/gD/AQAAAAAAAQAA/gYCAEcsADUgAAD/AAD/AP4AAAEAAAAAAP8AAP//AAEAAAABAP8AAAAAAAD/AAEBAP8AAAAAAAABAPz9AN3sAMrgAN7qAQAB/wD/AAAAAQAA/wAAAAAAEwIDVwYJVwQKKAQDAAABAv8A/wEBAf4AAgAA/v//AQAB9wMH7gUP7AYR+AQJAAIC/QECAQAA/wEBAQEA//8BAQEBAf8AAAAA/wIB//8AAAAAAQAC//8AAAEAAQEB/wD/AgAC////AAEBAP4AAAABAQEB/wAAAP8AAAABAAAAAQACAAEAAf8A/gAAAAAAAQEBAAABAAABAAD/AAIBAAAA//8BAgEBAAAA/wAAAAEAAP////7/6P3ywvbiz/To2vjr+v75AP//AQMB//7/AP8AAA8PATc0CTIwCBsbAgAAAQECAf8BAwIBAP8AAwABAgEB/wEBAAEAAQAAAQABAAEAAQABAQAA/gEBAgAAAAABAAEBAAEBAQD/AQAB/gEAAQABAQACAAIB//7//wEAAgEB/v8BAQD/AQIBAAACAQAAAQIC/wD/AAEB++7v/Onr/OPm+OLe+Nzb+enlAP7+AP8AAAABAAAAKSkrxcfCEA8RAf///gAAAQABAAAAAAAA/wH/AP8AAgAB/wD/AAAB/wD+AQAB/wEAAAAAAAAAAf8BAAEA//8AAQD/AAAAABaE6XsB/f79AAAAAQEBAP8A//8AAAEAAf8BAQL///8AAAABAAEAAP8AAQD///8AAAEAAAEAAP8BAAH/AP4AAAEAAAAAAAABAAD//wABAP/+AQEB/wD/AQABAP4A/wMAAP7/AQEB//8AAQEAAAAA//8AAQH/AP8AAAEBAAAA//8AAAIAAP8AAAAAAf8A/wH/AAABAP//AAEBAf8AAAEA/wAA/wD/AgAC///+AQEB/wABAAD+AQABAAAAAAEAAP8AAP//AAEA//8BAQEAAAAAAP8AAAEA/wAAAAD/AP8AAQEB/wAAAAAAAAABAAD/Af8A/wABAQH//wAAAAAAAQAA//8AAAAAAgEA/gAA/wD/AQEAAgAA/v4AAAEBAP8AAgEB/wEA////AAAAAQH///8BAQD/AAAAAAEAAP8A/wABAQEAAP///wABAAAAAQAAAAAA/wAAAf8AAAAB/wH/AP//AQEBAP8AAAEA/wAAAQAA/wAAAP//AAIBAP7/AAEAAQEB//4AAQH/AP8BAAL///4BAQL///8AAQAAAAAAAP8BAAEAAAAA/wEA//4AAwEA/wAA/wD/AAABAAAAAf8A/wEAAP//AAEAAAABAgAA/gD/AAAAAgAA/wD/AAACAP//AAECAP8A/wD9AQABAAAA/wAAAQIA//8BAP8AAQEAAAAAAAAA/v//AgEBAAEAAP8A///+AQICAP8AAAAAAAD+/wABAQABAAABAAD+/wAAAAABAAAAAQAAAAEA////AAAAAQAAAQEB//8AAAAAAAAA/wEAAP8BAQD///8AAQEAAAEA//8AAgEB////AAAA/wAAAAAAAQEA//8AAQAAAAD///8AAQEBAAEAAP8AAAABAP///wEAAQD/AQEBAAAB//8A/wH/Av8A/gAAAf8AAAEAAAEA/wD/AP8BAQAAAAEAAP8AAAEA//8AAQD//wABAQAAAAAAAP8BAAEAAAD/AAEAAP8B/wD/AQEA//8AAgEB/v//AQAAAAAB////AgEB/wEAAP8AAAD/AAAAAAAAAAAA/wEAAAD/AAABAQAA//8BAQD/AAABAAD//wEAAf8B/wD/AQAAAAEBAAD/Af8B/gEAAgAA/wAAAAAAAQD//wAAAf8B/wD/AQEA/wAAAf8B/wD/AQEA//8BAQEAAP8A/wAAAAD/AAEBAQAA/wD//P3+UE5VtraxAAD/AAD/FhEDzMcEGxv+AAAAAAMAAP7/+/3/l6kJoLkW+vsF6NHb+vsMBRk59uXp+ujSoqOjXFtYAAECAP//AQEB/wD/AQABAAAAAAAAAP//AAEB/wAAAP8AAQH//wABAQD///8BAQEAAAAA////AQAA09PSWlpd1dXVAAAAAQAA/wAAAAABAAQC/0kqADUgAP//AAABAAD/AAAAAP//AAEBAP8AAAD/AAEAAP8BAP8AAAAAAAAAAAIBAP8AAAH/AP4BAPv8ANfpAMrgAOXtAAABAAAAAAAAAAAAAAD/AQADGQMCUgUJUwYKLgAD/wABAQEA/gACAf7+AAEAAAADAf8B9wEF8AQM7wgO8QcN/QIEAQABAAEAAAAB/wAAAgAC/wAAAQEBAAAA/wAB/wABAQD/AAEAAf8BAAABAAH/AP8AAQEB//8BAQD//wABAP8CAAAAAAABAQEAAP8BAAIAAP4AAQEA//8BAQAAAAEB////AAEAAAABAAABAAEAAAAAAQEB/wABAf8B///+AAEAAQEAAgD/+wQD1/rsyvHhy/Pi4vftAAEAAAAAAAAAAAIAAQYI/yYnBTEwCiooBQkKAgAAAgECAAD/AgEBAAEBAQABAgD/AQAAAAABAAEAAAECAQAAAQACAAEAAQEB/wAAAQAAAAEBAAEBAQAB/wEAAQACAQAA/wAAAAD//wAB//7+++7v/e/v+uzs++3t/evt/enp++fj/vT0AAAAAAD/AAAAAAAAAAECAAD/AP8AAAABGxod0dLMExMT////Af8B/wEAAAAAAAEAAAD/AAABAf8AAAAA//8AAAIAAAAAAAAB//8AAAH+AP8CAAD//wABAgAAAAH/BAH/AP8CAQD/AAAAAAEA//8AAgAB/v7/AQEAAP8A/wL/AP8AAP8BAAEA//8BAv8A/wEA/gD+Af8C/wEAAP//AAH/AAACAAH//wABAQD/AAABAf8AAAACAAH/AP8AAf8AAAACAAD/AP//AAABAP8AAQEB//8AAAEAAAABAAD/AAD+AAABAP8BAAEAAv8A/wAAAQAAAP8AAAD//wACAAL/AgAA/wECAP///wD/AAAAAP8B////AQIAAf8A/wIBAf8B/wEAAP8AAQAA/wACAQD/AAEAAP//AAEBAP//AAAA/wEAAQAB//////8BAQEB////AAEAAP///wAAAQAB/wD/Af4A/wH/AAAAAAEAAf8AAAAB/wEA/wABAv8A///+/wICAf7+AP8AAQAAAP7/AAEBAAEAAAAAAgAA/////wD/AQEB/wAAAf8AAQAA/wEAAP8BAAH//wAAAQEBAP8AAAEAAP8AAAEAAAABAAH/Af8B/wD/AAEBAP8AAP//AAEAAP8AAQEBAAD/AAAB/wAAAQEA/wEAAP8AAAABAP//AAEA/wAAAQIBAP7//wEAAAEAAAAA/v8BAQACAQH/AAEAAP8AAgAAAP4A/gEAAf////8AAAAAAQAC/wAAAP8A/wAAAAACAgD/AP8AAAEAAAD+AAACAAH/AAAAAAAA/wD/AAEBAAD/AAAAAf8A/gAAAv//AAEBAAEAAP//AQAAAQAAAP///gEBAQEA/wAAAP8A/wABAP///wEAAf8AAQAAAP///wAAAQAAAAD/AAEAAQAB////AAEBAAD/////AAIBAv///gAAAAEAAQEA//4AAf///wEBAQAAAAD/AQECAAD/AP//AAH//wABAAABAAAAAP//AAABAAD+/wABAAD/Af4A/wEAAP8BAQAA/wH/AAEBAf8AAP8AAQEA/wABAP8AAAEA/wD/AAEBAAAA//8BAgAB/gEAAf//AAH+AAAB/wEAAf///wAAAP///wEAAQAB/wD/AAECAP///wD/AAD/AAABAP4AAAIA/wABAgEA/wAAAgD//gAAAQEA/wABAQAA//8AAQEAAAD//wEBAP8AAAD+/wACAAAA/wD/AP8BAAD/AAABAP//AAAAAP8BAP//AAAAAAH/Af8A/wABAf8A/wAA/wD/AP8BAAAAAQAAAAD///8BAQD/AAQDAzw/PLa2sQAAAQAAAOrv/6eqAXVxAQAB/gH+Av4A/gYD/isk/AvDAPnu+vr2Bfr3+wYP6ggD+/oA/tPT0/8AWAIAAAABAAAA/wEAAQAAAAAA////AQABAQAAAAEAAAAA/wD/AAEAAP8BAQABAAAAAP8AAAABAAAAASwuLqeppVxbYNPR0P8AAf8A/wAA/wH8/QC51gADAwAyHQD//wAAAAAAAQAB/wD//wABAQD/AQD/AAAA/wABAAD/AAABAQD+/wAAAAD/AQAC/wAGBAAuGwAmFwDL4QDM4QDy9AAAAQAAAQAAAP8B/+b9/ZT99Kj69VkFC1kGCiYCBQL///8BA/8AAQEA//8BAQkA/Qr78hP89u348u0JEvMGC/4DAgAAAQEAAP8BAP8A/wH/AP8BAQEA//8BAAH/AAAAAQACAAD+/wAA/wABAgAA/wACAAEAAAD+Af8B/wIAAv///wD/AAABAAH/Af8BAP8AAQIBAP8BAf//AQECAAEBAQD///8AAP8BAAEAAAABAQL/AAACAP//AAAAAQEAAf4B/wT9AC0FFi4TFVMRLNX35cz05crz4u/89wD9AP/4+ADR0fvU0vEaHAY0NAcpJgcXFwICA/8AAQD//wIBAP8AAAIAAAEAAP8AAAD//wACAQAA/gEAAgH//wIAAf8BAQD/AQAAAP4A/wD8/fzw8vzq6vvp6/zt7Pzm5/vs7Pzr6//79wAA/wAAAAAAAAEAAP8AAQAA/wAAAQAAAAAAAAAAAAD//gABAgEBAAEBAVdXVBIREgAAAAEAAf8AAAAAAAABAAD//wAAAQABAAAAAP4BAAABAAEAAAD/AAAB/wABAQH/AQAAAAEAAf4B////AAD/AQH+/v7/AAABAQAA//8AAAD/AAEBAP8A/wIAAf8A/wAAAQEA//8AAQAA/wD/AAEBAf8AAP8AAAEAAQH///4BAAAAAAH/AP8A/wEBAAAAAQEAAP8AAAD/AP8AAAEBAAD/AAAAAAABAAD/AAABAP8A/wEAAQD/AAEB/wAAAf///wABAAD/AQEBAP8A/wD/AQAA/wAAAQABAAD/AQAA//8B/wEAAgEA//8AAQD//gAAAQABAQH///4A/wEBAv///wAAAQAA/wEAAAEAAQD///8CAAD///8BAAAAAQH//wAAAAABAQD/AAEBAP//AQAB////AAEAAAABAQAA/wAAAAD/AAAAAAABAAEAAP//AQAB/wH/AP8AAP8BAAEAAAAAAAAAAQD//v8AAQEBAQD//wAAAP8BAAAAAAAA/wH/AQABAAAAAAD/AP8A/wIBAQAAAQAA//8A/wAAAQAAAAD/AAAB/wH/Af8BAAAAAAEAAP////8AAQAB/wH/AQAAAP8AAAABAAEAAAD//wABAgEA//////8BAAAAAQEAAAEAAf8A/wH/AP4BAAEA/wAAAAD/AAAAAP8AAQAA/wAAAQAAAAABAAEAAAAAAAD/AAAB/wD/AAAAAf4B/wEAAQAAAAIA//7/AgEB/wAAAP8AAAH//wABAf8AAAD/AAIAAP8A/wACAAD+AQABAP8BAAD/AAEAAQD+//8BAQEA/f8BAgD/AAABAAEAAP8AAAEAAAAAAAAAAAD/AAAAAAABAQAAAAAA////AAEBAAAAAAD/AP8BAAH/AAABAAAAAQAA/gAAAf8AAAD/AAABAAH/AAABAAD/AP8A/wIBAf8AAQD//wAAAP8BAQL//v8BAQD/AAAB/wH/Af8BAQD//wABAAH/AP8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQD/AAABAAAA//8AAAH+AAACAAAAAAH/AQAB//8A/wD/AAAAAf8BAAH/AAABAAABAQD+/wEAAf8B/wAAAAD/Af8B/wH/AQAB/wEAAP8AAAH/AP8AAAABAAH/AAABAP////8BAQH/AQABAAAAAAEA/v8AAf8BAQH+AAAB/wEAAf8AAAEAAP8A/wAAAAEAAf8A/gAAAAABAQD/AQH/AAAB/wABAAD/AAD/Af8B/wEBAQD/AAABAAD///8AAQEAAP8AAAEAAP/W1tg7OT7x8u8AAP8AAP83MQS9uAMJCf0BAgEBAAH+//vm7v5yjBPCvgPp1+0A/gAAAQEA/wEAAP45NzmqragcGhoAAQH/AP8BAAEAAP//AAAAAAAAAAEBAAAAAAAAAAD+AP4BAAIBAAD//wAAAf8AAAAB/wAAAQH/AAABAADLy8xXVljg4OECAAD/AP//AP8AAAH/CAMAUzMAJhYAAP8AAAAAAAAAAAAAAAAA//8AAAEAAQAA/wAA/wAAAP8AAQEAAAAA/wEAAQAAAAEAAP8AAAEAAAEA7vMAx98A0uQA+foAAAEAAAAAAQAA//8AAAAAAAEYAwRaBgtaBgoiAAQA/wH+AQIA/gIBAgIAAAL//wEA/wD6AQLsBgvsCRD2Bgv/AgIAAAEAAQEAAAEB/wD+AQABAAEAAAD/AAABAAEAAAABAAAAAAEAAAABAAD/AQEAAAAA/wEAAQABAAH//wAAAAABAAP/AP8BAAEB//8AAQL/AAEBAP//AQAAAAEA//8AAQEBAQAA/wEBAQH+AP8B/wEAAAEAAAH/Af8BAAEAAAAAAQEBAP8BAQAB/wDp/fPJ8+LP8+PU+ezy+/cAAAAAAAAAAAAACgoBLS0HLCwIHRwGExMBAgEBAAECAQAB/wH/AQAA/wAAAQEAAgEA/v7+9vX97/H/8/X67O797/H85+b76er/8e//9vQAAAAAAP8BAAAAAAD/AAAAAP8AAAAAAAABAAD/AAEAAP8AAAAAAAEAAP8AAAAAAAEAAP8lJSZOT01FREVCQkIEBQMAAAEBAAH/AAAA/wD/AP8BAAAAAP8BAQH/AAD//wABAQEAAP8A/wAAAQAA/wAA////AQEBAAH/AP8AAAABAAEB//3+/wIA//8BAQD//wEAAf8BAAD/AAAAAQAA/wAAAAAA/wAAAQD/AAECAP//AAAAAAAAAP8AAAEA/wAAAAD/AgAB///+/wIBAP8AAQABAAAAAAAA//8BAAD/AAEAAAH/AP8BAP8AAgEA/wAA//8AAAEAAAAAAAEAAQAA//7/AAEBAAAAAQAA/wABAP//AAEAAQAA////AQAB/wAAAQEAAAEAAP4AAAH//wABAQEAAP4A/wAAAQEAAAAAAAD/AAABAP///gABAQABAQD//wEAAAAAAP8AAQEA////AQEB////AAEBAAAAAAAAAQAA/wEAAP//AQAB/wD/AAAAAQAB//8AAQIAAP8AAP8AAAIAAAAAAP//AP8BAAIA//8AAAAAAQEAAP7//wICAP//AQD//wAAAAEAAgAB/gAAAf///gABAQEAAP4AAAH/AQABAAAAAAAAAAAA/wEAAf///wAAAQAB//8AAQEBAAD/////AQEBAAAA//8AAQEAAQAA////AAEBAAAAAAEAAAAAAP//AP4AAAIBAQEA////AP8BAAEAAAAAAP8AAAD/AAEAAAAA/wABAQAA/wAAAQD//wABAQABAAD///8AAQL///8AAf8B/wH/AP8A/wEBAQABAQD+AP8B/wAAAQEAAAAAAP///wAAAAEBAQAA/wD/AAABAAD/AQECAf/+/wAAAAEAAP8BAAAAAAAA/wD/AP8AAAEBAAAAAQAA/wAAAP//AQEA/wABAQAAAAEAAP8A/wAAAQEAAP8AAAEBAP//AAEA//8AAP8AAQEAAAEA//7/AQEAAQAB/wAA/wAAAQAA/wD+Af8C/wEBAf/+AAEBAAAA//8AAAEBAAD/AP8AAQAA/wEAAAABAQAAAAD//wAAAf8A/wEAAQAA//8AAAAAAAEAAf8AAAEAAAAAAAD/AAEB/wAAAf8AAAAAAAAB/wD/AAAAAQAA/wAAAAAAAAAAAQEAAP8A/wAAAAEBAQD/AAAAAAAAAP8A/wEAAP//AAABAQEAAP///wEBAf8A/gABAgAAAAH/AAAAAP8AAAEAAP8A/wEAAf8A/wAAAQAA/wH/Av8B//8AAAEAAAD/AQEB/v8BAQH/Af8A/wABAAD/AQEB////AQAB/wEAAP8AAAEAAAD/AAABAf8A/wEAAQAA/wD///8AAQAB/wD/AgEBTE5TtbOzAAD9AAAAAQECo5oEWVb8AAEA8O//xtD/0t0FpaUE1s/5AP7/AAAAAAABAAABAAD9AAACPD0+paWgHh0dAAD//wAAAAABAAAAAAAAAQAAAAD/AAAAAP8AAAEBAAAAAAAA/wAAAQD/AAABAAAAAAAAAAAAAAAA/v7/0NDQZGNn0dDNAAABAAAA/wD/AAAA/wsGAEsvACwYAP//AAAAAAAAAAAAAAAAAP//AAABAAEAAP//AAABAAABAAD/AAEAAP8BAAAAAAIBAP4AAAECAP8AAAAAAOfwANDkANHiAPj5AAABAAD/AAABAAD/AQAA/wABIQMFYggMTwQKGwAFAAADAAACAAACAAAAAf8B/gEBAv4B+AME7QUJ7QgP8wgK/gACAQAAAAEBAQACAAAAAAEB////AQAAAAEB//8AAgEBAAAAAAABAQAAAAABAAEA/wAAAf8AAAABAAABAgAB/wAAAAEBAf8A/wEAAf8A//8BAAEBAAAAAAH/AAABAQIBAP4B/wEAAP8BAQEBAP8BAAH/AP8A/wIAAP0AAQMA/wEAAQAAAAECAP//AAH+AQEC3vbtw/LjyvTf3ffrAAAAAAABAAH/AP8AAQgIARkZBBUXAgkJAgMEAQIC/wIC/vr6//j5/e3v//bz/vLzAPT0///+AAD/AAAAAAD+AAABAAABAAD/AAAAAAAAAQAA/wAAAAAAAQAA/wAAAgABAAAAAAAAAAAA/gD/BwUGIyMjJycnMDEwOTo4MTIyExMTAAD/AQAB/wD/AAABAAAAAP8AAAEAAAAA/wD/Av8B/wAAAAAAAAEAAP8AAP8AAAIAAQAA//8A//8AAQEBAAAAAAH///4AAAEBAf3+/gD//wEBAgAA/wABAAD/AAEAAP8AAQAA//8AAAAAAAAAAAAA/wEAAQAA//8AAgEA/wEAAP4AAAAAAAEAAf8A/gEAAAAAAAAAAQAAAf4AAAIA/wAAAAD/AAECAP//AAAAAP8BAAH+AP8A/wEAAf4CAAL/AP8AAAD/AAAA/wABAAAAAAEAAP8AAQH/AAAB/wAAAf4AAAEA//8AAQH//wECAf//AAEBAP8AAAD/AAH/AP8B/wEAAQABAAD//wD/AQACAP//AAEA//8BAgL+AP4B/wAAAAEBAAD/AP8AAAAAAAEAAAABAf///wD/AAABAAABAQH//wAB/wAAAP//AAEBAf///wEAAP8AAgAAAAAA/wAA/wEAAP8AAQD/AAEBAP//AAAB/wEAAf8B/wH/AAAAAQAB/wD/AQAAAAAAAAABAP///wH/AQECAP//AAEAAP8AAAAAAP8AAAH/AP8AAQEA//8AAAABAAEAAP8AAQEA/wAAAAAA/wAAAQAA/wD/AQAB//7/AAH/AQAC/wEAAAAAAQD/AAEBAP8A//4AAQIA/wAAAQAAAAAAAAD/AAAC/wD/Af8BAAD+AQEB//8A/wAAAQD//wABAAH/AQABAAD/AP8B/wABAQH/AAAAAAD/Af8A/wEBAQD//wABAAABAAD+AAACAP/+AAAB/wEAAQAAAAAAAAAAAP8A/wEAAf//AAEBAP8BAAH+//8AAQEBAAAA//8AAQAA/wAAAQAA/wEAAf8AAAEB/wD/AAABAQD+AAABAP8A/wEAAQD/AQACAAD///8BAAD/AAEAAAABAAD+AAAB/wD/AQACAP/+/wEAAQAAAP8BAAAAAAAAAAH/AP8AAAAAAAEAAAAAAAABAP8AAQEB////AAAA/wEAAf//AAEBAAD/AQAB//8AAAH/AAACAP//AAEAAP8BAAH/AAD/Af8B/gEAAAAAAgAA//8AAQAA/wEBAQD//wABAAD/AP8BAAIAAf7//wAAAAEAAAAAAP8A/wAAAAAAAAAAAQAAAQEA/wAAAAAAAf8A/wEAAP8BAAEAAQAA/wAAAAD///8AAQEAAP//AAEBAAABAQAA/wAAAAAAAP///wEBAgAAAAD///8AAQABAAH//wEAAf8BAAEAAAAA/wAAAP7//wEAAQABAQEAAP//AAAB/wEAAf8AAAD/AAEAAJqfoWdjZQAA/gAAAAAA/0hAA0NFA8jK+czNAOHkAwAAAAAAAAAA/wAAAB4LASUO/8Lo//v/AgAA/wAAAVJUU6GhnQwKCgAAAf///wAAAQABAAAAAAD//wEBAP8AAQEAAP8AAAEA////AQEBAAAAAAAAAAD/AP8A/wEBAf//AAEBAM/P0FVTVt/f3/8AAAEA//8A/wAAAAAEA/9KLAA0HwD//gABAAAAAQD//wAAAAAAAAD/AQAA/gAAAQAAAAABAAAAAAAAAQAAAQAA/wAAAAAAAQAAAQD/AQAC/wD/AgDs9ADK4ADV5AD09gAAAQAA/wAAAAAAAQIAAP8BAB8DBVQFDE8FCysDCQD+AQEBAv//Av8AAAD+AQACAQD/AvoDAu8FCusIDfMFCf8DBAAAAAABAQAA/wABAgD/AAD//wECA////wEAAAABAAD/AQABAQEAAAACAQH/AP4AAAH/AQAAAAEAAf8AAQEAAAAA/wEAAP8AAAEAAwABAAD/AAACAAD/AAAAAv8AAAEAAQEAAAABAv///wEAAP8BAAH/AAABAv8B/gAAAQD/AQEBAAAAAP8BAAEB/wAAAff+/M3048rz4NH16On68gAAAQD/AAAAAAAAAAAAAQAA/wAAAQAAAAAAAAAAAAAAAAAAAQAA/wAAAAAAAQAA/gAAAQAA/gAAAgAAAAAAAAEAAP8AAAAA/wAA/wAAABYUFhgaGRYVFCEfIBgXFhoaGyMjIhQXFiUkJAwODgAAAP8AAQAA/wAAAAD//wEBAQD/AP8B/wD/AQAAAQAAAAEA//4BAAL/AP4BAAAAAAD/AAEBAP/+AAABAAAAAAEAAAAAAAABAP//AQEA/wAAAAAAAQH9/v4A//8AAQABAAEAAAAAAAAAAAEAAP8AAAAAAAH//wABAf8AAAD/AAAA//8BAQH//wABAQD/AAABAAH/AP8AAQAB/wAAAAD/AAAB/wEAAf8AAQH///8AAAAAAAAB/wD/AQAAAAABAAAAAQH//v4AAQIBAP//AP8A/wIAAf4BAAEA////AQABAQAA/wAAAAAAAAD//wEBAQAAAf///gEBAf8A/gD+AgAB/wEBAAAAAQAAAQAA/v8AAAH/Af8BAAAAAAH///8AAAAAAQEBAP//AAEB//8AAAEAAf8AAAH///8BAAEAAP8AAQEA/wD/AQABAAAAAAD+AAACAAD/AAABAQAA/wD/AP8AAAAAAAEAAP8A/wAAAQEAAAABAAD///8AAAAAAAAAAQEAAAABAAAAAAAAAQAA/gAAAQAAAAAAAP//AAAC/wL/AgAA//8BAAD//wEAAf8AAP8AAAEA/wAAAgD//v8BAQEA/wAAAQAA/wD/AQAB////AAECAQD/AAH///8AAP4AAAACAAL+AAAAAP8AAQEBAAAB/wD/AQAAAP//AAAAAAEBAP8AAAH//wABAQAA////AAAAAQEAAAAAAAAB/wAAAQAAAAAAAAD/AP8AAQAB/wH//wAAAQAAAAD//wACAQAA/wAAAQAAAAAAAP//AAEBAP//AAEAAP8AAAEBAQAA/gAAAf//AQEB/wD/Af8A/gECAf/+AAABAAEAAP8AAAEAAP8A/wEAAQAAAAD//wABAQAAAAAA/wAAAf///wEAAP8BAQIAAQAA/gABAf/+AAAAAAAAAAEBAf8A/v8AAQH//wABAQEA/wAAAf8A/wAAAf8AAAIAAP//AQEA/v8AAQD/Af8CAAH+/wACAAABAAD/AAAAAAD/AAAAAAEAAP8AAP8AAQEB/////wEAAQEAAP8AAAABAQAAAAAAAAAA//8AAAEAAAAAAQAA/wAAAAEBAAD/AAAAAAD/AP7/AAECAAAAAQAA/wEAAAD/AQAA//8BAAH/AP8CAAD/AAEAAf8A/wAAAAAA//8AAQIAAf8A/wD/AQABAAEAAP8A/wAAAAAAAQAA//8AAAEAAQAAAAD//wABAQAB/wD/AQD/AAAB/wH/AAABAAAAAP8BAQD/AAAAAAEBAAD///8AAAEBAAD/Af8A/wABAAH/AQAA/wAAAAAB///k5+g2Nzrn5eQAAAAAAP8AAP8AAAAAAAEAAAEAAP8AAAAAAAAAAP9CGQCW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AAAAAQEBAP8AAAH///8BAAD/AAAAAAAB/wH/Af8BAAAAAQAAAAAA/wAAAP8AAAH/AAAA/wEBAf4AAQAA/wH/AAEAAP8AAAAB////AAEBAQD/AAAAAQAB/wAAAAH+/v4AAAH/AAAAAP8AAAAAAP8AAAEAAAABAAAAAAEAAAAAAAAAAP8AAQAA/wD///8AAAEAAgABAAH///8AAAABAQD//gABAQEA////Af8CAQD//wH+AAABAAEBAP8AAAD/AP8B/wH/AAACAQH/AAD/AP8BAAD/AAAAAAABAAD/AAAA//8AAQEBAAAA/wAAAP8AAQH+AAACAAD/AAABAAAAAAD/AAAAAAAA/wAAAAAAAQAA/wAAAAABAAD/AgAB/v//AQAB/wEAAAD/Af8BAAD/AAABAAABAQH+/wABAAEAAAD/AP4AAAAA/wEBAAAAAf8AAAD/AAABAQEAAAAA/wAAAAD/AP4A/wIBAQAAAP8AAAEAAAD/Af8B/wEAAP//AAAB/wH/Av8A/wEBAAD//wABAf///wAAAQEAAQAA/wAAAP8AAAAAAP8A/wEBAAD/AQEBAAAA////AQEBAAAAAAAAAAD/AP8CAAH//wAAAv8A/wH//wAAAQABAAABAAD+AAAAAP8BAAEAAAAAAAD//wAAAQAA/wABAQAAAAAAAAAAAAD///8BAQD//wAAAAAAAQEAAP8BAAH/AP8AAAAAAAEA/wEAAf8BAAAAAAAAAAD/AAEA//8CAAD/AQAAAAD///8AAAABAQH/AAABAAD/AP8A/wABAAH/Af8CAAD/AAEAAAH///4AAAEAAQAB//8AAQEAAP8AAAEA/wAAAAD/Af8BAAEAAP8AAAAAAAH/AP8A/wEAAf8BAAEAAAH/AP8BAAABAQD//gD/AAABAQAA/wAAAQAAAP8AAAEAAAD/AAABAP8AAAEA/wAAAQAAAP8AAQEA//8AAQH//wABAQAA/wAAAQD/AAEB////AAEBAf8B/wD9AAACAAABAAD+AP8AAQECAAD+/wABAP//AAEAAAACAAD/Af8A/wEAAAEAAP8AAAEAAAAAAQAA/wAAAf8A/wEAAP8AAQAAAAABAAAA/wD+AAABAAAA/wAAAgAA//8AAQH//wABAAAA/wAAAgAA/wAAAQD//wABAAABAAH/Af///gABAgAA/wD/AQAAAP8A/wEBAAAAAAAA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/wAAAAABAAEAAAEAAP8BAQH/AP8CAQH+/wECAf///wEBAgEBAQAA//f++svz5MLu4Mrx4vL89wAA/wAAAAAAAQAAAAAAAQAA/wAAAAAAAAAAAQABABwfH2hpaFlVVSEgIAABAAD/AAAAAQAB/gD/AQEAAP8AAAAB/wD/AQAA/wABAf8A/wIAAQD/AP4AAAEAAAAAAP8AAQAAAAEA/wEBAf4A/wH/AAAA/wEBAv///wEAAP8AAAAAAQAAAAAB/wD/AQAAAAAA/wAAAAH+/f4AAgEA////AQAA/wABAAAAAAD/AP8AAQAB/wEAAQAA/wD/AP8CAAD//wD/AQEAAQAB/wEAAAAA////AAABAQAA/wABAAD/AP8BAQH/AAD//wAAAQAAAAAAAAAA//8BAgH//wABAAAAAAD/AAEAAP8B/wAAAQD/AP8BAAH//wAAAQABAAAA/wD/AQAB/wAAAQD///8AAQH//wABAf4B/wIAAQD///8AAQEB/wD/AQAA/wABAQD/AAAB////AQACAQD//wEAAP8A/wD/Af8BAAEAAQAA/wH/AAAA/wAAAQAAAAEA//8AAf8AAAEAAAAA/wABAQAAAAAAAAAAAAAAAAAA////AQABAAABAQH//wAAAAAAAAAAAQD//wABAAD///8BAQEAAP8A/wAAAQEA//8AAQEAAP8AAAD/AAABAAH//v8BAgD/AAEBAAEAAP8BAAD/AAD/AAABAQAA/wAAAAAAAP8AAAEAAAABAAAAAAD+//8AAQACAAD//wEAAQABAAD9//8BAAEAAgAB/v8AAQH/AAABAP///wABAQEA//8AAAEBAQD+/wAAAQAAAAAB/wAAAQD///8CAQIA///+AQAAAAAB/wAAAQD/AAABAAD+AP8C/wEBAP8AAQH+AQAB/v8AAAH/Af//AAACAAH/AP8BAAAAAAH//wAAAP8AAQEBAP//AAAAAAIAAP4A/wEAAf8AAAAAAAAAAQEA/wABAAAAAP8A/wD/AQEBAAAAAP///wAAAQEAAAAA/wABAAEBAf///wAAAAAAAQD///8BAgD//wEAAP8AAAAA/wAAAQEAAAABAP8AAAEBAQD//gAAAQAAAAD/AQEBAP8A/wD/AAEBAAD/AP8BAP//AAEAAP8BAAD/AAEBAP//AAEBAAAAAQH/AP8BAAH///8BAAAAAQEA//8AAAAAAAH/AP8AAAABAAAAAQEA/wAAAP//Af8B/wH/AAEBAP//AP8BAAL/Af8BAAEAAP8A/wEAAAAAAAAAAQAAAP///wAAAQAA//8AAAEBAAEAAP8AAAD/AAEBAQAA/wAAAP8BAAH/AP8AAAAAAP8AAAIBAf///wEAAAAAAP8AAAEAAQD/AAAA//8BAAAAAAD/AAAAAAABAQEAAP8A/wEAAAABAQD/AP8BAAD//wEAAP//AQECAAD/AAAA/wAAAQD///8BAAEAAP8AAADT1dZQT1bf3t0AAP8AAAFcK/2jUv0A/wAA/wH//gAA/AEA/v4A/wAA/gAA/gAAAAHI4wFPtgHr+QAAAAAAAAABAAF8enaCg4P/AgAAAAABAAEAAAAA//8AAQEAAAD/AP8AAAAA/wEAAQAAAP8BAAEAAAD/AP8BAAH///8BAQH/AAAAAP8AAAEA/wD/AP8CAQGnqKpzcHLp6ej/AP//AAAAAP8AAAEBBwUASy//MBwAAP8AAAEAAf8A/wAAAQAA/wIAAP8AAAEAAAEAAAAAAAAAAAEA/wEAAf8AAAIA/wEAAQIAAAEAAAIAAAMAAQIAAAIBAAIAAgP/AAIA/wIAAAAA9vgAytYAytMA8vQAAAIAAAAAAAAAAAIAAP8AAQIfAwNfCRRSBxMY/wf+AQEAAQH/AAAAAQEA/wD+AQEAAAD8AQT1BQbuCAv0Bgn/Af8AAQICAQAB/wD/AAEBAQAA/wH/Af8CAQH//gABAgEAAAEAAP8AAAABAAEAAQH///8AAQIB/wABAf//AQEA/wEBAAAAAQEAAAAA/gABAgEAAAAAAAEAAAAAAAIAAAABAP//AQIB/wABAf/+AAABAQABAAAAAQD//wACAQH+AAACAAEAAAEAAf8AAAABAQH//wABAAD/AgIB/v/i+O/J8uLG8OHW9ej5/fsAAAAAAAIAAf8A/wEAAAAAAAAAAQAA//8AAQEVGBhjY2FeW14mJyUB/wACAQD//wAAAQEAAAAAAf8AAAAAAAABAP8AAAH/AAD//wABAAABAAD/AAAAAAH/Af8B/wAAAAEAAf4A/wEBAAD/AAAAAAAA/wABAgD+AAEAAP8CAAD/AAEA//8BAAH///8B/v7+AAD//wEBAP4AAQEAAAEAAP8AAAAA/wD/AAABAgD/AAAA/gAAAAABAAAAAAAAAQEAAP8A/wAAAAAA/wAAAQAAAf8AAAAAAAAAAAAAAAAAAAAAAAEAAAEAAP8AAAAAAAEB//7/AAD/AQEAAP8BAAABAAEA///+AQAB/wEAAAAAAQAA/wD/AP8BAAH/AAAAAAABAf8A/wEAAgEA//4AAAAA/wEAAP//AAABAQEA/wD/AP8AAQAAAAABAQEA/wAAAP8AAAIA////AAAAAP//AQEBAAAAAAAC////AAD/AAEAAQAA/wEBAP4A/wAAAQD/AAABAAAAAAD/AQEBAAABAAD+AP8A/wEBAQEAAP//AAABAAAAAAAA//8AAQEB///+AQECAP/+AAAAAAEAAAABAAAAAAAAAAEAAP8AAP8AAAAAAAH/AAABAAEAAP4AAAEAAAAA/wAAAQD/AAABAP8AAAH/AP8A/wABAQIA//7/AQEBAAD///8BAAAA/wEAAQD/AQEBAAAAAAABAP//AQAB/gD/AQEBAP/+/wACAQD/AP8AAAEAAQH///4B/wAAAAAAAAEAAQABAAAAAAD//wAAAQD/AAAA/wAAAAABAgAA/gAAAQAA////AAEAAAABAAEAAP7/AQEAAAAA//8AAAAAAAIAAf8B/wABAAD/Af8AAAH///8BAQEAAAD//gABAgD//wABAf8A/wEAAP//AQEA/gAAAv8B/gH/AgEBAP8A////AAIAAP8BAQD//wEBAf8AAAAB/wAAAQAA/wD+AAEAAf8B/wAAAgEA//8A/wAAAQAA/wH/Af8B/wAAAQAAAAEAAP8AAAAAAAAA/wABAQH///8BAAD/AQH/AQAA//4B/wEAAP8AAQEA/wAAAQEAAAAA///+AQACAAAA/wAAAQAAAAAAAAEAAP8AAAAAAAEBAP8AAAH/AP8AAAAAAAAAAAAAAQAA/wEBAP///wD/AQAA/wEBAP//AQACAAAAAAD/AAAB/wH/Af8AAAEBAQD+AAAA//8BAAAAAAABAP//AAEA/wABAQEAAf///wAAAAEBAP//AAAA/wAAAQAA/wD/AAACAQEA////AQEB////AAABAAD/AQEAAAABAP8A/wH/AQABAP//AQAB/wH/AP8BAQH///8AAAEBAf8A/gH/Av8BAAD//wEBAQAA/wD///8AAgAB/wEAkpiacGltAAABAAAAEQf/ymH6JBUDAP8AAAEA//0AAP7/APwAAP7/Af8B////AAAAgMMCg80B/wABAAD/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Af3/Af//A+8ICe8JCvwDAgABAAABAQAAAAAAAQABAAEBAQD/AQAAAAAAAAAB/wH/AQECAf//AAAAAQEAAQAAAAABAAAAAAD//wEAA/8AAAEA/wABAQEAAf8AAAEBAP8AAgH//wABAQEBAAAAAf///wEBAAAAAAH/AQABAP//AAEAAQABAQEA/wABAQEAAP8AAAEBAf//AAEBAAEAAAABAf8A/wIAAQAAAQEBAP0A/9X26sDt3r/s2uv69AAAAAAAAQAA/wABAQAAAAD//wAAAgAA/gABAgUGB0lISGlqaEVDQwECAgAA/wABAAH/AAAAAAABAAAAAAAAAAD/AQD//wECAAAA//8AAgD//wAAAAAA/wAAAf8AAAEBAAAAAAAAAAAAAAD/AAEBAP8AAP8AAAEAAAAAAP//AAH+/v4AAAD/AAACAAD+AAABAf8AAAEA//8AAAABAQL//wAAAP8AAAAA////AQICAP7+/wEAAAAAAgEA/v4AAQEAAAEAAP8AAAAB/wAAAAAAAP8AAQAAAQD/AAIA//8BAQAA/v8AAQEAAAAB/wD+AQABAP8AAAH/AQAA/wABAAEAAf8A//8AAAEA/wD/AQEAAP8AAAABAP//AAABAAEAAAAAAAD//wABAP//AQEAAAAAAP8BAAD//wAAAQAAAAEAAP8AAAABAAAA/wD/AAEAAf8B/wAAAQEAAAAA/wEAAf//AAAAAAAAAQEB/wAA//8AAf8AAQH//QEAAv8AAP8BAAAA/wD/AQEB/wD/AAAAAAABAQAAAQEA//4AAAEAAAAAAAABAAD/AAH/AP4AAAABAAH/AAACAAD+/wAAAgAB/wH/AP8BAAD/AAAB//8AAQEAAAD/AAEAAP8BAP8AAQEA/wAAAP8AAAAA/wD/AAECAQD//wEBAf/+AP8BAAEAAAABAAD+//8AAgEB/wEAAP8AAAAAAQAA////AAEBAAAAAAAAAP//AAEBAP///wACAAH/AAAAAP8AAQEAAAAAAAAAAP8AAAL/AP8BAQAA/wD//wAAAf8BAAEA/wD/AQAB/wEAAP4AAAAAAQAAAQL///4B/wH/AQABAAD/AP8B/wH/Af4BAAEA/wD+AAACAQH/AP8AAAEBAAAAAAAAAAAA/wD/Af8B/wH/AgAA/wABAAD/AAABAQAA/wAAAAD/AP8AAAIBAP8AAQD//wAA/wABAQAAAQD//wD/AP8B/wABAQEAAQD///8BAAEAAAH/AP8B/wAAAQAAAAAA/wABAQH/Af///wAB/wAAAP8BAQH+/wABAQH/AP8BAAAAAAAAAP//AAAB/wH/AgAAAAEAAP8B/wH/Af8B/wAAAQAA/wABAP//AAL/AP8BAQAA/wD/AQAB/wD/AQAB/wEAAP8AAAEAAQAA////AAABAAD/AP8BAAEAAQEA//4AAQH//wABAAAAAQAA/gAAAQAA/wEAAQAAAAAAAP8BAQD/AAH/AP8BAAD/AAEBAAD///4BAAEBAAD/Af8AAAH/AAEC///+AAABAQAA/wD/AAEBAf8AAAAAAAAAAAAA/wD/AQABAAH///8BAQAAAAEA//8AAQAA/wAAAQAB/wEAAAD/AQAAAAAAAAAAAAD/AAAB/wAAAQCBhImBfX8AAAAAAAEoEfzHY/8QCQH/AAABAP8A//8A/gAA/wEA/f8A/gEA/wH//gCj1gRjuv38//8AAAAAAAAJCAmsrKhJS0kBAAH/AAABAAD/AAAA//8AAQEAAAABAAD/AAAAAAAA/wABAQAA/wAAAf8AAAH/AAAB/wAAAAD/AQAAAAAA/wAAAQABAAAAAAD//wDm5uZwcHOurKv/AP//AP8AAAAAAAEAAP8BGxMASy7/HRQA//4AAQAAAAEA/wAAAQEAAQEA/gIAAQAB/wIAAAL/AQIAAAICAQD/AQIA/wP/AQEBAQAAAQMA/wL/AQABAAMAAAD/AQEBAQEA/gH/AAEAAgIA/wIB/f7/2uEAxM0A3uEA/wAAAQAA/wAAAQAAAAIAAP4AAAAsBglYCRZRBhQPAAf/AAH+AQH/AwIA/wD/AAEAAQABAAH2BAX1BQb1Bwf6AwX+AQAAAAEBAAD/AQEBAAAAAQABAAAAAAEBAAD/AAEAAP8BAQEBAAL/AAAAAP8BAAEAAP8AAAIBAAD/AAAAAAABAAEAAQH/AAABAAAAAAEBAf8BAAH/AAAAAAEBAAD/AQAB/wABAAH+AAAAAP8CAAIAAQAAAAABAQAAAAH/AAABAAEBAAD/AAABAQAAAQAA/wEAAQABAAEAAP//AAAAAQDn+vTF8eK36djb9OkAAP8AAAAAAAEAAP8AAAAAAAEAAQAA//8AAAEFCAlPT05iYmBEQEEDBAQAAQABAAD+AAACAQAAAAEA/wAAAf8A/wAAAQAA/wAAAQD/AAECAAD/////AQAB/wAAAAAAAAAAAAAAAQEA////AAACAQH+AAABAP8AAAEB/f79AAAAAQECAf///wAAAAAAAAAAAAD//wABAQD/AAAA/wAAAQEC//8AAAD/AQAAAAD/AQAA/wABAAAAAP8A/wAAAQEAAAD//wABAf8BAAH/AQAA/wD//wEBAf8AAP8AAAABAAEA/wD/AQAAAAAA/wD/AP8AAAIBAf8A////AQEBAP8AAAAA/wAAAQEAAP8BAAL/AP///wABAQAA/wD/AQAAAAAAAP8B/wEAAAAAAQAAAP8A/wH/AQAAAAAC////AQEA/v//AQEBAf8AAAD//wEBAAAAAAEAAP4AAAEAAQAB/wD/AQD///8AAgEB/gEAAP8AAQABAP/+/wABAQD//wEBAAEAAP8AAAAAAQEAAAAA////AP8BAQEAAQAA/gAAAP//AAL/Af8CAAAAAAD/AAABAP8AAAH/AAABAAEA//7/AQEB/wAAAQAAAAEAAf8A/wEAAP//AQAB/gAAAQAAAAH/AP8AAf8A/gEBAQAAAQAA//8AAAH/AAAAAf8B/wH//wEAAf8BAQAA/wD/AAABAAABAAD/AAD/AQEA//4BAAEAAAAA/wEBAP7+AQAB/wEAAQAB/wD+AAACAAD/AAEAAf8AAP8AAAL/AP8AAAAAAAEBAAAAAf7//wAB/wD/AQD//wEBAQABAf8A/wH/AAAB/wD/AQABAP8AAAH/AAAAAAABAAAA//8AAQH//wABAQAAAAAA/wH/AQAAAP8B////AQEBAAD//wAAAQAC/wD+AQEBAAAAAP8A/wEAAAABAf7/AAH//wACAQD//wAAAQAB/wD/AAD/AQACAAD+AAEAAP8C/wD/AAD/AAAAAQABAQAA/wAAAAAAAAABAAD/AAAAAAAA//8BAAH/AQEBAP//AAEAAP8AAAABAAD//wD/AQABAAEAAP8AAQAA/gAAAAABAAH/AP//AQABAAAAAAABAAEA/wAAAQD///8AAAAAAAAAAQAB/wD+AQABAAD/AAEBAP8AAAEBAP///wEAAf8AAQAA/wEAAP8BAAAAAAD/AQAA/wAAAAABAAEAAf8A/wD//wABAgD//wEBAf///wAAAAABAAEAAQAAAAAA////AAEAAf8B/wEAAP8AAQEAAP8A/gD/AgEB//8AAAH/AAABAP//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AAABAAIBAP8AAQAA/wIAAQEAAQAAAAAA/wAAAAD/AAABAgEAAQH///8BAAAAAQABAAHt/fa+7t+46dfZ8ugAAAAAAAAAAP8AAAAAAAEAAAEAAf8A/wAAAAAwMzR1c3NNTUsLCwkBAAAAAQIAAAAAAAAAAAAA////AAACAAD/AQAA/wAAAAAAAQABAAH/AAAA//8AAAEAAf8AAAAAAAEA/v8B/f39AQEBAAAAAAH/AP8AAAABAAAA/wAAAP8AAAAAAgIA//8A/wAAAAEAAQAAAP//AAAA/wACAQH/AAAAAAABAAD/////AQABAAABAP8AAAH/AAAAAQD//gAAAP8BAAEAAf8A/wAAAQEAAAD/AAAAAAABAAABAP///wIBAP//AQAA////AQIA//8BAQEAAP//AAAA/wEAAP8CAQD/AAD/AAAA/wAAAQAB//8AAQH/AQAB/v//AQEBAAAAAAAA/v//AgEB/wD/AAABAQAAAAAA/wAA/wAAAv//AAEBAAAAAAAAAAD/AAABAAABAAD//wD/AAABAf8AAAEA/wAAAAD/AQABAP//AAABAAIAAP8B/wD/AQAAAP8A/wIAAf//AQAB/wH/AP8BAQD//wAA/wAAAAABAQAAAP//AAEAAP8A/wEBAQAAAP//AAEB/wH/AP8AAP8BAQEBAAD//wD/AAAAAQAB/wAAAQAA//8AAQEAAAD/AAAAAAABAf8A/wD/AQABAAEAAAEA/v8AAf///wEBAQD/AAAB/wEAAf8AAAAA/wD/AQAC/wD+AP8BAAH/AQAB/wAAAf8AAAAA/wEAAAD/AQEAAAACAP/+AAAA//8AAAABAAH/AgAB/gAAAf//AAEB/wAB/wD/Av8AAAEBAAD/AAD/AP8BAAAAAAEB/wD/AgAB/wD///8AAAAAAgEB///+AAEB/wD/AQAB/wAAAP//AQEB/wEAAf8AAAEAAAAAAAAAAP7//wIAAv8A/gEBAP8AAAEAAv8B/wD//wAAAQAAAAABAP//AAH/AAAB/wABAAD/AQEA//8AAQAAAAAA//8AAAEAAQEAAP8B/wEAAf///wEBAQD/AP8BAAAAAAD+AAABAAAA/wEAAf8AAAH///8AAQAB/wAAAAD/AAAAAQEBAAABAP8AAP//AAEAAAEBAP////8BAQH/AAAAAAAAAAAAAAEBAAD/AAAAAP8BAQEA/wAAAAAAAAD///8AAQABAAD/AQEA/wAAAP8BAQH///8AAAABAAH/AQAB/wAAAAAAAAD/AAABAP8AAAH//wAAAf8BAQEAAAD//wAAAAABAAD/AQABAAAA/wD/AQAAAP8A/wEBAQD///8AAQEB/////wAAAQABAAH//wABAP//AQEAAP8BAAEAAP8AAQEA/wAAAQD//wABAP8AAAD/AQEB/wAAAQAA////AAAB/f7+RUhRwL28AP/+DAT9y2sEKBH9AP/+AP4B/wEAAP8BAf8AAP8AAP8A/wD/APwBAQAB9vsAabYAotn8AAAAAAD+DAoNxMfDLi4tAQAB/wAAAP//AQABAAAA/wEAAAAA/wAAAQD/AQABAAAAAAAAAAD//wABAAAAAQAAAAAAAAAA/v//AgEBAP//AAEBAAAAAP8AAAAA/wAAAAAA/wAA8O/uc3R3oZ+e/wAAAAD/AAAAAAAAAAABAQD/ADMj/0IvAQsKAgABAAEDAgEB/wACAQEC/gABAAACAAEAAAEAAAACAQABAAABAAEA/wECAAEAAf8CAAAB/wEAAv8B/wACAQEBAf8AAQECAAACAQAB/wECAQD//wEC/wEA/v4D/vj3/s3RAMfMAOvtAAACAAIAAP7/AAEBAP//AAEAAQAAQAgSYQocOwYSAQMF/gEB/wD//wECAQD//wAAAAEB/wAC/wEC/QID+QQE9AgF+wIDAAEBAQAB/wAAAAEBAAAAAQAB/gAAAgH///8BAQABAQEBAP///wH/AQAB/wABAAAAAQIA//4AAQEAAQABAAAB/wAAAQEBAAAA//8AAQEBAP8AAQEBAAAAAQEB/wEAAP//AQD//wEBAf8BAQAA/wEAAP8AAAEBAAACAQABAAL///8AAQEB////AQABAAAA/wAAAQEBAAH/AAABAAEAAAEB9f37wvHgs+fU0+/jAAABAAD/AAAAAAABAAAAAAAAAAAAAAAAAAMCSktKc3B0QD88AQEAAAEBAQAA//8AAQD//wAAAQEB/wD/AP//AAECAP//AAH/AP8CAAH/AQAB//8AAQD//gAAAQEBAgIBAQAA/wEBAAAAAAEAAQEAAP8A/wEAAQABAAEBAf//AP8AAAAAAAH/AAD/AAAAAQAAAQEB///+AAD//wD+/gD/AAEAAQEBAP8AAP8B//8AAAAAAP8AAQH/AQEBAAEBAAABAAECAQD/AP//AAD/AQAAAAAB/wABAQH/AAD/AAAAAAEBAf7/AQAAAAD/AP8AAAAAAQD/AAH/AAAA/wD/Af//AQEAAgAAAAECAAAAAP8AAAEBAAAAAAAAAQD/AAEBAQD/AAAAAAD+AP4AAP8A/wEAAAEB//8BAf//AAD/AAAA/wAAAAABAAAA/wABAAAAAAAA/wAB/wD/AQAAAAH/Af8AAAABAQAAAAAAAAD//wH/AP8A/wAB/wH/AAD/Af8B/wD/AQAAAP8BAf8AAgIAAQAAAAAAAAABAf//AAABAQEAAAAAAAECAQD/AAEAAQEAAQEAAAAA//8A/wAAAQEAAQAAAAH/AAAAAQEBAP//AAD/AQAAAQAA//8BAAAAAP8B//4B////AAEA//8AAAIAAAABAf8BAAH+AAAA/wEAAAEAAf8A/gEAAQEB/wEAAP8AAAH//wABAAAC/wAA/wABAQD/AQD//wABAQAAAAABAQABAAEAAf4A/wEAAAABAAAAAAAB/wIAAQABAAAA/wAAAAAAAQAA//8BAAAA/wEAAP4AAAD//wEB/wEBAP8A//8AAAEA/wEAAf8AAAEAAAEBAAAAAAEAAAABAAD/AP//AP/+AP8BAAD/Av//AQH/AAEBAQH/AP8A//8A/wEBAAD/AAEA/v8BAAD/Af8A//8A/v8A////AAEBAf8BAP8AAQABAAEBAAD/AP8A/wIA//8AAAD//wD//wAA//8AAP8AAgAAAP8AAAH/AAABAAAAAQEBAQEAAQAAAAAAAAEAAQD/AP8AAAAAAAABAP8A/wAA/wD/AAEB/wD/AP8AAP8BAAAA/wAA/wD/AQAAAP8BAP7//wD/AAD//wAAAAIBAQAAAAD/Af4AAAAAAAAA//8AAQAAAAEBAAAAAf8A/wEAAAD/AAD/AAD//wAAAAAAAAEAAAEA/wAAAP8AAQH/AQAA/wD/AP8A/wAAAAEAAQD/AQABAf8AAP//Af8AAP//AAEBAAEBAQAB/wEAAQEAAAEBAQD/AQABAAEAAAEBAP8AAAEAAP//AAEAAAABAAAAAQAAAAAAAP8AAAABAf8AAAMDAj09OwABAAAAAfT8AMLnBAAF/gAHAAAKAAAJAQEIAAAJAv8IAwAHAwEEAwAHAf8EAAkHAX4+ACsQAAAA/wAAAvT29bS1t/8A/////wD/AAEBAQAAAP8A/wAA/wD+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AQD+AAP9AwL7BAL4BAT9BAP+AgH+/wEBAAH/AAAAAQABAQAA/wEAAAAAAQABAAH/AAAAAAEAAQAAAAABAAABAAD/AAAAAAH/Af8BAAIAAAEAAQAB/gD/AgEBAP///wABAQL///8AAQECAgD//wEAAAABAAAAAAAAAQIB/wD/AQEAAP8A/wECAQD+AQAB/gEAAgAAAAAAAAABAQD+AAEB/wEAAf8AAQEAAAAAAAEAAAEAAf38/wDJ7+Os6dPN7eD/AP4AAAAAAAAAAP8AAAEAAQAA/wAAAQEFBgZUVFVzcm8xMDEAAf8CAQH+AAEA/wABAAAAAf8A/wABAQH///8AAAEAAQAAAP8AAAEAAAAAAP8B/f7+AgAA/wAAAAAA//8AAQEAAAD/AAABAP//AAIBAP4AAAAAAAIB//7/AQAAAAD/AAABAAEAAAAAAAAAAAAA/wEAAf8BAAAAAAAAAP8AAAL///8AAAD/AQABAAABAAAAAQAA/gD/AAD/AQABAAAAAAAB///+AQECAP8A/wH/AAAAAQAAAAAA/wAAAAD/AAAAAQAB//8AAAH/AQAB/wD//wABAQABAQH/AQAA//8AAAAAAAD//wEAAP4AAQEB//8AAAEAAQAA////AAABAQEA/wAAAQAAAAD/AAABAAAA/wAAAAAAAQD//wABAQAA/wAAAQD/AAAAAP8BAAH//wEBAP4AAAAAAAAAAAEBAf//AAEAAAAAAAAA/wEAAf8A/gD/AQAAAAABAQAB/wD/AAAAAf8AAAEAAAAAAP///wEBAgAB/v/+AAIBAf//AAAC/wD+Af8AAAEAAAABAQAA/wD//wAAAQAAAf8B/gH/AQAB//8AAAH/Af8CAAD+AAICAf7//wEAAAAA/wEAAP//AQACAAD//wAAAf//AAEBAAAAAAAA/wEAAP8AAAAAAf//AQEB/gD/AQABAAABAP/+/wABAQEA/wAAAQAAAP///wEAAgABAAEA//8AAAEA//7/AQEBAAAA/wD/AQABAAD/AAAAAAABAQD//wEB/v8AAgD/AQAB/wAA/wAAAf///wEBAf8AAAD/AQEA//8BAQIA//8AAAEAAP8AAAAAAAD/AQEB/v8AAAAAAAAAAQD///8BAQABAAH/AAD/AQEB/v7/AQIBAP8A//8AAQAA/wEAAQAAAAAAAAEAAP8AAAAAAAAA/wEAAf8A/wH/Af8B/wAAAv8A/wEAAAAAAAEAAP8AAAAAAP8AAAEAAAAAAAEAAAAAAQAB////AAAAAAABAAAAAAAAAAEAAAD/AP8A/wEAAP8AAAEBAf//AAAAAAEBAP//AAEAAP8B/wAAAQEAAP8AAAEA//8AAQEAAAAAAP//AAAAAQD//wECAP8A/wH/Af8BAAD/AAEAAP8BAAAAAAH/AQAAAAAAAAAA//7/AQIBAAAA/wABAQD/AAAB/wD//wAAAQAAAAAAAf///wABAQEBAP//AAEB/wAAAQAAAAAA/wAAAAD/AP8AAAEBAAD/AP8AAQEB/wAAAAAAAP8AAAEAAP8AAAEAAQAAAAAAAP7/AAEB/wAAAAEAAP8AAAAAAAEA8PH0QkVM0MvLAAD+JBYC13L9BP79AAEB//0AAf8BAAABAP8AAP8AAAABAAAB//7/AAEBAP8B9/b+frz6kM///QAAGRocUU9Qzc3O29zb7u7vAAABAAD/AAD/AAAAAAD/AAACAAAAAAAAAAEAGBcXKywtNTQzQ0RBOTk5CgkJAAH/AQAA//8AAQEA/wABAf///wEBAQD//wAAAAABAQD//wAB////AQABzs/PfHt+uLi3AAD+AAAAAAABAAAAAQAA/wH/ARMOBDswAislAAYE/wABAQIBAAABAAEAAAICAAEBAP8CAAEAAf8BAAEB/wIAAv8BAAAB/wABAQIA/wABAgABAv4CAQEAAAABAAABAQECAQIBAP8A/QAC/gEBAAEC/gEB/f8BAQAB/gH/APX3/dPW/87SAODhAP39AAABAAAAAAEAAAABAP//AQEANQsTUAkaTAcVCQIGAAAC/wEB/gECAAH//wABAAEC/gEB+gQD+wMC+wID/QMC/gMCAP8B/wEAAP8AAQIAAP8A/wEAAAACAAAAAAH/AQAAAAADAAD/AQEBAP8A/wAAAAEBAQEB/wD/AP8AAQAA/wECAQAAAAEAAP8AAAEBAAAAAAAAAAAAAQEB/gABAgH/AP8BAAAAAAACAQAAAAAAAAEAAAAAAP8AAAIBAf4AAAEA/wAAAAABAQEB/wAA/wEAAf8AAAEBAAAAAAAA/wEBAAIB+/790/HluuvZw+zd8/z2AAABAAABAAAAAAD/AAEBAP8BAAEAEBASWlpXcHBvIyEiAAIBAQEBAAAA//8AAgH///8A/wEBAQAAAAAAAP8AAAEA/wD/AgABABaE6XsB/v7//wAAAAD/AQABAQD//wAAAP8AAAEA/wAAAQAA//8AAQEAAAAAAP8AAAAAAAEAAAAB////AAEBAAD/AgAA/gAAAf8A/wH/AQAAAQAB/gAAAv///wEA/wEBAf4AAAEAAAAA/wABAAD/AAAAAgAA/gAAAAD/AP8BAAAAAQEAAAEAAP8AAAAA/wH/Af8BAAAAAAEA//8AAQD///8AAQECAAD//wAAAQAA/wD/AP8BAQEAAP8AAAD/AAEB//8AAQEA//8AAQAA/wAAAAAAAQEA/wAAAQD//wABAf///wEBAAAAAP8AAAD/AQAA/wECAQD/AAEAAP////8AAAEAAP8AAQEB/wAAAQD/AAAAAAABAAH/AP8BAAAAAP8AAAH//wACAQD/AAEAAQAA/wABAP4AAAH/AAAB/wD+AQEB/v8AAgAAAAAA/wAAAQD/AAACAAD/Af8A/gIAAP4AAQH//wABAAAAAQAAAf8A/wH/AAABAAAA/wD/AP8AAAAAAQEB//8AAQEAAAEAAP8AAP8AAAH//wABAAD/AQAAAP8AAAEB/wD/AQEBAP8A////AQEBAAD/AAABAP8AAAEA/////wEBAf8AAQH/AAAC///+AQEA/wABAAD/Af8BAQEA/wD/AAAAAP8AAAEBAAAAAAAAAAAA////AQEBAQEA/v4AAQH//wABAQEAAAD/AP4AAAEAAAAAAP8BAAEAAAAAAAD/AAABAAAAAP//AAEAAP8BAAEAAAAAAAABAAD/AP///wEBAQEAAP//AAAB/wABAQH/AP8B/wH/Af4A/wEAAQD/AAABAAAAAP8B/wEAAQD+//8BAQIB////AQAA/wAAAQAAAAAAAQAAAAAA/wEAAAABAP//AAEAAAD/AP8BAAD//wABAP8AAQIA//8BAAEAAf8AAAAAAAD/AAAB/wD/AAD/AQEB/wAAAf8A/wABAQEAAP//AAEBAP//AAAB/wEAAf7/AAIAAAABAQAA/wD/AAAAAAAB//8AAgD//wABAAH/AQAB/wD/AAAAAP8BAAEA///+AQEA//8BAQAAAQABAAAA/wH/Af8BAAAA/gH/AQAB/wAAAgAAAAAA/wD//wAAAP8A7+7v7Ovt/v//AQMCAwQDERIRDgsMBQQDAAEBAAAAAAAAAAAA/wAAAQAAAf8A/wEAAQAA/wAAAQD/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AAD//wD/AQABAAEAAAABAQEA/wAAAQEAAAD/AP8BAAAAAAEAAQEAAAEBAQD//////wAAAQABAQEAAQHe9+ym5M276Nj9//0AAP8AAAAAAAIAAAAAAQEA//8BBANaV1eDhIQhHh7/AgEBAAD/AAAA//8AAAEBAQD/AAAAAAAB/v79AAABAP//AAAAAAICAf///wEA//8AAQAAAP8BAAH//wAAAQD/AP8BAAEAAAD/AAEB//8AAQAAAAAAAAAA//8BAgH//wAAAQAA//8AAAAAAAEBAAH/AP//AP8AAAEBAAAAAAEA/wABAf//AP8AAQEA/wAA/wAAAQAAAAEBAP7+/wIBAP//AQAB/wEAAf///wAAAAABAQAAAP8A/wH/Af8BAAEAAAH///8BAgEA/v4AAQEAAAAAAAAAAQEA//8B/wD/AAEAAP//AAABAAAAAAAAAQD/AAAB/wABAgD//wAAAAAA/wAAAAAAAQAA/wAAAQEBAP//AQAAAAAA/v//AQEA//8AAQEB/wEAAf8AAAAA/wAAAP8AAAH/AQEBAAD///8AAQABAAAB/wD+AAABAAH///8BAgAAAAD/AAABAP///wEAAQAB/wAAAP///wEAAQAAAAABAAAAAQAAAAAA/wEAAP7/AgEBAAAA/wD/AAEBAP8A//8AAQD/AAICAP////8BAQH//wAAAQD///8BAQH//wAAAQABAP8AAAEAAQEB/v//AQAAAAD//wAAAQABAAD///8BAQEB/wD/AQAAAAEAAAAA////AQABAAD/AAAA//8BAQL/AP8A/wAAAP8BAQH/AP8BAAH/AAAB/wD/AQAA/wAAAQAB/wAAAf8AAAEB/gD/AQAAAf8AAAAA/wEAAgABAAD//gAAAP//AQAAAAAB/wEAAQEA//8AAAAAAAEAAf8AAAAAAAEA//4AAAD/AQEBAAABAAD+AQEB/v8AAAEAAP7/AQEAAAABAAAAAAAAAAEBAP/+/wABAQAAAAD/AAEBAP4A/wIBAP//AAAAAQABAAD//wAAAAD/AAABAQABAAD/AP8AAAIA/wAAAf8AAAAAAAAB/wEAAP//AAD/AQABAP8AAAIAAf8A/wAAAAAA/wAAAQAAAAAAAAAAAAABAP///wEAAQEA//8BAQEAAAD/AQAA/v8BAQEAAP///wAAAQAAAAAAAQD//wABAAEA1dfaxcfH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AAD+AQIAAgH//wD+AwH/AAH/AQEAAAH/AQEAAQEB////AQH/AAABAQH/AAABAAH/AAAAAAABAQD/AAEAAQEA/gAAAgD/AAAA/wABAQEBAQH//wAAAQEAAQD/AP8BAAAA/wEBAP//AQH/AAAB/wEAAgEAAAAAAAABAQIA/wAAAAD+AAACAAAAAAH/Af8BAAEA/wAAAAAAAQEAAP8AAAEAAQEB/wD/AAEBAP//AAD/AQAA/wEBAAEAAgDz/fq36tWr5M3n9/AAAAEAAAAAAAEAAQEAAP8AAQEgICF8e3peXVwFBQT/AAEBAAD/AAAB/v39AAEBAAAA//8AAQEA/wAAAQAAAAD//wABAf8AAAL/AP8BAAAAAAAAAQAB/v//AAH/AQAAAAABAAAAAAD/AP8AAAEBAQD//gAAAQAAAAABAP///wEBAQAAAP8A/wEAAQAA/wAAAAAAAf8AAAEA/wAAAQAAAP8A/wD/AQEB/wAAAQD/AP8A/wEAAQACAAD/AAAB///+AgAB/wEA/wH/AP8BAAAAAAAAAf8BAQH//wD/AP8CAAH/AP8AAAAAAAEAAAD///8BAQEB////AAEAAf8AAAEAAP8A/wEAAAAAAQAA/wAAAQAAAP8BAAH//wAAAQD/AAAB//8AAAD/AAEAAf8BAAABAAD//wD/AAEBAQD//wEBAf8A/wAAAQAA/wABAP//AQAA/wIAAP//AQABAAAB///+AQIBAAAAAP8A/wAA/wAAAQAAAAD/AAACAf///wEAAAH/Af8BAAD//wEBAf8AAP///wEBAf8AAAH///8AAAECAP/+AQEBAAAAAAABAQH///4AAAH/AAAA/wABAQAAAP///wACAQH/AP//AAABAAEAAAAA/wAAAAD/AAABAQAA/wD/AQABAAH///8AAQEAAf8B/wAAAAAAAAAA/wAAAAAAAQD/AP8BAAIB//7/AAEAAAAAAQAA/wD/AQEBAP3/AAIB/wEAAf//AAAB/wAAAQEAAP4AAAIAAP8AAAAB/wD/AQABAP///wEAAf///wEAAP8AAQEB/wAAAf8AAAEA//8AAQEBAAD/AAAAAAEAAf8A//8A/wH/AQABAP8AAP//AAEBAAEA/wAAAAD/AQACAQD/AAAA/wABAP///wEAAP8AAQAA/wEAAAD/AQAB//8AAQEA/wAAAQAAAAAAAAABAAH/AP//AAAAAAABAAEAAQAB/////wABAAAAAP//AQEAAAABAAH/AP8A/wD/AP8BAQIBAP///wABAAAAAQD//wABAQEA/v8AAgH/AQAA//8AAAABAAD//wABAAD/2dnbcHJ2u7m7/wEBAAAAAAEAAP//AAEAAAIALg0BOhIBLw0AJgz/IgsAHQn+/wICAgD//QIDAgMBouoGY8kBAAAAQCQBt2XwBgT9/wAAAgAAAAEAAAAA/wABAAH/AQUCAP4B/+r+AfIAAPkAAPgB9fT/uOQEjdMCyev8/v8BAAAAAAEBAAD/AP8AAAABAAH/AP8AAAEBAP8BAAD/AAAAAAD/AAD/AAEAAP8AAAEABgIBAQEBAwEA/wAC//8ABQEBDwYFHA4DKBMEIRADJhoEGRgEIhoEGQ79A/75AQD///79AAAAAf8A/wEDAP8Az+L+RZnv7vT9AAABAAD+IyMOo6sxJyURAAEA////AAD/AAECAQABAAIA2NX1op7hoaHc+Pb9AAABAAABAAEAAAAAsK6sT1BNAAD/AAAAAAAB////AQABAAD//wABAQEA/wAAAP8AAQD/AAEBAAAAAAAA//8AAQH/sLGxcm9y3+HiAAD/AAD/AAABAAD/AAABAQAAAAkHA0I4CDYtAQMDAAEAAQEBAQABAAABAgEB/QEBAgABAQABAQAAAQABAgECAAAB/wEAAQECAP8B/wAAAAIAAAAC/wAA/wEC/wEAAAEB/v8BAAECAgAB/wD//wAAAAECAf8A/wEAAAAB//8BAQAA/wEB/wEB//8A//b298vO/sHEAO7rAAACAAABAAD/AAAAAAAAAAAAAQABCAEEPhEdTxEgNAkWAwAB/wEBAAIC/gIA/wAC/gD//wICAf8A/wEB/wEBAP8AAAIBAAAAAAAA/gEBAAABAAAAAAH/AQABAAABAAIBAAAAAAAB/v//AQAAAQAC/wEAAAAAAAEBAAAAAf8A/wEAAAAB/wD/AQAAAAEBAP4AAQEB/wEAAAEAAf8C/wAAAAD/AAABAAAAAQD/AAACAAEAAQAA/wAAAAEAAP4AAAEBAAEAAP8BAAEAAQAC/wD/AQABAAIAAP8AAAEBAQABAAEA1fTmoN7Ix+7e/gD/AAAAAAACAAH/AAAAAP8AAQMEWFhWhoWEHx4eAAEAAAABAf7+/gD///8BAgEA/wAAAQEAAP4A/wEAAAEBAP8AAP///wABAQEAAAD+AAABAQD///8BAAEAAAEBAP///wAAAAAAAQAA/wABAQD/AAAAAP8AAAEAAP8AAAH/AP8BAQAA/wEAAAAAAAAAAAAAAAAAAP//AAEAAAEBAP0AAAEBAAIAAP/+AAABAAAAAQAA/////wIAAf8BAAEA//8BAf//AP//AAEBAAD//wABAQAA/wEAAf//AAEBAAD//wAAAQABAAAA/wD/AP8BAAAAAQAAAAH/AAABAAAAAQAA/wAAAP8AAAABAAH+AAABAAAAAAD/AQAA//8A/wABAQEAAAAA/wAAAQAAAP8AAAEBAAD/AAAAAAD/Af8B/gAAAQD//wEAAQABAQAA/wAAAAABAAD/AP8A/wD/AQAAAAEB/wAAAP8AAQEAAAAAAf8A/wABAAD+/wABAAH/AP8BAQEBAAD/AAEBAP7//wAAAQD/AAAA/wAAAQAAAAECAAH/AP8AAAAAAAAAAAD/AAABAAD///8BAAEAAf8A/wEAAP//AAEBAQABAAH+//8BAP8AAQD/AAEAAAABAQAA/wAAAAAA/wD/AP8BAAEAAAAAAf8BAAH/AAAAAAAAAAAAAP8BAAD//wAAAAEBAP/+AQABAAL/AP4BAAEAAAABAP/+AAEC/wH/AQAAAP//AAAB/wAAAQAA/wAAAAAAAQABAAD/AQAB/////wAAAQIAAf4A/wH/AAABAP8AAAAAAAIAAP//AQAA/gEBAf8AAP8A/wAAAQEAAQAA/gEAAP8BAf7/AAAAAAIAAQAA/wAAAAD//wABAf8AAAH/AP8BAQAA/gEAAAAAAQAAAP8B/wEAAQD/AAAAAAD//wABAAABAAD/AQD/AAACAQH///8AAAD/AAACAQAA/wEAAP//AAD/AAACAAAAAAD/AAAAAAAAAQAA/wAAAQAB////AQAA/wEBAAD/Af8AAAABAAEAAAD/AAABAPj4+ZeZm4+Qk+Ti4wAAAAAAAQAA/wD//x8OAlIcAUgTADYSAQsB//8AAf8B/wIBAAEB/gECAgACAAACAP8BAarrBF3JBgAAAHJC/ItO8gAA/v8C/gH/AQACAQAB/wAAAQAAAP8CAQECAP///wD0Af/tAAHoA/73Af31AeXtBIPW/5/j/QD//wAA/wAAAAABAQAA/wD/AAAAAgAAAAEA//8AAQEA//8BAQAAAAAA/h8HABkGAgIAAfH/Au75/w0HAigUBi4YBSARAiIUAiUZAxQXAwYP/gL6///7/QD+/wEB//8A/gH/AQABAQACAQAAAAD/AP8AA4i29Xu49P8A/gEAAP8A/1JUHZWcLwcEBQABAf/+/v8CAQABAgH+/wECAQABBKWg33FtzPz8/wAAAQAAAgEBAWdoZZeWkgAA/wAAAQAAAAAAAAAAAAD/AAABAP//AAAB/wEAAQAA/wAAAQD//wABAf8A/wD/AP8AANzb25KSk5+dnvb49wAAAQAA/wAAAAAAAQAA/wACAQMwKAg8MwMXFQAA/gEBAQAAAgEAAgEBAQEAAQEBAQABAQH/AAEBAQAAAgEBAP8AAQAAAAABAgEAAf//AQADAf3/AAABAf4AAQIBAQAAAQABAQAAAAAAAf4BAQH/AP8BAAEAAf8AAf8AAQEBAf4AAP8AAAABAf7/Afzt7fm6vwDLzAD9/AAA/wAAAAAAAAAAAAAAAQAAAQAAAAcBASwKFD0PGzoOGiAHDwABAv4BAAEAAQABAf4A/wECAQAAAf8BAf8AAAAAAv8CAAD/AAAAAAAAAAABAf///wABAQABAgAA/wABAv/+AAEBAP8AAQEAAAAAAP8BAAAAAAEAAQAAAP8AAAABAAABAQAAAAAAAQEAAP8AAAAAAAEBAQAAAf///gEAAgABAAD//wEBAv4AAAEAAAAA/wAAAQABAQH/AP4BAAEBAAH+AgAAAAABAP8AAAEBAAAAAgACAAD/AAEAAQABAPb8+r3t2qPhyeT27wAA/wAAAQAAAAAAAAAAAAAAACwtLZeVkzs8PAD//wH//f7/AQAAAAAAAAD/AQABAAH//wAC/wD/Af8A/wAAAP8AAQEBAAD//wABAAD/AgAA/wH//wAAAQAAAAAA//4BAQEAAAAAAAH/AP8AAP8BAAH///8AAQECAAH/AP8AAP8AAAAA/wD/AQABAAEAAAD/AAABAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAL///8BAQAAAAAA/wAAAQD/AP8BAAD/AAAA/wIAAf4AAAEAAAEAAAABAP8A//8AAQEAAAD//wEBAP8AAAEAAf//AP8AAAIBAP7/AAABAAH//wABAQH/AP8AAP8BAQIA/wAAAP8AAAD///8BAAEAAAD/Af8B/wH/AQAB/wEAAf7/AAEB////AAEBAQD///8AAAIBAP//AP8AAQAA/wAAAQEBAP8A/wH/AQAA/wABAQD/AQAA/wABAAAA/wD/AAABAQD/AAAAAAABAQEA//////8BAQAAAQEA//8AAAD/AAEBAAD//wEBAQD//wAAAP8BAQEA//8BAQH/AP//AAABAP///wABAAEAAQAA//8AAQH/AP8B/wAAAQEAAAAAAAAAAAD/AAAB//8AAQIAAP7/AAEBAAD/AP8BAQEA/v/+AQABAAABAAH/AP8BAAH/AAAAAAAA/wABAgEAAP7//wABAAEA/wABAQD//v//AgAAAAAC/wEAAAD/Af//AQEB/wD///8BAQH/AP8BAQAA/gEAAAD/AQABAQAA/wAAAAD/AAAA//4BAQEAAAEAAAABAAD+AQAB/wAA/wD/AQABAP8AAQIB//8AAAD+AQEA//8AAAABAQD//gABAQEAAQAA//8AAQAA/wAAAAEAAP8AAAD/AAABAAAAAAABAQD+/gABAAH/AQAB//8AAQAAAAD///8AAAEAAQABAAD/AQAB/wD/AAABAAH/Af8A//8AAQIAAP8B/wABAQD//wD/AAABAAH/AP8BAAD//wABAgEAAP8AAAH///8A/wAAAQEBAAD7+/p5fIGOjo4A/wAAAQAA/wAAAAAaCgJiIQBcHgEhBv8AAQD/AQH/AP8AAAECAf4CAgABA/8AAQIBAf8AAQH/AQKt7ARZxwb/AQSSVPdsP/T//v0AAf4BAQIAAAD+AP8CAgAA/gEAAP//AQAAAf//AQAB/QD/6gP+8f/93QXo1wLwBwK1AASp3P3g7/zy+/8BAAAAAP//AAIAAAAAAAAAAAEBAAEPBwAxDQAoCv80Df8rCP8JAwHx/gHdAAX7DAM1IgQcFwQIDAIEBwMHBgIBBAD///sA/P8AAf4B//8A/wEA//8AAgAA/wEAAAEAAQAAAAH//wAAAgLx9f9LmO/G4fsAAP8BAAABAgCLji1hZSL/AAABAgEBAAL//wEAAgACAAH/AAAAAANuadCjn9oAAAEAAAECBANCPz+7vLYAAP8AAAEAAAAA/wD/AQABAP//AAAAAAEAAP8BAAEAAAAA//8AAQAAAAEAAAD/AAABAAAAAAD///+mpqVzc3bp6ekAAP8AAAAAAAEAAAAAAP8AAAABCwoGPzUFMSsDCgcBAAIAAgAB/wIDAgH//wAAAQEC/wIBAf8AAAIBAQEAAQEAAAAAAAIAAAEAAQD/AQH+AAABAQL/AAAAAAEAAgH/AQEBAAH+AAAAAAIAAP8AAAL/AAAAAQEAAAAAAAL+AAABAQL9AP8AAQL+AQIA/v/64eD7vsEA0dQA/vsAAAEAAAAAAAAAAAEAAAAAAAAAAQAA/wEQBAdNEyNPEyQeBg0BAQH/AQD/AAH+AAEAAQAAAAD/AgAAAAEAAQEAAAIAAP//AAEAAQAAAAAAAQEBAAD/AAD/AAEAAAD//wEBAgEA/wAAAQD//wABAQAA/wEBAQD/AAD/AgEB//8AAAEAAAEAAQAAAAAAAQEAAP8A/wEAAQAAAAEB/wD/AQAAAAABAAH/AQAAAQAA/wIA//8BAgAA/wH/AQAB/wABAQD/AAAAAAIAAP8AAQEA/wD/AQEBAAAAAAEAAAABAQDm+/SR2b7D7NoAAAAAAQAA/wAAAP8AAAIAAP8ZHBuHhYNeXF8B/v7+AAD/AAABAAAA/wD/AQAB/wAAAQABAAD/AAAAAAAA/wAAAv8A/wH/AP8B/wH/AQAB/wAAAP8BAQD/AAEAAP8A/wEAAQAAAAEA//8AAQEAAP8BAQD//gABAQEAAP//AP8AAAAAAAEAAAD/AP8B/wEAAQABAP//AAEAAAAAAP8B/wH/AQAAAAD/AAABAAAB/wD/AQAAAAAAAQAA/wAAAP///wABAQH///8BAAEAAP8AAAH/AP8BAAEAAQABAAD//wAAAAAAAf8A/wH/AP8AAQEAAAABAAD///8AAQEBAAAAAP8A/wEAAQD/AAAB/wAAAf8AAAH/AAEBAP4AAAAAAAABAAD//wIAAP7/AQEBAP8A/wEAAQAAAAEAAP8AAP8A/wH/Af8A/wAAAAAAAAAA/wD/AQECAAABAP/+AQABAAAA/wAAAQD//wEBAf8A/wEAAAAAAQD///8BAAD/AAAAAQAAAAEBAAD/AAAA/wAAAf8BAAIA//8AAAAAAQABAQAA/wH/AP8A/wAAAgD/AP8A/wEBAQD/AAAA/wAB/wAAAQD/AAABAAAAAP8AAAD//wEAAf8BAAL//wAAAAABAf8AAAAAAAAAAAAAAAEAAP7//wEBAQEA//7/AAEBAgABAAAA/wD//wD/AP8BAQEAAAAB///+AQEA/gACAQD+AQABAAAAAAAAAAAAAAAAAP/+/wECAf///wABAAEAAAAAAQAA/wD/AQABAAAA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HAgQ/wAB/wEAAAAA//8BAQQB////AAABAAAA/wAAAAECAP8AAAEAAAAAAAEB/wAAAgAA/wAA/wAAAAAAAAABAAEBAAEAAQAA/wABAAAB/wH/AQABAAAAAf8A/wEAAQABAP8BAAEAAQH///8AAAAAAQEBAAEBAP8A////AAIBAP8BAQEA/wAAAQABAAAAAAEA//8AAQEAAAABAAAAAAEAAP8BAAEBAf8AAAABAQEA4/jwfda02PHlAAAAAAAAAAACAAAAAf39/QAAAgEB/wAAAQAB/wD/AAAAAAAA/wAAAgAA/wD/AAAAAAAAAAABAAAAAAAAAf8A/wIAAf8A////AAEBAf///wEBAf///gABAQEAAP4AAAIA/wEAAQABAP//AAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAP8AAAEA//8AAQIA//8BAgAAAP///gEBAP8AAQH//wEBAP8AAQD/AAABAP8AAAH/AP8BAQEA/wAAAAAA//8AAAABAAD+AQEAAAAB/wAAAgD//wAAAP8AAAAAAAEBAAEAAP//AAAA/wAAAf8AAAABAAEAAAABAAD+AAEBAP//AAABAAAAAQAA/wD/AP8A/wAAAAABAAAAAQEA/wAAAAEAAP4AAQEBAQD///7//wIBAQD/AAEB////AAABAAAAAP8AAgD//wEBAP//AQEB/wAA//8AAAD/AAEAAQAA/wABAP//AAEBAQD//wACAQD//wAAAf8A/wABAQH/AAD//wAAAQAA/wAAAP8AAQEAAAAAAAABAAAAAAAAAf8A/wEA//8AAAEAAf//AQAB/gEAAAAAAQAAAAAAAP8A/wEAAQAAAf8A/gEAAQD//wABAQAA/wAAAQD/AP8B/wH/Af8AAAEBAAD/AAD/AP8CAAIAAP4A/wD/AAACAQD+/wAAAP8AAgIB/wAAAP//AAEBAP///wAAAQEBAQAB/wD///8AAQEAAAAAAAAAAAD/AAABAQAA/gAAAQABAP///wABAQH+AP4BAAEBAAD//wEAAf8AAAD/AQEB/wD/AP8C/wH/AQD/AAABAAAAAQAAAP///wAA/wECAQD+Af8B/gAAAQH//wABAf//AAEBAP8AAQEA/wAAAP8AAAEAAAAAAP8AAAEAAAD//wABAQAAAAABAAAA/wAAAf8AAQD//gEBAQD/AP8AAAAAAAAA/wEAAQAAAP8A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AP8AAAEBAP8AAAICAP8A/wEBAAABAAEB/gABAAEBAP8A/wEAAAAC/gED/QEAAAEB/wEC//8A/wIC/gAA/gMC///+/Lu9+a6xAf36/wADAAAAAAD/AAABAAD/AAABAAAAAAAAAAAAAAAAAAEBAAD/AP//AAABAAD/AAAAAwECLA0YQRIfOxAfHAgO/wEAAP8BAAEAAP8BAQIA/wABAAAAAAAAAAEB/wAA//8AAQEA/wEBAP//AAIBAf4BAAEAAAAAAgAA/wEBAP8AAAEBAAAAAAAA/wAAAgAB/wAA/wABAQH/AAAAAAABAf///wEBAAABAQAAAAEAAAAB/wAAAQEAAP8BAAL/AP4B/wEAAQEBAP8AAAEBAAAAAQAA/gAAAgAA/gAC/wH/w/TiiNO08Pj2AAH/Af79/v8B/wEAAQAAAAAAAAAAAAAAAP8AAAEAAAD/AP8BAAEAAP//AAECAP/+/wABAQAAAAEAAQEAAP7//gAAAAEBAQAAAAEA//8AAAAAAAD/AQAAAAAB/wABAQD/AP8BAQD+/gEAAQABAf//AAABAAEA/wAA/wABAf//AAAA/wEAAQAAAQAA//8A/wAAAQAAAAEAAP//AAAB/wEAAf///wEBAf8A/wEAAQAAAAEA//8AAQD/AAABAQAA/wABAAD+AAABAP8A/wAAAQEA/wAAAAAAAQAAAP8AAAH//wABAQAAAAABAAD/AAH/AP4BAQAAAAEA//8BAQD/AAH//wACAP//AAEBAP8A/wH/AQAA/wD/Af8A/wEAAf8AAAABAQH//wABAf8A/wAAAAABAQEA/gD/Af///wAB/wEAAf//AAECAP//AAEAAf8AAAAAAAEA////AQEBAAAA//8AAQEAAAAA//8AAQEAAAAAAP8AAQIB////AAD///8BAgD//wEBAP8AAAAB/wH+AQAB/wEAAf4AAAL/AP8B/wAAAQD///8AAAEAAAAAAQAB////AAIBAf8A/wAAAQAAAP4AAAEAAAEAAAEAAP8A/wEAAf///wEAAf8AAP8CAAAAAAEAAAD//wAAAP8AAAEAAQAA////AAABAAEAAQAAAAAAAP8AAAH/AAABAP///wAAAQAA/wEAAf8AAAEBAAAAAP8AAAEAAP4B/wL/AP8AAQAA/wEAAf8BAAH/AP8AAAD/AAEBAP8A/wAAAQEAAQAA/wAAAQH/AP8CAP/+/gAAAAEAAP8BAQH/AP8AAAECAAD+AAAAAAABAAAA//8AAAEAAQAAAP8AAAEAAAD/AP8A/wEAAf8B/wEBAQD/AP8AAQAA/wAAAAEAAAABAAEAAP8AAAD/AAAAAAAAAAAAAQAB/wD/AQAAAAABAAD/AAAAAAAAAP7+/qenqGRlZ/n49wAAAE5NS25saAgHBwEDAQD/AgMCAvr7/HR2esrNz1wmBKA8/AICAv8DAAACAAAAAAECAgABAAAFAAADAQABAAAB/wACAAABAQABAQAB/wD/AgABAAEAAEa8GNcKBBwCAB4OBAQM/FQX+Ebi8AT5AfsKBgILAwUJAwAD/wIJAAEM/wEK/QAI/QES+QAV+P8IAAABAf8C/wD/APjvAP3VCP3kAvLtAPz8A/4AAP7/AAMBAgsB/QUDAPv+AqDa/4/U9/X6/S0bBZZXDjEcBgAB/gAAAP8BAAEA//8B/wEBAP//AQEA/gAAAff3AOTzBAb/AQj6/ePnAO3t+v7//wgA/gz//g8EABMEAAsC/wD0/fr8/vz7AOb/Bq3r/9vz/M7x+9fy+gAAAAAAAgAAAAAAAQAAAAAAAAsKCjAxMGBgXVpaVgoJCv8BAAEA/wAAAAAAAAAAAAAA/wAAAf//AQABAAH///8BAAEAAP//AAEBAP8AAQD//wEBAQAAAAD//wAAAf8B/wH/AAABAQAAAAD/AP8B/wH/AAABAAD/AP8AAQABAAEAAP8AAAAAAN7e35eVmKGhoezt6wAAAAEAAf8A/gAAAQAAAQAA/wAAAAEICAcpIwsvKgglIwAFBAEAAAABAQAAAf8BAAEAAQABAQEAAQEBAf8A/wABAgABAQAAAP8AAgABAQD/AAAAAQECAP7/AQABAf8AAAEAAv8BAAACA/7/AP8BAf8AAv4BAgABAP4AAAACA/sDAfz//wL///zDxvqpqgD6+f8AAAAAAQAAAAAAAAABAiEjJOfl5fj39gAA/wAAAQAA/wAAAQABAAD/AAAAAAAAAAAA/wAAABMHCjIPGjYQHDgOHBYGDP4AAAD/AP4BAgAA/gABAQAAAAAAAQAAAAD/AAABAAABAAD/AQABAAEBAQAAAQEAAP//AAABAAAAAQABAAH/AQAB/wAAAAD/Av4B/wEAAQAAAAABAAH/AAABAf8BAAEA////AQAAAQABAQAA/wEAAAD/Af8AAAEBAP8AAAABAAIAAf8AAQEAAAAAAf8BAQD/AP8AAP4EAaLrz6DXwfr9+gH+/f4AAAAAAQAAAAD//wABAQAAAAAAAP8AAAEA/wD/AAABAQH/AP8BAQAA/gD/AQAA/wABAQAAAAAAAAAAAAAAAAAAAAAB////AQAAAAEAAAEA//8AAAH/Av8B/wD/AP8BAAD/AAEBAAAAAAD//wABAAD/AQAAAQAB/wABAAD/AAABAAD+//8BAQAAAAIA//8AAQD//wABAv/+/wECAAAAAP8AAAIAAP7+/wECAQAAAAD/AAEAAP8AAAEBAP4AAAAA/wEAAf8AAAEAAAD/AAAA/wABAQAAAAAAAQD///8BAAEA/wABAAD/AQD///8AAAEBAQAAAAD/AAABAAH///4BAQEAAAH/AP4BAAEAAP8AAAEAAf8AAAEA/v8AAQH/AAEAAP8BAAAAAAAAAAAAAAD///8AAf8AAAIAAAAAAAAAAAAAAP8B/wH/AQAAAP//AAAB//8BAQIA//8AAQH///8AAAAAAQAA/wEBAf/+AAAC/wIAAP4AAAEAAQAA/wAAAQAA//8AAQH/AP8C/wH+AQABAAAA/wD/AAABAQD///8BAQEAAAD//wABAf8BAAD/AAD/AAEBAAH///8AAP8BAQEAAAAAAAAB/wD/Af8A/wAAAAEAAQAAAAAAAP///wEBAf///wAAAAAAAQEBAAAAAP//AAH/AAACAf8A/wL/AP8A/wAA//8AAQEBAAD/AAABAQD//wEBAv///v8BAQEAAP8AAAEAAP8AAAD//wEAAP8AAAEAAQAAAAAAAAAA//8BAQEBAAD//wEAAP//AQABAAABAQD+/gAAAP8AAQAAAAEBAAD/AAAAAAAB/wH/Av8B/wABAQD+//8BAAEAAAH/AP8A/wABAAAAAQAAAAAAAAAAAQAA/wH/AP8B/wABAQD//wABAgD//gEAAQD/AAAAAAABAP8AAAAA/wEAAv8AAAAA/wAAAAEAAAD/AP/BwcFYWVvq6OgAAgFRT05pZmIJCAgBAQACAQMAAwECAAMDAwTAwcJ+goYF/vi6TQQ2FwD/AgEBBQEABQAABP//AQEBAAEBAgD/AQAB/wAAAAAAAwEA/wH//v4A/wEBAQLq9QNNwxPqEgUP+wAcCwMWDvwnE/Yc7voG+v8IBAQMBgEfDwMaCP0C//4BAP4BA/4BCP8CEP7/FvwAE/n/DP0BAQL97wL21AX+5AP07gD6/gL9AAEB/gH/AP8CAQAPBf4JB//9+gD0+QTB7AKP0ffV7foiFQOaVg46IgQAAAH/AwIAAv4AAAAAAP8AAAEBAgAAAAD6+f/v7wEM/vwG+/sC/f8B/QAA+P0A+P3/+/3/+v4B9/4A/P/9/AD+/QD/AAD+/f/5/gP//gGn6f5u2vn/AAEAAAIAAAIAAAAsKytBQkBRUk8/Pz0CAQEA//8AAQD/AAEA/wAAAQAAAP8AAAABAAAAAP///wEBAQEAAAAAAAD/AP8B/wAAAQAAAAAAAAAAAAAA/wEAAQAAAAAAAAAAAAAAAAAAAP//AAEB////AAEBAAD/AQAB////AQABAAH//wAAAQAAAAAA/wDQz8+Pj5KsrKv4+Pj/AP8AAAEAAAAAAP8AAAAAAP8AAAAAAgIGIB0IMy4KKCQFDw3//wEBAgH//wEBAgEAAAABAAD/AAEAAAEBAQEAAAEAAAEAAAD+AQABAQH/AAIAAQABAQIA/wD+AAAAAgL/AAAAAAL/AAH/AQL+AAEAAQD+AQL+AgH8AAH9AgEAAQIB/wD6w8X7qaf/+fkAAAAAAAEAAQEA//57fX5OT03IyMjAwsLAvb/v7e4AAQAA//8AAAEAAAAAAAAAAQAAAAEAAf8A/gABAAAdCxA5Ex85DRwuDBgJBAYA//8AAAH/AQD//wAAAQEAAP8AAQEA/wAAAQABAAD/AQEA/wABAgH/AAAB/wAAAAEAAQAA/wABAQEBAQD//wD/AQAB/wEAAQAB/wD/AAAAAAD/AQEAAAAAAAEBAf8AAAH/AAAAAAAAAAABAQEBAAAAAAH/AAAAAAABAQH/AAH//wABAQAAAAAAAAH/AwHxBP530rDT694B/f7+Af///wABAQAA/wEAAQAAAAAA////AQEBAQD//wABAAD/AAAB//8AAAH/AP8BAQEAAAAAAP8A/wEAAAAAAQAAAQD///8CAAH//wABAQH///3/AAICAQD/AP8AAAEAAAAA/wAAAQAAAP8AAAEBAAD+AP8BAAEAAQD//wAAAAEAAP4BAAAAAAABAAH/AAAA/wAAAAD/AAABAAAAAAAAAQAA//8BAQEA/wD/AQABAP//AAEAAAAAAAAA/wD/AAABAAD+AQACAAABAAD/AAD/AAECAP///wD/AQAB/wAAAQAAAP8AAAIA//4AAAH/AP8BAAAAAQAB/wH/AQAAAP8AAAEB////AQEA/wD/AQAAAAAB/wAAAQAAAP8A/wD//wACAgEA/wD+AAAAAAEBAP8AAP8AAAAAAQEB/wD+AP8BAQEA////AAEBAf///wABAAH/AQAB//8AAAD//wEBAgAAAAAA////AAEAAAAAAQABAP8AAAEBAP//AAEAAP8AAAH/AAEC////AQD/Af8B/wEAAAAAAP4AAQIA/wEAAP8AAP8BAAH/AAAAAf8AAAEA/wAAAP8AAAH//wAAAQAB/wAAAf8AAAEA/wD/AQABAP8A/wEAAQAA/wEAAf4AAAD/AAAA/wEBAQAA//8AAQAA/wIAAP7/AAAAAAABAQAAAAEA//8AAQEA//8AAAEAAP8AAAD/AQEBAAAAAAAA//8AAQEAAAAA/wD/AAAAAAAAAQABAAAAAAAA/wD/AQABAAD///8BAQEA/gAAAQAAAAD/AAAAAgAB//8A/wH/AAABAQEA////Af8A/wIAAf4BAAEA////AAAAAQEA/wAAAAABAAAAAQAAAAD/AAAAAf8B/wH//wABAAD/AQABAQD//gABAQAAAP8A/wEAAf8AAAEB////AQEA//8AAQL///8BAP8AAQEBAAEA//8A0tLSXV1g1NPSBggHWFZTXltYBwYGAAAA//7//v//AwICAwUGBAIDAwICkZKUpKmrQx4EpkkDEwj9AAcCAAcBAAMBAAEB////AQEBAAAAAP8AAQAAAP8B/wAAAP4BAQD//wECtdsMbtwKBBQFAvwBAAQA+g4CA/n6/eP3Bff9CAD/CAL+FAQBJQ0DLhUDNBcAIQ/7CAT//wD/AQQAABH+Ahj5//7/9uAB++UB8/AA/f0C/v4C//8BAAEA/wAAAAEACQX+CQkABv39Av4DAPwC4PcAcMf6xOj4FwwApFkRPiUF/wEAAAECAAD/AP8AAP/+//7+AP8AAfr+APv+//8AAf79/wABAf0A//X9APb7APz+/vf9APf///z//fr/Af4A/v4BAQD/AP8A/v8Du+7/V9T7+f4AAAEBPz5BdnVyODo3ERARAQAAAAEAAP///wEAAP8AAAEBAQAA/wAAAQD+AAABAAAA/wAAAQAAAAABAAAA////AAEBAQD/AAABAP//AAEBAAAA/wAAAQD/AAABAAD//wAAAQAAAAABAAD///8AAAD/AQECAP8AAAEAAAAAAP8AAAEAAAAA/gD/AQABAAAAAAAAwb/Bm5iar7Ky9/j4AAD/AAD/AAAAAAAAAAAAAAAAAAD/AAAAAxMRBygmCi8pBx0cAQYFAgAB/wIBAf//AQAC/wEAAQEA//8CAQEA/wABAAEBAQAB/gIBAf4A/wEBAAEBAAAA/wAB/wEAAAACAAAB/wAC/wIA/gAB/wAD/gEB/QEB/QIB/gEBAAECAf8A+bGx+rSzAAAAAAABAAAAAAD/NDY2uLi1ERESAP7+3N3cwsPGtri6vry88e/vAAABAAAAAAAAAAIBAAD+AP8AAAAAAf8BAAIABAICJAsTMQ8aLg0XMQwaDQIHAAEAAAAB/wEBAAEBAP//AAL///8AAgACAAAAAQEB/QD/AgEBAAAAAQAB//8AAAEBAQAAAAAAAAAB/wEAAQAAAP8AAAEBAAAB/wD/AAIAAP8BAQEBAP///wD/AQEBAAACAAD/AQAAAAEA/v8CAgD//wACAAEAAAD/AAAB/wABAf8A/gIB/AUCm+nQpda6Af39/QAAAAAAAAEBAf//AAEAAAABAAAAAAAAAf8A/wAAAAD//wEBAAEAAf8AAP8AAAAAAAEAAf///gAAAAABAQEA/wAAAgAA/wD/AQAB/wD/AQAA/wAA/wEBAf4AAAAAAAEAAAAAAf8A/wH/AAAAAP8B/wEAAQD/AAEA//8AAAAAAAAAAf8BAAAAAAABAAD/AAD//wAAAQABAAEAAP//AAAAAQAB/wAAAAEAAAD/AP8A/wABAQEA//8AAQH/AP8BAAL//wABAP8AAAAAAgEB//7/AAAAAAEA/wAAAQAAAAAAAAAAAAEAAP//AAABAAD///8AAQEBAQAA/////wABAgD//wABAAH/AP8BAAEA/wABAQD/AAD/AP8BAAAAAAAAAAEAAAD///8BAAEAAf8AAQAA/wAA/wAAAAEBAP//AAEAAP8AAAH/AAEAAf8BAAAAAP8A/wD/AAABAAAAAQAAAAAA/wAAAAAAAQAA/wD/AQAAAAAAAAEAAf8A/wEB/wD/AQEAAP8AAAABAAAAAAAAAAAAAAAA/wD/AAABAQD//wABAf8AAQEA/wAAAAAAAAABAAD+AAAB/wABAQD/AAAAAAAAAAABAAH/AP8A/wAAAAD/AQABAAD/AAABAP//AAICAP7//wAAAAEAAf8BAAH/Af8A/wIAAP////8A/wAAAwEB////AAIBAP8BAAAAAAD//wD/AQACAAD//////wEBAf8AAAAAAQEBAAD/AP8AAAEB/wAAAAD+//8BAQEAAP8AAQD/AAABAP//AAEB/wH/AQAA//8BAAEAAAAAAf//AAEB/gAAAf8AAAH/AgAAAAABAAAA/wAA//8AAQH/AP8BAP///wIBAQAAAAAA/wAAAf//AAEBAAABAAD/AQAA/wEAAP8AAAAAAAD/AAAAAP8BAQH//wACAf8A/wEAAQAA/wH/Af8AAOnr6kxNUs3KxgABAWVjYltaVgMCAgAA///+APn6+vj5+gEBAQcGBQwKDAUEBPb29pOXl7Cztl4zC4dBABUM+gD/AQD+/gACAwABAf8A/wD/AAD/Af///wH//wAAAgH/AQD+AP38BXzFDqz5AwALBvf6/P4CAQYL/x/+/erc+fj5/fX6+/P6/f4A/wIBAAUBAxQJBT8cA10t/Doa+wP/Af7//v8CAvz2/vf0APX0//z9AQAAAv7+AAAAAf8AAf8A//8BAPwAAvX+BBME+xYI/QT/Av8BAun5AX7K+azc9iAQAp1SDjsiBP78///9/QIBAQD//wH/AAEB/wACAQD/AAAB/gD/AAD9/gAAAP/6/wD5/gH4/P/7//76/wH6//76/v36/v/5///+AAH+/wAAAtf1A03Q+eX6/wAAACUmJ8vJxg8QEP///wEBAAD/Af8AAAEB/wAAAAAAAP8AAAAAAQAAAAEA//8AAAEAAf8A/wEAAAAAAAD/AAABAAAAAAAAAAAAAf8A/wEAAAAAAQAA/wAAAAAAAQAAAAAAAP///wEBAQD/AAABAAAA/wD/AAABAQD//wABAQD/AAABAAD/AP8A/wEBAQAAAP8AAAH/ALu7u4eHir/AvgAAAAAAAAAA/wAAAAAAAAAAAAAAAQAAAAABAAADAgcfHgovKgorKQQQDv8A/wEAAgABAAABAgABAAAAAQABAAAAAgABAP8AAv8AAQEB/wAAAQAAAf8AAQABAQD/AP8BAgABAf//Af4BAf8CAv0AAP8BBP0CAP7/AP0CAgEBAQD3+PeenvzPzwAAAQAA/wAAAAAAAImKiHR1cwAAAQAAAAH/AAEBANXX17S0t7CwssnIyP///gD/AAABAAAA/wAAAQAA/wACAQH+AP8BAAAAAQH//yALESgNFi0MGDANGBsIDwYBAv8BAQEAAAD/AQABAP4BAAEAAgAAAAEBAAEA//8AAQAAAP8AAQEBAAD/AAD/AAABAQAAAQAAAAACAAEAAf4BAQH+AAAA/wACAAD/AAAAAAABAQAAAAAAAP8BAAEAAQAAAQABAAD/AAAAAf8CAQD//wEAAQD/AP8CAfoEAcT37HzJoAH+/v4A/wH/AP4AAAEAAQAAAAACAAD+AAAAAAAA/wABAAD/AQAA/wABAAH/AP8BAQAAAP8A/wEAAQAAAAAAAAAAAAAAAAAAAAEAAAD/AP8BAQH///8BAQAA/wD/AAAB//8BAQH/AAAB/wD/AQAAAAAAAQABAAD+//8BAAAA/wAAAgD//wEB////AQIBAP8AAAABAQH//v8AAQH/AP8AAAABAAAAAAEA//8AAQH///8BAQD/AAAAAAABAAABAAD/AAD/AP8AAAABAAEAAAABAAD/AP8AAAEAAAEAAP8AAAAAAAAAAQAA/wAAAQABAAD/AP8A/wH//wABAf///wEBAQAAAP8A/wH/AAACAQD+AP8AAAAAAAAB/wH/AP8BAQEAAAD//wABAAD/AQAAAAAA/wABAAAAAQAAAP8AAAH///8BAAH/Af8AAAEBAAD///8AAQABAAH///8AAQEBAAD//wAAAf8BAAL///4AAQAAAAAA/wEAAAAAAAABAAD/AAABAQAB/wD/Af8AAAIAAP8A//8AAQEBAP/+/wABAQH///8BAQH/AP4BAAIAAAEAAP4AAAD/AAEB/wABAQD/AAABAAD/AAABAP///wEAAQAA////AAEAAP8BAAEBAP/+AQEA/wAAAAAAAQAAAP8B/wEAAAAAAQD//wAAAQABAAAA/wAAAQD//wAAAAABAAABAQD+AP8BAAH/AQAC///+AP8A/wECAQH+AAABAAAAAAAAAAH/AP8BAAAAAAD/AAAAAAABAQD///8B/wAAAQH/AP//AAAAAAECAAD//wABAf8AAAH//wABAQD/AAACAAH+//8AAP8BAQEBAAH/Af////8BAAAAAAAAAAH//wEBAf8AAP8AAAAA/wEAAQAAAAAAAQAA//8AAAIAAAABAf//AAEA/v8AAQD/AAAAAAABAAEAAf8A/wH19/ZbXWGyrq4AAP5ERUR3dnAIBQcBAP/+AP/+/P72+vj7+/4CAQEBAQAKCAoLCQkEAwQDAADIysh+jY8J++lrLQlMKwYmGP0DBP8A/QAA/gD//gD/AP8B/wEA/wABAQIAAALg7gWs3AmM1AH1//0YC/5BDPw/DP4jCP8cBf7v+AH6AP/t+v/l+AHU8//G7v/a8vz8/wD+AAEKBgU4IQhOIvxHIPkN/AHx7P77+gL/AgH+AP8A/wIAAP//AAIAAP///wD/AAD8AAD8AgIYBf0KAwAEAAAAAP8B/wLt+wVpxfe94vcTCAGyWw4xHQMAAQABBQIACwMACgMABwEAAgAAAQAAAP8AAAAA//8A+/8A+v8A+f3/8fr+5vcB+P3//P////8B/wD++v//9f7/+f7/AAL3/QRTz/y/7fsAAAACBAXPzswuLSsAAAEA////AQABAAEAAP///wAAAQABAAEAAP8A/wD/AQEBAP8AAAAA/wAAAAH/Af8AAAAB/wAAAAEAAf//AAABAAD/AAAAAAABAAH/AP///wECAQAAAAAAAAAA//8AAQD/AAEBAP8AAAAAAAAA/wD/AQABAAAAAAH/AAAA//8BAQEAAAD+//8BAQEB/wDz9PO6uLuusLCzs7P18/P+AP8AAAAAAAAAAAAAAAEAAP8AAAAAAAAAAP8DExEJJyQLLSoIIB8ACAUBAAEAAAIAAgAB/wD/AQIBAgL+/wH/AAACAQD/AAEAAAH/AAEAAQAAAAD/AAL/AQAAAAEAAAL+AQD9AAL+AQIBAQH9AQH9AgL/AAH+AP8A8/H4naH81dP/AAAAAAAAAQEsLC3Cw8APDxABAAAAAAAAAP8AAAAB/wD29/a1uLmtrbG5uLfw7+4A/wAAAAAAAAAAAgEAAAAAAAAAAAAA//8BAAH/AQAAAQAJAgQvDxkwDRkpCxUpDBcNBAcAAAAAAQEAAAIAAQAA/wAAAAAAAAAAAQH/AQABAAEAAAAAAAABAAD/AQEAAAEAAAAA/wD/AQAA//8BAQEBAAAAAAH/AQD//wABAQAAAQAA/wL/AQABAAD/AQEAAAEAAAABAAD/Af8B/wD/AAH/AQH6AwHnBf1lxJoB/v3+/wAAAQAAAAEAAP8AAAEAAP8AAAEAAAAAAAAA//8AAQEBAAD//wAAAf//AQEB/wEAAP8A/wEAAQD//v4AAQEBAQD/Af4B/wEAAAEBAAD//wEAAf7/AAECAAD+AAEBAP8AAQD//wEBAP8AAQAA/wAAAAD/AAABAAD/AAAAAQAB/wAAAAAAAAAAAAABAAD/AAAA/wEAAf8AAAD/AAABAAAAAAAAAAAA////AQEB////AAEAAQAAAP8BAQIA//8A////AgEC////AAEBAAD/AAAAAP8AAAAAAAEBAAD//wD/AQAC/wD+AQABAP8AAAEA/wABAP//AQH///8BAAEAAf8AAAEAAP//AAAB/wD/AAIAAP8BAQD+AAACAAEA//8AAAAAAP//AAEBAP8AAQAAAAD//wEAAAAAAAABAAD/AP8BAAH/AAAAAQABAP///wEBAQAAAP///wAAAAEAAP8B/wEAAgAAAAAAAP8AAAEAAAAA/wAAAf8A/wABAQH///8AAQEAAP8AAAAAAAEAAAABAAD/AP//AQEBAAAA/wAAAQH//v8BAQABAAD/AP8AAAEAAAAAAAAAAP8AAAEAAAD/AP8BAQH//wAC////AAAAAQEAAP///wEAAf8B/wEAAP8AAAD/AAABAAEAAAAAAAEAAQD/AP4BAAAAAAEA////AAAB/wAAAQD/AQEB/wAAAgAA/wD/AAAA/wAAAv8A/gAAAQAB/wH/AP8BAAEAAf8AAAEA/wEAAP4AAQAAAAEAAP8A/wAAAQEAAP8A/gH/AQACAP//AAD/AQABAAH/Af8A/wIAAP4AAAEAAAAB/wAAAAD/AP8AAQEBAQAA/wABAQD//gAAAf8AAAAAAAEA/wAAAgD///8CAQH+/gABAAAAAQAAAf///wEAAAAA/wEBAf4BAAEAAQD/AAAB/wEA////AQABm5yeZ2dnAP//EhQUi4mDJCAhAQIBAQIAAP//+/z++vr6/f7///7/AwICAwEBCgoKCwoKBAMEAQH/yMzLg5qY4dLZEQH+JxMGJBUKAQAD+Pv/APz+DxIKExkT+v0C8Pz/7vT83/D82+37AgD6WRX5chz9GgX9/wEAAQAC/wQAAgEAAQICAgAAAQEA+/0C7vwAye0Buer/xO/76Pj+/f8C/wICJg8ASxn+RBT/GAkAAwICAAEAAQIA/wABAQAC/f8AAP8BAgIADwj9EQsABQf//fYA/fkC//8A/v8AAP4C4fYEaMX2y+j1QR4FrWENCSMMABYDAAP/AP8AAAEAAAABAP/+AAABAAAAAAAAAAD/AAAAAP4AAP79/uP4/tr1AO77Af7/AAEAAQACAP4AAPn+//wAAP4CY8r9oeL5AAD+AwMFycrHMzIx/wAAAQABAAAAAAD/AP8AAAAA/wEAAQABAAAAAAD//wAAAAAAAQAAAP8A/wAA/wABAQEAAQAA/wD/AAABAQAA/wD/AAAAAf8A/wEBAAD/AQAA/wAAAAABAAAAAQAA/wD/AQABAAAAAAAA/wD/AQABAP8AAAEAAAAAAAAAAP///wEBAQAA//8AAQAA/wAAAAD/AAABAQAA1dXVtLa3p6ao0dHQAAD/AAAAAAABAAD+AAAAAAABAAAAAQD//wEAAQACBR8bDDIxCisnBREPAAEBAAABAAACAQMC//8AAAEB/wD//wACAQEB/wAAAgEC/gAAAAABAAEB/wAB/wAA/gEB/v8CAAEB/wEB/gEB/QID/AD/AAIC///+/+rp9ZCT/uvqAAABAAAAAAAAmJqZZmVkAAAAAQAA////AAEBAAD/AAAAAAABAP//1tfXs7S2ubi5x8fH+fn4AAAAAAEBAAAAAAABAP8AAAH/AP8BAAEAAAAAAAD/AAEAAv8BIg0TJgsULQoWKgwYJQwVAAH/AgEBAAEBAP8A/wAB/v8AAgIBAAD/AAEAAAADAAD/AAEBAP//AAABAf8AAAAA/wEBAgH//v8B/wEAAv8AAAIB/v//AQEAAAABAAECAP//AAEB/wAAAAEAAAD/AP8CAQD//QEB/AIB6AT6asqhAQYk+dsB/v39AAAB/wEBAf//AAAA/wEAAP8AAAEAAf8AAAEA//8AAgH/AAAC/gD/AP4AAgEB/wAAAAD/AAABAAL/AP8AAAAA//8AAQD/AAEBAAAAAAEA//4AAQH/AAABAAABAQH///4AAAH/AQEB//4AAAH/AAABAQAA/wD/AAABAAAAAAAAAf8A/wAAAAAAAAEAAAABAP///wD/AAEBAP//AQAAAAEAAP8AAAEBAAAA/wAAAQAAAP8AAAIAAP8AAAAAAAAAAAAA////AAACAAD/AQH/AQAB/QAAAgAAAP8AAAEAAP//AAEB////AQEAAP8BAAEA/wAAAQAAAQAB/v//AQEAAAAA/wD/Af8BAAD/AAEB/wAAAQAAAAD//wEBAQAAAP8A//8AAAIAAf8A//8AAQEA/wD/AP8AAAAAAAEBAP0AAQIA/wEAAf///wEBAP//AAAAAAEAAAAAAP8A/wAAAQEAAAABAAD/AP8BAQH/AAAC/wD+AAABAAEBAf7/AAABAAH///8AAQAAAAAAAQEA/wAAAQD//wAB/wEBAP7+AQEBAAAAAAAA/wAAAP4AAQEA/wEAAQEBAP//AAAAAAD//wABAf//AAAB/wAAAAAAAAEAAAAAAQD///8AAAEBAP8AAQAAAAEA//8AAQD//wEAAAD/Af8BAAAAAAAA/wABAAH/AQABAP8AAAEAAP8A/wAAAAIAAP//AAABAAAAAAAAAf8A/wH/AP8BAAH/AQAAAP8AAAEB//8AAAAAAAAAAAEBAP/+AQAAAAAAAAEAAAAB//8AAQD/AAEBAAAAAP///wIBAP8AAf///wEBAQAAAAD//wAAAP8AAAABAQEAAP//AAEBAP///wEBAP8A/wAAAAAAAgEA/wAAAf8A/wD/AAECAQD/AQAA/wAAAAEAAP8AAAABAAAAAAD/AQAB/wAAAAAA5+bnQkVH2dfVAAACaW5pUU5LBgECAgICAAAA/f/9/vz++/z9AQAAAgICAQAABgUDBwYICQkJAwEDAP8A///93u3mj8KqyMjQ/+v2/t/z/fT+AQD/AQQDESQcBxUP/v79AQEA/Pr98Ozx/vL0VQz3gyf/EAkB/wD+AAD/AgMBAQIDAQH/AQIBAgMAAQACAAAAAf7///8B+vsC0Ov+sOn+u/H/5vwD+f8B/Pz9Fgf9VR0DThv/FQgCAgQAAgEAA/8ABAMBCgz9EBoBBxoAAAcD/f8AAu0C/er++uv///wAAAECAP4C0e4DYsPw4fL6kUoQZFMQARwCAQD8AAABAAEAAAAAAAH/AAEBAAD/AAAAAP8AAAD/AP4AAP//AAEAAPD9/dr2AOT3Afn9//8AAAEBAQAAAP4AAPoBgs79gtj5////AAAApaSkWltZAAAAAP///wABAQEAAP8AAAEAAAAAAAAAAAD//wAAAQABAAD/AP8BAAH/AAAA/gABAf//AAEBAQD//v8BAgEA/gAAAQAAAQAAAAAA////AQEA//8BAAD+AQAC/wEA/wAAAf//AAABAQAAAAEAAAAAAAAAAAAAAAAAAAAA//8AAQEAAP8A/wD/AAEBAQD/AAAB/wD/AP8AAP8AAQAA9fX1paepoaChx8fHAAD+AQAA/gABAAD/AAABAAD/AAH/AP8AAAABAAD/BA8PCC0pCy8rCiEhAQcGAP7//wEBAAACAAEAAQAAAP8BAAIB//8BAAAA/wIAAAAC//8BAAAAAAAA/QID/wABAAAA/gMC/gAB/AIB/gABAAH/Af8B+sPB9KSnAP78AAABAAADOjs5uLe1DA0NAP//AQEA/wABAQD///8AAAEA//8AAQEAAP8BAQH/vL2+pairuLi46OXlAP8AAAEAAAEAAAAAAP8AAAEAAP8AAAH/AAAAAP8CAAH/AP8AAAAACwQGIwwRFwcNJg4WJQkUIQsSEgQLBP8A/wEBAAABAAIDAQD/AAEAAAABAP8AAAAAAAAAAAEB//7/AgEB/wIA//8AAAEAAQAAAAAB/wAAAQABAQEAAAAB/wD/AAEBAAAB/wD/AAAAAAAA/wAB/AQA1/juasykAf79/QABAf8A/wEAAAABAQD/AAD/AAABAP8AAAAA/wH/AgAA/wABAP8A/wABAQH/AP///wEBAQD/AP8BAAH/AAABAAAAAAD/AAEBAAAAAP4A/wEBAf///wEAAgD//wAAAAACAQD//wAA/wABAv//AAEA//8A/wEAAQAAAAABAAAAAAH/Af4A/wEAAAEBAf///wD/AAAAAAEAAP8BAAAAAAEAAf8A/wABAAD//wD/AAABAAAAAAAAAP8AAAH/AQEBAf//AP8B/gAAAQH///8BAQABAAD/AAD/AAAA/wAAAAEAAAABAf8AAAH/AAABAP//AAEAAAABAQAA/gD/AQAAAP8AAAEB/wABAAD/AP8AAAEAAAABAf/+AAAB/wD/AAEBAAAAAQAA//4AAAEAAAAAAQAA/wAAAAEAAQD//wAAAf8BAAAA/wD/AAEAAAABAf8A/wH/AAEBAf7//gEAAgABAf4A/gIAAQAAAAH/AP4B/wD//wAAAgABAAEBAAD/AQAAAP8A/wAAAAH/AQAB/gAAAAD/AAEBAf////8BAAD/AAABAQH///8AAQEBAAABAP///wEAAAAAAv8A/wD/AAEBAP8AAAAAAP///wEAAAEAAAABAQD//wABAP8AAAAAAQD/AAEAAAAB//8AAAH/AQABAP//AAAA/wEBAP//AAEBAQD/AAEB//7/AQAA/wEBAP8AAAEAAf///wEAAP8B/wH/Af8AAf8A/wEBAQD//wABAP//AAEAAAAAAQABAAH/AAAAAAABAAAAAAAAAP8A/wEAAP//AAECAQAA/wAAAAD+AAABAf8A/wEAAAAAAAD/AQAAAAAB//8AAAD/AAABAAAAAQD+AAAC/wEAAQD/AP8AAAEB//8AAQEAAAD/AAABAQAA/wABAAAAAAD/AP8AAQEA/wAAAQAB/wEAAP8AAf7//2lpbJuZmgAA/jg9PXBvaRANDQgFBAD+Af7+/vz//QD//wICAgQBAwIBAgYDAwMDAwICAQADBAEDA//+/e7w8tDl2sL31toV7PcM/fru9/3c+f7k+f7v/wv3BwD6/v73/vfv8Pbt8fvy9TsH/I4uACETBAEAAQAC/wEAAQAA/wICAwABAQIDAAQG//8BAAEA/gL/Af//AP/8Avz6AvH1AcLp/4fp/tn3AAQGBP39//34+j4VAXIm/iQRAQ4UBAcTAQoUAgcS/wIHAAABAf8E/wABAAAA/wDy/vzXAvvnAAD+AQAAAf7+Aq7mAXXI8y8YBq5TBwovDQIWAAAB/AAA/wABAgAA/wACAQAB/wAA/wAAAAAAAQD//v///wH9/gAAAQD1Af/s+f/d9gDr+gD9AAABAAACAAD7AprR/mzQ9f3/AAAAAXFzcY6MjAAA//8AAAD/AQEB/wD/AAABAP8AAAEAAAD/AQAA//8BAAAAAAAAAAEAAf8AAAAAAAH///8BAAEAAQAAAP//AAAAAAEBAAAA/wAAAQD/AP8BAAH/AP8A/wEAAf8BAAD/AAEAAP8BAAH/AP8AAAEBAP//AAH/AAABAAAB/wAAAAAAAQD/AAABAP///wEBAQAAAAD/AP8A/wAAAQEBAAD/AP8AAPn5+L28vamnqbe4ue3u7f8AAAEAAP8A/wAAAAAAAAAAAAAAAAEAAf8A/wMDAwckIg40MQcrKAMMCv8BAgH/AQAB//8BAgEAAAD/AQEBAf8AAP8AAQAAAQABAf4AAf8AAf8BAAABAf//Af4CAP0BA/0CAQAAAv8A/gAB//WanfjKygAAAQAAAAAAAaioplZXVQAAAAEAAf8AAAAA/wAAAAEAAf8A/wEAAf8A/wEAAAAA/wAAAejp6ru8vra1try9vezr6wAAAQAA/wAA/wACAgAA/wD//wAAAAD/AAAAAAAAAQIB//4AAAAAAAECAQIBABMGDCMLEyILEhoGDx4JESYNFw4EBwD//wABAQIAAP//AP8AAAABAv7/AAEA/wABAgAAAAABAAAA/wAAAAABAgAA/wEBAQH/Af8B/wAAAP//AQEBAP8AAAAAAf4AAfsC/8r56HnMqQH9/v8BAP8AAAD+AP8CAAAA/wAAAQL/AP8BAAAA/wD/AQEBAP4AAAH//wAAAAABAQAAAAD//wAB/wAAAQEAAP8AAQEAAP8AAAAAAAAA/wEAAf8AAAEAAP///wABAgAA/wAA/wAAAP4AAAH/AQEAAAABAAAAAAAAAQEA/v//AQAB/wABAAH/AQAAAP//AAABAAABAAAAAQD//wAAAP8AAQH//v8BAQEAAAD/AAABAAAAAP8AAAEAAP8AAAIA//4AAAEAAAABAQD9AAAC//8AAAD/AAEBAQAAAAAAAAAA//8AAQEA/wAAAf//AAEBAAAA/wAAAAD/AQABAAD///8BAAEAAf8AAAEAAP//AAABAAEAAAAAAAD/AP8BAAH/AP8B/wD/AQEBAP8AAAEA/wD/AP8AAQEAAAABAP8B/wH+AP8BAQEAAAAA/wAAAAD/AQAA//8BAQH//wAAAf8AAAEBAQD+/gABAf8AAAEA//4BAQL//wAAAf8A/wAAAQEAAAEAAAABAP//AAABAAAAAAAAAAD//wECAf//AAABAAD/Af8A/wAAAAEAAAAAAAABAAD/AAD/AAAB/wD/AAABAAD/AQAB/wAAAAAAAQD///8AAQEBAAD/AAABAAEA////AQEBAf///v8BAQEA/wD/AAABAQAA/wAAAQAAAAAA//8AAQD/AQEB/wD/AP8A/wEAAQAA//8BAQEA/wAAAf8A/wH/Af8AAAEA/wABAf/+/wACAAD/AQEA//8BAAAAAAAAAAAAAgD//gABAQAA/wEBAQD//wAAAQD//wAAAAAAAQAAAP8B/wH/AAABAQAAAAABAQD//wD/AAAAAAAAAAABAP8BAAD//wH/AQABAAD/AAAB//8AAQABAAH/AP8BAAH/AQAB/wAAAAD/AAAAAAAAAAEAAP8AAQD//wACAQEAAACur7FXWlr8+PgYHBx4enUeHBoIBgYGAQT/AP/+/v7/AP4MCAgLBwcA/gEAAAH/AQD/AP///wD7/Pzt9fLR6OTL89zbCeP1GP0ABwL/Af//AAEC/wH/9v7+6P764fj8zfLz0+X67vAA//8hBf+LHf08JAYFBQQBAwIAAP7/AAABFv8FJfwGHPwCAQD60QcA6AACAwD+AP4A/QEB/QIA+wP9+QL48QGp4/995/z2AQMFDAr7+vv78fYUBwF7Tw1uWv4A+/wAAP///gABAAEAAf7/AQAAAgD//wD/6/4B2QP97wD7+wH//wIAAAD4/gOB1P+84vuqTQcfIwcMMQYBCPn/AQABAQAAAQEAAQAAA/8AAAEA//8AAgAAAP8AAgAA/QAA+P7/9v8AAQEA9v4AzfP+7PgCAQIAAQL9/wHP3PtIw/jv/gAAAP89PkDBwb0AAP8AAAAAAAD//wEAAP8BAQH/AP4BAAIAAAD///8AAQEAAP8AAAEA/wAAAf8AAAAAAAEAAP4A/wEAAAEBAAD/Af8AAAEBAP///wEBAAAAAf8AAAEAAAD///8AAQEAAAABAP//AAAAAAEBAAD/AAAA/wABAAAAAQAAAP8AAAEA/wAA/wD/AQAAAQABAAAAAAAAAAAAAAAAAAAAAAD//v8BAQH/AAAAAAABAQDZ2tqnpaekpKfd3tsBAAH/AAABAAAAAP//AAEBAAAAAP8BAAEAAP//AAAFExQOODINNjECExMB/wH/AAH//wAAAQABAAL/AAAAAAH/AQAAAQH//wH/AQL/AQD/AQL//gD/AQD/AgL9AQL/AQEBAAH/AP7519bxkZMA/v0AAAEAAABISEisraoLCgoAAAEAAP//AAAA/wAAAP8BAQEAAAAAAAAAAAEAAAAAAP8AAAD/AAAA/wHg4uG+vcC0tra/vr3x8PAA//8AAQEAAAAAAP4AAAAAAQEAAQIA//8AAAAAAAAAAQEA/wAAAf8AAAEAAf8AAQEB/wAdCxAcCA8gDhIcBhAdBxAbBhAaCQ///wIBAAAAAQAAAgH+AAABAQEA/wD/AP8BAQD/AQIB//8AAQD//wAAAAEAAP//AAABAQEA/wD/AgH7AACx79mS2bcB/f3/AQL/AP8A/wAAAQD/AAABAAEAAP8A/wAAAQEA//8AAP8AAgEB////AAEAAAAA//8AAQEBAAAAAAD/AAEB//7+AgEB/wAAAQAA/f//AgICAf8A/gD/AAAAAAAA/wAAAgAAAP//AAEAAAAB////AAEBAQAAAAAAAP8AAAEA//8AAQEAAAABAAAA////AAEAAv8AAAAA/wEBAP///wIAAf8A////AQAB/wEAAQAAAAD/AAAB////AAABAgEAAAEA//7/AAAB//8AAAEAAAH/AQABAAD/AAAB/wD+AQECAP8A/wAAAAAAAf//AAAB/wEBAf/+/wAAAAEAAAABAAD/AAABAAD/AAAAAQEBAP8A/wAAAQAA/gD/AgAA/gABAQEAAP4AAAEAAAAAAAAAAAAA//7/AQIB//8AAQAAAAAAAP/+AQEBAAEBAAAA/wAAAP8AAAEAAQD//wAAAQAB/wD/AAAAAQAB/wAAAf8AAAIAAP////8AAAAB/wEAAQAAAQAB/wD/AAAAAP//AAEBAQAAAAABAP//AAIAAf8A/wAAAAAA/wAAAP8AAQAAAAH/AAABAAAB/wD/AAD/AQAB/wAAAAAAAAAAAP8AAAAAAAEB/wD+Av8B/wAAAQEAAP//AAAB/wH/Af8A/wEBAAAAAQAA////AQEB////AQEAAAABAP//AAEB/wAAAf//AAECAAD/AP///wEBAQD///8BAAH/AAABAQAAAAAA//8AAQD/AQEA/v8BAAAAAAAAAgEA/wD///4BAAL/AP8BAQEAAP8A/wEAAAD/Af8AAAEAAP8B/wH/AQAB/wABAgD+/gABAAD/AQAAAAAAAQAB/wAAAP///wEBAQAA/wH/Af8BAAAAAAD/AAAAAAABAAAA/wAAAf//AAABAAEAAAAAAAABAAH/AP//AAABAAEA//4AUFJVs7OxAAECXWBcTU1KAgECBAECBgUD/v3+AgAAEwwODwkJAwIC/v7//P//+/787vLy2Ofi0+7l0ffq5wnr/hf4/BkEAf8CAf0BAAABAP4A/fr9/O76/eH2+/j2/MLt98joAAQDIwT9TBD9XRwDHRgGAwMDAAEAAAT+BjL7Bzz4Ax/9AQAB/wABAOUD97gGAecDAQH+/wAAAf8BAPsC/fcF//cD3+f9dtz90fj/9gcH/Q4O+PHz/fL2CQgChl0Nb0v9Af/8/wIBAP4AAAD/AAEBAfUB/uP//ef+AfUB//8C/f0B/fwBAAAB+gACw+sEmNn4ZC4FNB8HFjAABh0AAAD/AgMB/wD/AQEAAAMAAAH/AAD/AAAAAAIAAAIAAAAAAAAB//P9/fP/AwYFAOv4AM7z//P8AQAC/gEB5ur8QL333/cB/wD/Dg4Ry8zIJiUk/wAAAQAAAAAAAAAAAAD/AAABAAAAAAAAAAD/AAAB//8AAQD//wEAAQAA/wABAAD/AAD/Af8BAAD/AAAA9vLw8+3q//7+/v7+AQD+BQcHAgMGEBgcAgQEAAABAAAAAAAA/wD/AAABAAD/AP4BAAEAAQEAAP//AAEA//4AAAEAAQABAAD/AAEBAP//AAEB//8AAQEAAAD/AAAAAP8BAAD//wABAQAAAAAAAAAA////3+DguLi6r62vv8C+//7+AAAA/wAAAAD//wABAQAAAAAA/wAAAQD/AQD/BBYUEDUyCzMyBBQVAAD9AQAC/gEDAAAAAAEB/wAA/wIAAP8C/QABAQEB/wAB/wEB/gAAAAEB/gED/gEAAAABAAAA/vf374yM++PjAAAAAAAAAQEBqKmnVVVUAAAAAAAAAP8AAQD/AAEC//8AAQEAAP//AAEBAAD/AAABAAAA/wD/AQABAAAA//8AAAAA3+Deq62vxMPExcXF7+/wAP/+AAEAAAIBAQAA////AAAAAAAAAAEBAAD/AAEBAP//AAAAAAABAAEAAf8A/wD+AQAB/wAAAAEAEAYJIgsUFgcNHwoREgQLGgkRFwgMFAgNCQIF//8A/wD/AQEC/wD/Af8AAAABAP8AAAD//wAAAAAAAAD/AAEB/AYEgdq4xOfXAf3+/wAA/wEAAP8AAAAA/wAAAAEAAQAAAAAAAQAA//8AAAEAAQAAAP///wAAAAABAAEAAAD/AP8BAQAA/wABAAL+AP8CAAD/AQAB/wD/AP//AAEBAAD/AP8AAAD/AAACAQH//wACAAD/AP8AAAH/AAACAP/+AAAAAAAAAAIBAf7/AAEBAP8A/wEAAP8AAAEAAAD///8BAAH/Af8A/wEBAf8A/wIAAP8AAQAAAAD//wAAAQEB//8AAAD/AQAA//8BAQH/AP8AAP8BAAH//wAAAQEBAAAAAAD//wECAf7//gEAAv8AAAEA/wAAAP//AAABAQH/AP8B/wAAAP8AAAEAAQAA/wEAAf8A/wEAAP8AAAEAAAEAAP8BAQD/AP8A/gEAAgAA/wAAAP//AAACAAD/AAD/AAABAQD//wABAQEBAAAA/wD/AP//AQEB/gD/Av8A/wAAAAABAAD/AQAB/wD/AQABAAEAAP8AAP8AAQIA//4AAAEAAAD//wAAAQEBAAAAAAAAAAD/AP8BAAD/AAEBAAD/Af8BAAEA/wABAAD+/wABAv4A/wIAAAAAAAEAAP8AAAAAAQD///8A/wABAgD//wAAAAEAAAECAP8AAAD+//8AAAIAAP4BAAH/Af8AAAABAAEAAP8A/wAAAAAAAAAAAQH+/gABAf8BAQAAAAH/AAAA/wABAf///wAAAAEBAP//AQEAAP///wACAQAAAAEA//8AAQAAAAEBAAH/AP4AAAD//wAAAAABAQEAAP/+/wEBAAAA/wABAf//AAABAAAAAAAAAQAAAAAA/wEAAP8AAAEAAAAAAAH/Af8BAP8A/wEA//8AAQAAAAIAAAD/AP4BAAAAAQEAAP8A/wEAAQD///8AAQAAAAAA/wIBAf8AAAH/AP8BAAAAAAAAAAAAAAEAAP8AAAAAAQABAM3Ozjo9QPv29xIWFoOIgRUSEwEBAAEA/wIAAAkEBBUNDw4ICwIAAQAA/gH//uHy7cPc1MTV1dj/5/kp/QAXAP4NAgUCBQEAAgMCBf/+Af/5/Pv1+vzt+frr9/n7+gAA/QLT+vnJ8CPu8UsSAD8W/TMWBgsMBQIDAv7//wYm/AtY9gMPAgD9AP/4AP74/v3///3oAwG3B////gACAQAA/wD+A/73A/73BP33AKneAZLh/eD/Af8UEP8EA/nh6AD+/gkGAZBUCGJLBAEN/v8CAv/0AQLpAP/j//70/QD9AQD/AwD/Af/+Afv+/wAA//z/AfoABZfY/g0JAEMgCRkr+xQuA/8E/wEAAAECAAAB/gACAP8CAQD//gADAAEBAQD/AAAB/gAAAQD+Af7w///8AAIDBP7V8gHb9gD9AP4BAQD7AUe29MHs/v0AAgAA/qKio1tcWQEBAAEAAQD/AAAA/gABAv8AAAH///8BAQAA/wAAAAAAAAEAAP///wEBAAAAAQD//PDq6eri3Ovh2vfv6/ny7vfy7gD//wD/AAABAQAA/wEDAg4UGAMHDAQGCAoQFA0TGAwTFxEYHAkLDQEDBP8BAgEBAAD//wAAAAAAAAAAAQAB/wD/AP//AAECAAD/AAAAAAAAAAAAAf8A/wABAQH//wD/AQAAAAABAP8AAAAAAAAAAP8AAPv6+7++vqmoqq6vrvPz8wAA/wEAAf8A/wAAAP8AAAAA/wEAAAAAAAEBAQQNDAwqKg0vLgslJP4HBv4AAP8AAP8BAP8AAQAAAQEAAv0BAP8BAf8AAP8AAQABAgACA/0B////AP4BAwIBAPWur/G3tgAAAAAAAAAAADo6O7OzrxASEgL/AAAAAP8AAP8BAAEAAQAA/wAAAAH/AP8BAQH/AP8BAAAAAP//AAIBAP8AAAAA/wEAAf4AAAAAANze39TW1sjJy9PU0s/Qz+nl4wD+/wABAgAA/wD/AAAA/wAAAgD//wABAAAAAAABAQAA/QAAAQAAAAAAAgAA/gAAAAAB/wABAAD/AAABAAD+AAoFBh8OFh8HERwIDxgKECALFRIHCRQFCQMAAgIAAQEA/wAAAgD/AP///gACAcr56nvOsxwVDgH+/v4AAAAAAAD/AQAB//8AAAL/AP4AAQEB/wD+AAAB//8AAQABAAEAAAAAAQH+//8BAAAA//8BAQAA/wIAAf4AAAAAAAH//wABAgAA/wAA/wAAAQAA/wAAAAD/AQAAAAAAAAAAAAABAAH/AP8BAAAA/wAAAQD//wABAQAA/wD/AQAAAAEBAAAAAAD/AP8CAAD/AAD/AAABAAAAAAAAAP8AAAEA/wAAAQD/AAABAAAA/wAAAf8AAAAA/wL/Af4A/wEBAAAAAAD/AAAAAAAAAAAAAf8BAAAAAAH///8AAgEB/wH/AP8A/wABAAD/AQAB/wD/AP4BAAEAAAH/Av8A/wH/AP8BAAEBAAAAAAD//wAAAAABAQAAAAD/AAAAAP8A/wAAAQD/AAAAAAAAAAABAAH/AAAB//8BAAL/Af8AAP8B/wD+AAABAQEB////AQAB/wH/Af//AAAB/wAAAQEA//8BAQAAAAEA/wAAAAAAAQAAAAD//wAA/wEAAf8AAAABAP8AAAIA//8AAQD/AP8BAAABAQH/AAAA/wAAAf8A/wL/AP4BAQD///8BAQH//wEAAQAA/wAB/wAAAQAAAP//AQEAAP8A/gEAAf8AAAEAAf8AAAEA/wABAQEB///+AAAAAQABAP////8AAQEBAAH/AP///wABAAABAAD/AAAAAAAAAQEB/wAAAAAAAP/+AQAB/wEAAAAAAAAAAf8A/wAAAAEAAP8BAQD//wAAAAIAAP8AAP8AAgAB/wEA////AAABAQEAAP///wABAAD/AQEB////AAEAAP8BAQH//wAAAf8AAP8AAAEA/wAAAQEA//8BAAEAAf7/AAEB/wAAAQD//wAAAQAAAAAB/wEAAQAAAAEAAP4AAAAAAAEAAAAAAAD/AAAA/wEBAP8AAQAA/wABAf8AAAL///8AAgB6fH+IhogAAP9ITU5jY1v9/v4CAAH///4JBAUcEhUNBwcBAAABAQD4//vG3dWizrvK69kBCwUFNgsDEwP+AgIDAQH//f8B+/0B9P8B9AAA8/z78/n+9fv9/QAABAQBA/7/3v8owuZ38ekQLQcoEAEJAwQCBQQBAwIBGPcQVP0CGgD35gL54gH9+gIBAgEIIAIGFgT/s/755/oEAgL///8CAQAA/AP89AT++QP39QCd1f2K6P34DAsGDAv58PT59fQCAgIQBgmzSv84LwcC+rp/p44AAAJ+SURBVP7/9v7/9P7+/wD///8BAAL//wIA/gEAAAH9/gD8/gH/AAAA/wPP8gSd3PQvFQo/MgMrOv8GCwEABAABAv8BAv8AAwAAAQD/AQABAAAAAf8AAAAAAgAA/wAAAAD/+QH/+P8B/gEB9fz/x/IB8vv//wL//gFju/Oi4//+AQIBAABiYWOam5YBAQEAAQEA/wABAAAAAP8AAQD/AAAB/wAAAQD//wAAAf8AAAD9+vfx6Obm29Xo3tTz6+T9+vgCAAEAAP7//wAA/wD/Af8A//8AAP8AAAL+AP8A//7+AAEA/wEA/wH+///9/gEEBwgQFRoVGyINExYNERYKDg8IDhD4+vv2+Pv7/f4CAgMDBAMCAgMEBQQGBQUEBAQDBAIEBAQDAwIAAAAAAQEAAAAA/wD/Af4BAAEBAAD/AAEAAAABAAAAAADLyMymoaS3uLfi5OL4/PsAAP8AAAABAAD/AP8BAAAAAAABAAAAAP//AAALIyQSLi0KIyAEGBf/BgX4AgQA//8AAAL+AQH/AQEAAQH8AgIB/wH/AQL/AAD+AQEAAAEAAgAC4OPlkI7/9fQAAQEAAAABAf6JhYVtbnEICggAAAH/AP8AAAABAAD/AAAAAAEB/wAAAP//AQEBAP8AAAAAAAD/AAAAAAAA/wAAAQEAAAD/AAAAAAAAAAD+AAACAADU4uLX3N3g4ePT1NPNy8jj3d317e4A+/wAAAAAAP4AAAEAAAAAAAAAAgAAAQEAAAAAAQAAAP4AAAAAAQAAAf8A/wAA/wAAAAAAAQAA/wAAAQAAAQAAAQEDAQcUCg8MAQYTBgYPAgQFAwITBwwgERf3+fqw6tI3JB33/wPNMFHpR7eOBQAAAABJRU5ErkJggg==", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "show_output(output)" + ] + }, + { + "cell_type": "markdown", + "id": "e247b2c4", + "metadata": {}, + "source": [ + "## StableDiffusion " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "315025e7", + "metadata": {}, + "outputs": [], + "source": [ + "tools = [SteamshipImageGenerationTool(model_name=\"stable-diffusion\")]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "7930064a", + "metadata": {}, + "outputs": [], + "source": [ + "mrkl = initialize_agent(\n", + " tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "611a833d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I need to generate an image of a parrot playing soccer.\n", + "Action: GenerateImage\n", + "Action Input: A parrot wearing a soccer uniform, kicking a soccer ball.\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3m25BB588F-85E4-4915-82BE-67ADCF974881\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now have the UUID of the generated image.\n", + "Final Answer: The UUID of the generated image is 25BB588F-85E4-4915-82BE-67ADCF974881.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + } + ], + "source": [ + "output = mrkl.run(\"How would you visualize a parot playing soccer?\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "d7a3edaf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The UUID of the generated image is \n", + "\n" + ] + }, + { + "data": { + "image/png": "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48I3fpg/U/i58ys412pTLWKaQuyGvSmV0qLf1ZI/ff18zZehH5xDbqoIr+tJQft+fzPE++PDcl2fPn8Z97vbYbhNN/OuXpbr6fz6TZ0EKgIiAujNFIO7zue3D29+/O7tb777sORFucyyvp5P+90hkinWxepSOMa43+0A8Dytu11/u9sl8NGPwS11Xozw0MW+7/thP63r5fERoO3H3a4/HoYbMVOiuTUhN13n6OM81fubMfq41LpQEcnzPBGJmpU1l5Rn6s7X+TLlkEL0/uXlDEjB+b5P6OB42IfUXy5LyTUNXWHe+xjSQMTe89fPT2B0jd4hGoCafPz86eHmQQxubm+FmaXN8yS5Pb48TvO51jVFb9bWzKxw8HsV9YHIu8evX1z00+m6AeRV0CExy5jGOk0m7L07HHbH3U7W9nk+//r5l9YWQ+53nZot0/x8efrNDz/dHm6eX56QInojAC7sDy6NXReTd/HNmzfOuWletbGZTPNSc72u048/fM/V3r9/t0x1nQo65KYAtM7tVabDYecf3S7uPIVlXtbrerjputhZrvN1JsF37x468vl8ZaT3v/kJydUlE9anT88K3vmkvDZetGlZy9D3T49PxvX2cNjd3X7+8sm76AydhzXX67yixzzxw/v7ygWgHe/3P3/5k+/3ERDXMp9r3sSQ+74z8pd5Vueijzf723Vd17wqwH53kKqg1KVwd3fXD8nUWmulbS1zdC4sS0XIp8sFE8UUui4qGHMDERTRWvO8Rgi34/HZn1ptGattG8hE0dQ7PPS7w26/H0dmeZ3PzrSt+fX1peby8vJqpt1+QEddjO/u3nfOP83u+vrSpO2POwBIoW/F1uuCBoTkvev6obZ2vlzm6zpdT10KqR9ubw7LWuc5N875vGjnKPkudve39z/88DBdTk/jcwhhmqfa5HDYKQDXCmhrWU+XK0jzvltzXed5mZfC6+nl8f2b97e3B2eUc1GCH968XdaJZD69rLleyffOBVYoeU4ciug0z6XlkajUVedggJS892Gbh97sj46can2dXkVs34+p6xMErYDVHDofAijWxkglRAPSbvQgLsTh/v7hsB/nxYVAXdxH80stuawg9PDmPhBdLl/Ft+Bc9M6Uc1276AyExfoQYx9bq/0Q3727BWdzPjfhvkt3+yFnLWWd6rVPqUudp661IpJrW7jV/W6HhrXB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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n" + ] + } + ], + "source": [ + "show_output(output)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "55556043", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/extras/use_cases/agents/sales_agent_with_context.ipynb b/docs/extras/use_cases/more/agents/agents/sales_agent_with_context.ipynb similarity index 100% rename from docs/extras/use_cases/agents/sales_agent_with_context.ipynb rename to docs/extras/use_cases/more/agents/agents/sales_agent_with_context.ipynb diff --git a/docs/extras/use_cases/agents/wikibase_agent.ipynb b/docs/extras/use_cases/more/agents/agents/wikibase_agent.ipynb similarity index 100% rename from docs/extras/use_cases/agents/wikibase_agent.ipynb rename to docs/extras/use_cases/more/agents/agents/wikibase_agent.ipynb diff --git a/docs/extras/use_cases/autonomous_agents/autogpt.ipynb b/docs/extras/use_cases/more/agents/autonomous_agents/autogpt.ipynb similarity index 100% rename from docs/extras/use_cases/autonomous_agents/autogpt.ipynb rename to docs/extras/use_cases/more/agents/autonomous_agents/autogpt.ipynb diff --git a/docs/extras/use_cases/autonomous_agents/baby_agi.ipynb b/docs/extras/use_cases/more/agents/autonomous_agents/baby_agi.ipynb similarity index 99% rename from docs/extras/use_cases/autonomous_agents/baby_agi.ipynb rename to docs/extras/use_cases/more/agents/autonomous_agents/baby_agi.ipynb index ae7668acb..88e53c979 100644 --- a/docs/extras/use_cases/autonomous_agents/baby_agi.ipynb +++ b/docs/extras/use_cases/more/agents/autonomous_agents/baby_agi.ipynb @@ -249,7 +249,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.9.16" } }, "nbformat": 4, diff --git a/docs/extras/use_cases/autonomous_agents/baby_agi_with_agent.ipynb b/docs/extras/use_cases/more/agents/autonomous_agents/baby_agi_with_agent.ipynb similarity index 100% rename from docs/extras/use_cases/autonomous_agents/baby_agi_with_agent.ipynb rename to docs/extras/use_cases/more/agents/autonomous_agents/baby_agi_with_agent.ipynb diff --git a/docs/extras/use_cases/autonomous_agents/hugginggpt.ipynb b/docs/extras/use_cases/more/agents/autonomous_agents/hugginggpt.ipynb similarity index 100% rename from docs/extras/use_cases/autonomous_agents/hugginggpt.ipynb rename to docs/extras/use_cases/more/agents/autonomous_agents/hugginggpt.ipynb diff --git a/docs/extras/use_cases/autonomous_agents/index.mdx b/docs/extras/use_cases/more/agents/autonomous_agents/index.mdx similarity index 100% rename from docs/extras/use_cases/autonomous_agents/index.mdx rename to docs/extras/use_cases/more/agents/autonomous_agents/index.mdx diff --git a/docs/extras/use_cases/autonomous_agents/marathon_times.ipynb b/docs/extras/use_cases/more/agents/autonomous_agents/marathon_times.ipynb similarity index 100% rename from docs/extras/use_cases/autonomous_agents/marathon_times.ipynb rename to docs/extras/use_cases/more/agents/autonomous_agents/marathon_times.ipynb diff --git a/docs/extras/use_cases/autonomous_agents/meta_prompt.ipynb b/docs/extras/use_cases/more/agents/autonomous_agents/meta_prompt.ipynb similarity index 100% rename from docs/extras/use_cases/autonomous_agents/meta_prompt.ipynb rename to docs/extras/use_cases/more/agents/autonomous_agents/meta_prompt.ipynb diff --git a/docs/extras/use_cases/multi_modal/_category_.yml b/docs/extras/use_cases/more/agents/multi_modal/_category_.yml similarity index 100% rename from docs/extras/use_cases/multi_modal/_category_.yml rename to docs/extras/use_cases/more/agents/multi_modal/_category_.yml diff --git a/docs/extras/use_cases/agents/_multi_modal_output_agent_files/output_10_1.png b/docs/extras/use_cases/more/agents/multi_modal/_image_agent_files/output_10_1.png similarity index 100% rename from docs/extras/use_cases/agents/_multi_modal_output_agent_files/output_10_1.png rename to docs/extras/use_cases/more/agents/multi_modal/_image_agent_files/output_10_1.png diff --git a/docs/extras/use_cases/multi_modal/_image_agent_files/output_10_1.png b/docs/extras/use_cases/more/agents/multi_modal/_multi_modal_output_agent_files/output_10_1.png similarity index 100% rename from docs/extras/use_cases/multi_modal/_image_agent_files/output_10_1.png rename to docs/extras/use_cases/more/agents/multi_modal/_multi_modal_output_agent_files/output_10_1.png diff --git a/docs/extras/use_cases/agents/_multi_modal_output_agent_files/output_15_1.png b/docs/extras/use_cases/more/agents/multi_modal/_multi_modal_output_agent_files/output_15_1.png similarity index 100% rename from docs/extras/use_cases/agents/_multi_modal_output_agent_files/output_15_1.png rename to docs/extras/use_cases/more/agents/multi_modal/_multi_modal_output_agent_files/output_15_1.png diff --git a/docs/extras/use_cases/multi_modal/image_agent.ipynb b/docs/extras/use_cases/more/agents/multi_modal/image_agent.ipynb similarity index 99% rename from docs/extras/use_cases/multi_modal/image_agent.ipynb rename to docs/extras/use_cases/more/agents/multi_modal/image_agent.ipynb index 0e8e5f5d5..107cea32c 100644 --- a/docs/extras/use_cases/multi_modal/image_agent.ipynb +++ b/docs/extras/use_cases/more/agents/multi_modal/image_agent.ipynb @@ -245,7 +245,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.9.16" } }, "nbformat": 4, diff --git a/docs/extras/use_cases/agents/multi_modal_output_agent.ipynb b/docs/extras/use_cases/more/agents/multi_modal/multi_modal_output_agent.ipynb similarity index 100% rename from docs/extras/use_cases/agents/multi_modal_output_agent.ipynb rename to docs/extras/use_cases/more/agents/multi_modal/multi_modal_output_agent.ipynb diff --git a/docs/extras/use_cases/more/graph/graph_cypher_qa.ipynb b/docs/extras/use_cases/more/graph/graph_cypher_qa.ipynb index f6f9ca818..84adde72b 100644 --- a/docs/extras/use_cases/more/graph/graph_cypher_qa.ipynb +++ b/docs/extras/use_cases/more/graph/graph_cypher_qa.ipynb @@ -5,7 +5,7 @@ "id": "c94240f5", "metadata": {}, "source": [ - "# Graph DB QA chain\n", + "# Neo4j DB QA chain\n", "\n", "This notebook shows how to use LLMs to provide a natural language interface to a graph database you can query with the Cypher query language." ] @@ -177,7 +177,7 @@ "\u001b[32;1m\u001b[1;3mMATCH (a:Actor)-[:ACTED_IN]->(m:Movie {name: 'Top Gun'})\n", "RETURN a.name\u001b[0m\n", "Full Context:\n", - "\u001b[32;1m\u001b[1;3m[{'a.name': 'Val Kilmer'}, {'a.name': 'Anthony Edwards'}, {'a.name': 'Meg Ryan'}, {'a.name': 'Tom Cruise'}]\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m[{'a.name': 'Tom Cruise'}, {'a.name': 'Val Kilmer'}, {'a.name': 'Anthony Edwards'}, {'a.name': 'Meg Ryan'}]\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -185,7 +185,7 @@ { "data": { "text/plain": [ - "'Val Kilmer, Anthony Edwards, Meg Ryan, and Tom Cruise played in Top Gun.'" + "'Tom Cruise, Val Kilmer, Anthony Edwards, and Meg Ryan played in Top Gun.'" ] }, "execution_count": 7, @@ -236,7 +236,7 @@ "\u001b[32;1m\u001b[1;3mMATCH (a:Actor)-[:ACTED_IN]->(m:Movie {name: 'Top Gun'})\n", "RETURN a.name\u001b[0m\n", "Full Context:\n", - "\u001b[32;1m\u001b[1;3m[{'a.name': 'Val Kilmer'}, {'a.name': 'Anthony Edwards'}]\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m[{'a.name': 'Tom Cruise'}, {'a.name': 'Val Kilmer'}]\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] @@ -244,7 +244,7 @@ { "data": { "text/plain": [ - "'Val Kilmer and Anthony Edwards played in Top Gun.'" + "'Tom Cruise and Val Kilmer played in Top Gun.'" ] }, "execution_count": 9, @@ -294,11 +294,11 @@ "\u001b[32;1m\u001b[1;3mMATCH (a:Actor)-[:ACTED_IN]->(m:Movie {name: 'Top Gun'})\n", "RETURN a.name\u001b[0m\n", "Full Context:\n", - "\u001b[32;1m\u001b[1;3m[{'a.name': 'Val Kilmer'}, {'a.name': 'Anthony Edwards'}, {'a.name': 'Meg Ryan'}, {'a.name': 'Tom Cruise'}]\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m[{'a.name': 'Tom Cruise'}, {'a.name': 'Val Kilmer'}, {'a.name': 'Anthony Edwards'}, {'a.name': 'Meg Ryan'}]\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n", - "Intermediate steps: [{'query': \"MATCH (a:Actor)-[:ACTED_IN]->(m:Movie {name: 'Top Gun'})\\nRETURN a.name\"}, {'context': [{'a.name': 'Val Kilmer'}, {'a.name': 'Anthony Edwards'}, {'a.name': 'Meg Ryan'}, {'a.name': 'Tom Cruise'}]}]\n", - "Final answer: Val Kilmer, Anthony Edwards, Meg Ryan, and Tom Cruise played in Top Gun.\n" + "Intermediate steps: [{'query': \"MATCH (a:Actor)-[:ACTED_IN]->(m:Movie {name: 'Top Gun'})\\nRETURN a.name\"}, {'context': [{'a.name': 'Tom Cruise'}, {'a.name': 'Val Kilmer'}, {'a.name': 'Anthony Edwards'}, {'a.name': 'Meg Ryan'}]}]\n", + "Final answer: Tom Cruise, Val Kilmer, Anthony Edwards, and Meg Ryan played in Top Gun.\n" ] } ], @@ -352,10 +352,10 @@ { "data": { "text/plain": [ - "[{'a.name': 'Val Kilmer'},\n", + "[{'a.name': 'Tom Cruise'},\n", + " {'a.name': 'Val Kilmer'},\n", " {'a.name': 'Anthony Edwards'},\n", - " {'a.name': 'Meg Ryan'},\n", - " {'a.name': 'Tom Cruise'}]" + " {'a.name': 'Meg Ryan'}]" ] }, "execution_count": 13, @@ -367,10 +367,153 @@ "chain.run(\"Who played in Top Gun?\")" ] }, + { + "cell_type": "markdown", + "id": "f01dfb72-24ec-4ae7-883a-ee6646889b59", + "metadata": {}, + "source": [ + "## Add examples in the Cypher generation prompt\n", + "You can define the Cypher statement you want the LLM to generate for particular questions" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "59baeb88-adfa-4c26-8334-fcbff3a98efb", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.prompts.prompt import PromptTemplate\n", + "\n", + "\n", + "CYPHER_GENERATION_TEMPLATE = \"\"\"Task:Generate Cypher statement to query a graph database.\n", + "Instructions:\n", + "Use only the provided relationship types and properties in the schema.\n", + "Do not use any other relationship types or properties that are not provided.\n", + "Schema:\n", + "{schema}\n", + "Note: Do not include any explanations or apologies in your responses.\n", + "Do not respond to any questions that might ask anything else than for you to construct a Cypher statement.\n", + "Do not include any text except the generated Cypher statement.\n", + "Examples: Here are a few examples of generated Cypher statements for particular questions:\n", + "# How many people played in Top Gun?\n", + "MATCH (m:Movie {{title:\"Top Gun\"}})<-[:ACTED_IN]-()\n", + "RETURN count(*) AS numberOfActors\n", + "\n", + "The question is:\n", + "{question}\"\"\"\n", + "\n", + "CYPHER_GENERATION_PROMPT = PromptTemplate(\n", + " input_variables=[\"schema\", \"question\"], template=CYPHER_GENERATION_TEMPLATE\n", + ")\n", + "\n", + "chain = GraphCypherQAChain.from_llm(\n", + " ChatOpenAI(temperature=0), graph=graph, verbose=True, cypher_prompt=CYPHER_GENERATION_PROMPT\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "47c64027-cf42-493a-9c76-2d10ba753728", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new GraphCypherQAChain chain...\u001b[0m\n", + "Generated Cypher:\n", + "\u001b[32;1m\u001b[1;3mMATCH (m:Movie {name:\"Top Gun\"})<-[:ACTED_IN]-(:Actor)\n", + "RETURN count(*) AS numberOfActors\u001b[0m\n", + "Full Context:\n", + "\u001b[32;1m\u001b[1;3m[{'numberOfActors': 4}]\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "'Four people played in Top Gun.'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain.run(\"How many people played in Top Gun?\")" + ] + }, + { + "cell_type": "markdown", + "id": "3e721cad-aa87-4526-9231-2dfc0e365939", + "metadata": {}, + "source": [ + "## Use separate LLMs for Cypher and answer generation\n", + "You can use the `cypher_llm` and `qa_llm` parameters to define different llms" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "6f9becc2-f579-45bf-9b50-2ce02bde92da", + "metadata": {}, + "outputs": [], + "source": [ + "chain = GraphCypherQAChain.from_llm(\n", + " graph=graph,\n", + " cypher_llm=ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo\"),\n", + " qa_llm=ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo-16k\"),\n", + " verbose=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ff18e3e3-3402-4683-aec4-a19898f23ca1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new GraphCypherQAChain chain...\u001b[0m\n", + "Generated Cypher:\n", + "\u001b[32;1m\u001b[1;3mMATCH (a:Actor)-[:ACTED_IN]->(m:Movie {name: 'Top Gun'})\n", + "RETURN a.name\u001b[0m\n", + "Full Context:\n", + "\u001b[32;1m\u001b[1;3m[{'a.name': 'Tom Cruise'}, {'a.name': 'Val Kilmer'}, {'a.name': 'Anthony Edwards'}, {'a.name': 'Meg Ryan'}]\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "'Tom Cruise, Val Kilmer, Anthony Edwards, and Meg Ryan played in Top Gun.'" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chain.run(\"Who played in Top Gun?\")" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "74d0a36f", + "id": "48ff7cf8-18a3-43d7-8cb1-c1b91744608d", "metadata": {}, "outputs": [], "source": [] diff --git a/docs/extras/use_cases/question_answering/how_to/local_retrieval_qa.ipynb b/docs/extras/use_cases/question_answering/how_to/local_retrieval_qa.ipynb index 9eea135a6..d01b0bb3e 100644 --- a/docs/extras/use_cases/question_answering/how_to/local_retrieval_qa.ipynb +++ b/docs/extras/use_cases/question_answering/how_to/local_retrieval_qa.ipynb @@ -25,8 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "! pip install gpt4all\n", - "! pip install chromadb" + "pip install gpt4all chromadb" ] }, { @@ -157,7 +156,7 @@ "metadata": {}, "outputs": [], "source": [ - "! pip install llama-cpp-python" + "pip install llama-cpp-python" ] }, { @@ -736,7 +735,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.3" + "version": "3.9.16" } }, "nbformat": 4, diff --git a/docs/extras/use_cases/question_answering/index.mdx b/docs/extras/use_cases/question_answering/index.mdx deleted file mode 100644 index a9d98d264..000000000 --- a/docs/extras/use_cases/question_answering/index.mdx +++ /dev/null @@ -1,342 +0,0 @@ ---- -sidebar_position: -1 ---- - -# QA over Documents - -## Use case -Suppose you have some text documents (PDF, blog, Notion pages, etc.) and want to ask questions related to the contents of those documents. LLMs, given their proficiency in understanding text, are a great tool for this. - -In this walkthrough we'll go over how to build a question-answering over documents application using LLMs. Two very related use cases which we cover elsewhere are: -- [QA over structured data](/docs/use_cases/tabular) (e.g., SQL) -- [QA over code](/docs/use_cases/code) (e.g., Python) - -![intro.png](/img/qa_intro.png) - -## Overview -The pipeline for converting raw unstructured data into a QA chain looks like this: -1. `Loading`: First we need to load our data. Unstructured data can be loaded from many sources. Use the [LangChain integration hub](https://integrations.langchain.com/) to browse the full set of loaders. -Each loader returns data as a LangChain [`Document`](https://docs.langchain.com/docs/components/schema/document). -2. `Splitting`: [Text splitters](/docs/modules/data_connection/document_transformers/) break `Documents` into splits of specified size -3. `Storage`: Storage (e.g., often a [vectorstore](/docs/modules/data_connection/vectorstores/)) will house [and often embed](https://www.pinecone.io/learn/vector-embeddings/) the splits -4. `Retrieval`: The app retrieves splits from storage (e.g., often [with similar embeddings](https://www.pinecone.io/learn/k-nearest-neighbor/) to the input question) -5. `Generation`: An [LLM](/docs/modules/model_io/models/llms/) produces an answer using a prompt that includes the question and the retrieved data -6. `Conversation` (Extension): Hold a multi-turn conversation by adding [Memory](/docs/modules/memory/) to your QA chain. - -![flow.jpeg](/img/qa_flow.jpeg) - -## Quickstart -To give you a sneak preview, the above pipeline can be all be wrapped in a single object: `VectorstoreIndexCreator`. Suppose we want a QA app over this [blog post](https://lilianweng.github.io/posts/2023-06-23-agent/). We can create this in a few lines of code: - -First set environment variables and install packages: -```bash -pip install openai chromadb -export OPENAI_API_KEY="..." -``` - -Then run: -```python -from langchain.document_loaders import WebBaseLoader -from langchain.indexes import VectorstoreIndexCreator - -loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/") -index = VectorstoreIndexCreator().from_loaders([loader]) -``` - -And now ask your questions: -```python -index.query("What is Task Decomposition?") -``` - - ' Task decomposition is a technique used to break down complex tasks into smaller and simpler steps. It can be done using LLM with simple prompting, task-specific instructions, or human inputs. Tree of Thoughts (Yao et al. 2023) is an example of a task decomposition technique that explores multiple reasoning possibilities at each step and generates multiple thoughts per step, creating a tree structure.' - -Ok, but what's going on under the hood, and how could we customize this for our specific use case? For that, let's take a look at how we can construct this pipeline piece by piece. - -## Step 1. Load - -Specify a `DocumentLoader` to load in your unstructured data as `Documents`. A `Document` is a piece of text (the `page_content`) and associated metadata. - -```python -from langchain.document_loaders import WebBaseLoader - -loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/") -data = loader.load() -``` - -### Go deeper -- Browse the > 120 data loader integrations [here](https://integrations.langchain.com/). -- See further documentation on loaders [here](/docs/modules/data_connection/document_loaders/). - -## Step 2. Split - -Split the `Document` into chunks for embedding and vector storage. - -```python -from langchain.text_splitter import RecursiveCharacterTextSplitter - -text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0) -all_splits = text_splitter.split_documents(data) -``` - -### Go deeper - -- `DocumentSplitters` are just one type of the more generic `DocumentTransformers`, which can all be useful in this preprocessing step. -- See further documentation on transformers [here](/docs/modules/data_connection/document_transformers/). -- `Context-aware splitters` keep the location ("context") of each split in the original `Document`: - - [Markdown files](/docs/use_cases/question_answering/document-context-aware-QA) - - [Code (py or js)](/docs/modules/data_connection/document_loaders/integrations/source_code) - - [Documents](/docs/modules/data_connection/document_loaders/integrations/grobid) - -## Step 3. Store - -To be able to look up our document splits, we first need to store them where we can later look them up. -The most common way to do this is to embed the contents of each document then store the embedding and document in a vector store, with the embedding being used to index the document. - -```python -from langchain.embeddings import OpenAIEmbeddings -from langchain.vectorstores import Chroma - -vectorstore = Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings()) -``` - -### Go deeper -- Browse the > 40 vectorstores integrations [here](https://integrations.langchain.com/). -- See further documentation on vectorstores [here](/docs/modules/data_connection/vectorstores/). -- Browse the > 30 text embedding integrations [here](https://integrations.langchain.com/). -- See further documentation on embedding models [here](/docs/modules/data_connection/text_embedding/). - - Here are Steps 1-3: - -![lc.png](/img/qa_data_load.png) - -## Step 4. Retrieve - -Retrieve relevant splits for any question using [similarity search](https://www.pinecone.io/learn/what-is-similarity-search/). - -```python -question = "What are the approaches to Task Decomposition?" -docs = vectorstore.similarity_search(question) -len(docs) -``` - - 4 - -### Go deeper - -Vectorstores are commonly used for retrieval, but they are not the only option. For example, SVMs (see thread [here](https://twitter.com/karpathy/status/1647025230546886658?s=20)) can also be used. - -LangChain [has many retrievers](/docs/modules/data_connection/retrievers/) including, but not limited to, vectorstores. All retrievers implement a common method `get_relevant_documents()` (and its asynchronous variant `aget_relevant_documents()`). - -```python -from langchain.retrievers import SVMRetriever - -svm_retriever = SVMRetriever.from_documents(all_splits,OpenAIEmbeddings()) -docs_svm=svm_retriever.get_relevant_documents(question) -len(docs_svm) -``` - - 4 - -Some common ways to improve on vector similarity search include: -- `MultiQueryRetriever` [generates variants of the input question](/docs/modules/data_connection/retrievers/MultiQueryRetriever) to improve retrieval. -- `Max marginal relevance` selects for [relevance and diversity](https://www.cs.cmu.edu/~jgc/publication/The_Use_MMR_Diversity_Based_LTMIR_1998.pdf) among the retrieved documents. -- Documents can be filtered during retrieval using [`metadata` filters](/docs/use_cases/question_answering/how_to/document-context-aware-QA). - - -```python -import logging - -from langchain.chat_models import ChatOpenAI -from langchain.retrievers.multi_query import MultiQueryRetriever - -logging.basicConfig() -logging.getLogger('langchain.retrievers.multi_query').setLevel(logging.INFO) - -retriever_from_llm = MultiQueryRetriever.from_llm(retriever=vectorstore.as_retriever(), - llm=ChatOpenAI(temperature=0)) -unique_docs = retriever_from_llm.get_relevant_documents(query=question) -len(unique_docs) -``` - - INFO:langchain.retrievers.multi_query:Generated queries: ['1. How can Task Decomposition be approached?', '2. What are the different methods for Task Decomposition?', '3. What are the various approaches to decomposing tasks?'] - 5 - -## Step 5. Generate - -Distill the retrieved documents into an answer using an LLM/Chat model (e.g., `gpt-3.5-turbo`) with `RetrievalQA` chain. - -```python -from langchain.chains import RetrievalQA -from langchain.chat_models import ChatOpenAI - -llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) -qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectorstore.as_retriever()) -qa_chain({"query": question}) -``` - - { - 'query': 'What are the approaches to Task Decomposition?', - 'result': 'The approaches to task decomposition include:\n\n1. Simple prompting: This approach involves using simple prompts or questions to guide the agent in breaking down a task into smaller subgoals. For example, the agent can be prompted with "Steps for XYZ" and asked to list the subgoals for achieving XYZ.\n\n2. Task-specific instructions: In this approach, task-specific instructions are provided to the agent to guide the decomposition process. For example, if the task is to write a novel, the agent can be instructed to "Write a story outline" as a subgoal.\n\n3. Human inputs: This approach involves incorporating human inputs in the task decomposition process. Humans can provide guidance, feedback, and suggestions to help the agent break down complex tasks into manageable subgoals.\n\nThese approaches aim to enable efficient handling of complex tasks by breaking them down into smaller, more manageable parts.' - } - -Note, you can pass in an `LLM` or a `ChatModel` (like we did here) to the `RetrievalQA` chain. - -### Go deeper - -#### Choosing LLMs -- Browse the > 55 LLM and chat model integrations [here](https://integrations.langchain.com/). -- See further documentation on LLMs and chat models [here](/docs/modules/model_io/models/). -- Use local LLMS: The popularity of [PrivateGPT](https://github.com/imartinez/privateGPT) and [GPT4All](https://github.com/nomic-ai/gpt4all) underscore the importance of running LLMs locally. -Using `GPT4All` is as simple as [downloading the binary]((/docs/integrations/llms/gpt4all)) and then: - - from langchain.llms import GPT4All - from langchain.chains import RetrievalQA - - llm = GPT4All(model="/Users/rlm/Desktop/Code/gpt4all/models/nous-hermes-13b.ggmlv3.q4_0.bin",max_tokens=2048) - qa_chain = RetrievalQA.from_chain_type(llm, retriever=vectorstore.as_retriever()) - -#### Customizing the prompt - -The prompt in `RetrievalQA` chain can be easily customized. - -```python -from langchain.chains import RetrievalQA -from langchain.prompts import PromptTemplate - -template = """Use the following pieces of context to answer the question at the end. -If you don't know the answer, just say that you don't know, don't try to make up an answer. -Use three sentences maximum and keep the answer as concise as possible. -Always say "thanks for asking!" at the end of the answer. -{context} -Question: {question} -Helpful Answer:""" -QA_CHAIN_PROMPT = PromptTemplate.from_template(template) - -llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) -qa_chain = RetrievalQA.from_chain_type( - llm, - retriever=vectorstore.as_retriever(), - chain_type_kwargs={"prompt": QA_CHAIN_PROMPT} -) -result = qa_chain({"query": question}) -result["result"] -``` - - 'The approaches to Task Decomposition are (1) using simple prompting by LLM, (2) using task-specific instructions, and (3) with human inputs. Thanks for asking!' - - -#### Return source documents - -The full set of retrieved documents used for answer distillation can be returned using `return_source_documents=True`. - -```python -from langchain.chains import RetrievalQA - -qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectorstore.as_retriever(), - return_source_documents=True) -result = qa_chain({"query": question}) -print(len(result['source_documents'])) -result['source_documents'][0] -``` - - 4 - Document(page_content='Task decomposition can be done (1) by LLM with simple prompting like "Steps for XYZ.\\n1.", "What are the subgoals for achieving XYZ?", (2) by using task-specific instructions; e.g. "Write a story outline." for writing a novel, or (3) with human inputs.', metadata={'source': 'https://lilianweng.github.io/posts/2023-06-23-agent/', 'title': "LLM Powered Autonomous Agents | Lil'Log", 'description': 'Building agents with LLM (large language model) as its core controller is a cool concept. Several proof-of-concepts demos, such as AutoGPT, GPT-Engineer and BabyAGI, serve as inspiring examples. The potentiality of LLM extends beyond generating well-written copies, stories, essays and programs; it can be framed as a powerful general problem solver.\nAgent System Overview In a LLM-powered autonomous agent system, LLM functions as the agent’s brain, complemented by several key components:', 'language': 'en'}) - - - -#### Return citations - -Answer citations can be returned using `RetrievalQAWithSourcesChain`. - - -```python -from langchain.chains import RetrievalQAWithSourcesChain - -qa_chain = RetrievalQAWithSourcesChain.from_chain_type(llm,retriever=vectorstore.as_retriever()) - -result = qa_chain({"question": question}) -result -``` - - { - 'question': 'What are the approaches to Task Decomposition?', - 'answer': 'The approaches to Task Decomposition include (1) using LLM with simple prompting, (2) using task-specific instructions, and (3) incorporating human inputs.\n', - 'sources': 'https://lilianweng.github.io/posts/2023-06-23-agent/' - } - -#### Customizing retrieved document processing - -Retrieved documents can be fed to an LLM for answer distillation in a few different ways. - -`stuff`, `refine`, `map-reduce`, and `map-rerank` chains for passing documents to an LLM prompt are well summarized [here](/docs/modules/chains/document/). - -`stuff` is commonly used because it simply "stuffs" all retrieved documents into the prompt. - -The [load_qa_chain](/docs/use_cases/question_answering/how_to/question_answering.html) is an easy way to pass documents to an LLM using these various approaches (e.g., see `chain_type`). - - -```python -from langchain.chains.question_answering import load_qa_chain - -chain = load_qa_chain(llm, chain_type="stuff") -chain({"input_documents": unique_docs, "question": question},return_only_outputs=True) -``` - - {'output_text': 'The approaches to task decomposition include (1) using simple prompting to break down tasks into subgoals, (2) providing task-specific instructions to guide the decomposition process, and (3) incorporating human inputs for task decomposition.'} - -We can also pass the `chain_type` to `RetrievalQA`. - - -```python -qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectorstore.as_retriever(), - chain_type="stuff") -result = qa_chain({"query": question}) -``` - -In summary, the user can choose the desired level of abstraction for QA: - -![summary_chains.png](/img/summary_chains.png) - -## Step 6. Converse (Extension) - -To hold a conversation, a chain needs to be able to refer to past interactions. Chain `Memory` allows us to do this. To keep chat history, we can specify a Memory buffer to track the conversation inputs / outputs. - -```python -from langchain.memory import ConversationBufferMemory - -memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) -``` - -The `ConversationalRetrievalChain` uses chat in the `Memory buffer`. - -```python -from langchain.chains import ConversationalRetrievalChain - -retriever = vectorstore.as_retriever() -chat = ConversationalRetrievalChain.from_llm(llm, retriever=retriever, memory=memory) -``` - -```python -result = chat({"question": "What are some of the main ideas in self-reflection?"}) -result['answer'] -``` - - "Some of the main ideas in self-reflection include:\n1. Iterative improvement: Self-reflection allows autonomous agents to improve by refining past action decisions and correcting mistakes.\n2. Trial and error: Self-reflection is crucial in real-world tasks where trial and error are inevitable.\n3. Two-shot examples: Self-reflection is created by showing pairs of failed trajectories and ideal reflections for guiding future changes in the plan.\n4. Working memory: Reflections are added to the agent's working memory, up to three, to be used as context for querying.\n5. Performance evaluation: Self-reflection involves continuously reviewing and analyzing actions, self-criticizing behavior, and reflecting on past decisions and strategies to refine approaches.\n6. Efficiency: Self-reflection encourages being smart and efficient, aiming to complete tasks in the least number of steps." - -The Memory buffer has context to resolve `"it"` ("self-reflection") in the below question. - -```python -result = chat({"question": "How does the Reflexion paper handle it?"}) -result['answer'] -``` - - "The Reflexion paper handles self-reflection by showing two-shot examples to the Learning Language Model (LLM). Each example consists of a failed trajectory and an ideal reflection that guides future changes in the agent's plan. These reflections are then added to the agent's working memory, up to a maximum of three, to be used as context for querying the LLM. This allows the agent to iteratively improve its reasoning skills by refining past action decisions and correcting previous mistakes." - -### Go deeper - -The [documentation](/docs/use_cases/question_answering/how_to/chat_vector_db) on `ConversationalRetrievalChain` offers a few extensions, such as streaming and source documents. - - -## Further reading -- Check out the [How to](/docs/use_cases/question_answer/how_to/) section for all the variations of chains that can be used for QA over docs in different settings. -- Check out the [Integrations-specific](/docs/use_cases/question_answer/integrations/) section for chains that use specific integrations. diff --git a/docs/extras/use_cases/question_answering/question_answering.ipynb b/docs/extras/use_cases/question_answering/question_answering.ipynb new file mode 100644 index 000000000..035ea5e2b --- /dev/null +++ b/docs/extras/use_cases/question_answering/question_answering.ipynb @@ -0,0 +1,686 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5151afed", + "metadata": {}, + "source": [ + "# Question Answering\n", + "\n", + "[![Open In Collab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/langchain-ai/langchain/blob/master/docs/extras/use_cases/question_answering/qa.ipynb)\n", + "\n", + "## Use case\n", + "Suppose you have some text documents (PDF, blog, Notion pages, etc.) and want to ask questions related to the contents of those documents. LLMs, given their proficiency in understanding text, are a great tool for this.\n", + "\n", + "In this walkthrough we'll go over how to build a question-answering over documents application using LLMs. Two very related use cases which we cover elsewhere are:\n", + "- [QA over structured data](/docs/use_cases/sql) (e.g., SQL)\n", + "- [QA over code](/docs/use_cases/code) (e.g., Python)\n", + "\n", + "![intro.png](/img/qa_intro.png)\n", + "\n", + "## Overview\n", + "The pipeline for converting raw unstructured data into a QA chain looks like this:\n", + "1. `Loading`: First we need to load our data. Unstructured data can be loaded from many sources. Use the [LangChain integration hub](https://integrations.langchain.com/) to browse the full set of loaders.\n", + "Each loader returns data as a LangChain [`Document`](/docs/components/schema/document).\n", + "2. `Splitting`: [Text splitters](/docs/modules/data_connection/document_transformers/) break `Documents` into splits of specified size\n", + "3. `Storage`: Storage (e.g., often a [vectorstore](/docs/modules/data_connection/vectorstores/)) will house [and often embed](https://www.pinecone.io/learn/vector-embeddings/) the splits\n", + "4. `Retrieval`: The app retrieves splits from storage (e.g., often [with similar embeddings](https://www.pinecone.io/learn/k-nearest-neighbor/) to the input question)\n", + "5. `Generation`: An [LLM](/docs/modules/model_io/models/llms/) produces an answer using a prompt that includes the question and the retrieved data\n", + "6. `Conversation` (Extension): Hold a multi-turn conversation by adding [Memory](/docs/modules/memory/) to your QA chain.\n", + "\n", + "![flow.jpeg](/img/qa_flow.jpeg)\n", + "\n", + "## Quickstart\n", + "\n", + "To give you a sneak preview, the above pipeline can be all be wrapped in a single object: `VectorstoreIndexCreator`. Suppose we want a QA app over this [blog post](https://lilianweng.github.io/posts/2023-06-23-agent/). We can create this in a few lines of code. First set environment variables and install packages:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e14b744b", + "metadata": {}, + "outputs": [], + "source": [ + "pip install openai chromadb\n", + "\n", + "# Set env var OPENAI_API_KEY or load from a .env file\n", + "# import dotenv\n", + "\n", + "# dotenv.load_env()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "046cefc0", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import WebBaseLoader\n", + "from langchain.indexes import VectorstoreIndexCreator\n", + "\n", + "loader = WebBaseLoader(\"https://lilianweng.github.io/posts/2023-06-23-agent/\")\n", + "index = VectorstoreIndexCreator().from_loaders([loader])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f4bf8740", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "' Task decomposition is a technique used to break down complex tasks into smaller and simpler steps. It can be done using LLM with simple prompting, task-specific instructions, or with human inputs. Tree of Thoughts (Yao et al. 2023) is an extension of Chain of Thought (Wei et al. 2022) which explores multiple reasoning possibilities at each step.'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "index.query(\"What is Task Decomposition?\")" + ] + }, + { + "cell_type": "markdown", + "id": "8224aad6", + "metadata": {}, + "source": [ + "Ok, but what's going on under the hood, and how could we customize this for our specific use case? For that, let's take a look at how we can construct this pipeline piece by piece." + ] + }, + { + "cell_type": "markdown", + "id": "ba5daed6", + "metadata": {}, + "source": [ + "## Step 1. Load\n", + "\n", + "Specify a `DocumentLoader` to load in your unstructured data as `Documents`. A `Document` is a piece of text (the `page_content`) and associated metadata." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cf4d5c72", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.document_loaders import WebBaseLoader\n", + "\n", + "loader = WebBaseLoader(\"https://lilianweng.github.io/posts/2023-06-23-agent/\")\n", + "data = loader.load()" + ] + }, + { + "cell_type": "markdown", + "id": "fd2cc9a7", + "metadata": {}, + "source": [ + "### Go deeper\n", + "- Browse the > 120 data loader integrations [here](https://integrations.langchain.com/).\n", + "- See further documentation on loaders [here](/docs/modules/data_connection/document_loaders/).\n", + "\n", + "## Step 2. Split\n", + "\n", + "Split the `Document` into chunks for embedding and vector storage." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4b11c01d", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "\n", + "text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)\n", + "all_splits = text_splitter.split_documents(data)" + ] + }, + { + "cell_type": "markdown", + "id": "0a33bd4d", + "metadata": {}, + "source": [ + "### Go deeper\n", + "\n", + "- `DocumentSplitters` are just one type of the more generic `DocumentTransformers`, which can all be useful in this preprocessing step.\n", + "- See further documentation on transformers [here](/docs/modules/data_connection/document_transformers/).\n", + "- `Context-aware splitters` keep the location (\"context\") of each split in the original `Document`:\n", + " - [Markdown files](/docs/use_cases/question_answering/how_to/document-context-aware-QA)\n", + " - [Code (py or js)](docs/integrations/document_loaders/source_code)\n", + " - [Documents](/docs/integrations/document_loaders/grobid)\n", + "\n", + "## Step 3. Store\n", + "\n", + "To be able to look up our document splits, we first need to store them where we can later look them up.\n", + "The most common way to do this is to embed the contents of each document then store the embedding and document in a vector store, with the embedding being used to index the document." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e9c302c8", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.embeddings import OpenAIEmbeddings\n", + "from langchain.vectorstores import Chroma\n", + "\n", + "vectorstore = Chroma.from_documents(documents=all_splits, embedding=OpenAIEmbeddings())" + ] + }, + { + "cell_type": "markdown", + "id": "dc6f22b0", + "metadata": {}, + "source": [ + "### Go deeper\n", + "- Browse the > 40 vectorstores integrations [here](https://integrations.langchain.com/).\n", + "- See further documentation on vectorstores [here](/docs/modules/data_connection/vectorstores/).\n", + "- Browse the > 30 text embedding integrations [here](https://integrations.langchain.com/).\n", + "- See further documentation on embedding models [here](/docs/modules/data_connection/text_embedding/).\n", + "\n", + " Here are Steps 1-3:\n", + "\n", + "![lc.png](/img/qa_data_load.png)\n", + "\n", + "## Step 4. Retrieve\n", + "\n", + "Retrieve relevant splits for any question using [similarity search](https://www.pinecone.io/learn/what-is-similarity-search/)." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e2c26b7d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "question = \"What are the approaches to Task Decomposition?\"\n", + "docs = vectorstore.similarity_search(question)\n", + "len(docs)" + ] + }, + { + "cell_type": "markdown", + "id": "5d5a113b", + "metadata": {}, + "source": [ + "### Go deeper\n", + "\n", + "Vectorstores are commonly used for retrieval, but they are not the only option. For example, SVMs (see thread [here](https://twitter.com/karpathy/status/1647025230546886658?s=20)) can also be used.\n", + "\n", + "LangChain [has many retrievers](/docs/modules/data_connection/retrievers/) including, but not limited to, vectorstores. All retrievers implement a common method `get_relevant_documents()` (and its asynchronous variant `aget_relevant_documents()`)." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c901eaee", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.retrievers import SVMRetriever\n", + "\n", + "svm_retriever = SVMRetriever.from_documents(all_splits,OpenAIEmbeddings())\n", + "docs_svm=svm_retriever.get_relevant_documents(question)\n", + "len(docs_svm)" + ] + }, + { + "cell_type": "markdown", + "id": "69de3d54", + "metadata": {}, + "source": [ + "Some common ways to improve on vector similarity search include:\n", + "- `MultiQueryRetriever` [generates variants of the input question](/docs/modules/data_connection/retrievers/MultiQueryRetriever) to improve retrieval.\n", + "- `Max marginal relevance` selects for [relevance and diversity](https://www.cs.cmu.edu/~jgc/publication/The_Use_MMR_Diversity_Based_LTMIR_1998.pdf) among the retrieved documents.\n", + "- Documents can be filtered during retrieval using [`metadata` filters](/docs/use_cases/question_answering/how_to/document-context-aware-QA)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c690f01a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:langchain.retrievers.multi_query:Generated queries: ['1. How can Task Decomposition be approached?', '2. What are the different methods for Task Decomposition?', '3. What are the various approaches to decomposing tasks?']\n" + ] + }, + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import logging\n", + "\n", + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.retrievers.multi_query import MultiQueryRetriever\n", + "\n", + "logging.basicConfig()\n", + "logging.getLogger('langchain.retrievers.multi_query').setLevel(logging.INFO)\n", + "\n", + "retriever_from_llm = MultiQueryRetriever.from_llm(retriever=vectorstore.as_retriever(),\n", + " llm=ChatOpenAI(temperature=0))\n", + "unique_docs = retriever_from_llm.get_relevant_documents(query=question)\n", + "len(unique_docs)" + ] + }, + { + "cell_type": "markdown", + "id": "415d6824", + "metadata": {}, + "source": [ + "## Step 5. Generate\n", + "\n", + "Distill the retrieved documents into an answer using an LLM/Chat model (e.g., `gpt-3.5-turbo`) with `RetrievalQA` chain.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "99fa1aec", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'query': 'What are the approaches to Task Decomposition?',\n", + " 'result': 'There are three approaches to task decomposition:\\n\\n1. Using Language Model with simple prompting: This approach involves using a Language Model (LLM) with simple prompts like \"Steps for XYZ\" or \"What are the subgoals for achieving XYZ?\" to guide the task decomposition process.\\n\\n2. Using task-specific instructions: In this approach, task-specific instructions are provided to guide the task decomposition. For example, for the task of writing a novel, an instruction like \"Write a story outline\" can be given to help decompose the task into smaller subtasks.\\n\\n3. Human inputs: Task decomposition can also be done with the help of human inputs. This involves getting input and guidance from humans to break down a complex task into smaller, more manageable subtasks.'}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.chains import RetrievalQA\n", + "from langchain.chat_models import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", + "qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectorstore.as_retriever())\n", + "qa_chain({\"query\": question})" + ] + }, + { + "cell_type": "markdown", + "id": "f7d52c84", + "metadata": {}, + "source": [ + "Note, you can pass in an `LLM` or a `ChatModel` (like we did here) to the `RetrievalQA` chain.\n", + "\n", + "### Go deeper\n", + "\n", + "#### Choosing LLMs\n", + "- Browse the > 55 LLM and chat model integrations [here](https://integrations.langchain.com/).\n", + "- See further documentation on LLMs and chat models [here](/docs/modules/model_io/models/).\n", + "- Use local LLMS: The popularity of [PrivateGPT](https://github.com/imartinez/privateGPT) and [GPT4All](https://github.com/nomic-ai/gpt4all) underscore the importance of running LLMs locally.\n", + "Using `GPT4All` is as simple as [downloading the binary]((/docs/integrations/llms/gpt4all)) and then:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "02d6c9dc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found model file at /Users/rlm/Desktop/Code/gpt4all/models/nous-hermes-13b.ggmlv3.q4_0.bin\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "objc[61331]: Class GGMLMetalClass is implemented in both /Users/rlm/miniforge3/envs/llama/lib/python3.9/site-packages/gpt4all/llmodel_DO_NOT_MODIFY/build/libreplit-mainline-metal.dylib (0x2e3384208) and /Users/rlm/miniforge3/envs/llama/lib/python3.9/site-packages/gpt4all/llmodel_DO_NOT_MODIFY/build/libllamamodel-mainline-metal.dylib (0x2e37b0208). One of the two will be used. Which one is undefined.\n", + "llama.cpp: using Metal\n", + "llama.cpp: loading model from /Users/rlm/Desktop/Code/gpt4all/models/nous-hermes-13b.ggmlv3.q4_0.bin\n", + "llama_model_load_internal: format = ggjt v3 (latest)\n", + "llama_model_load_internal: n_vocab = 32001\n", + "llama_model_load_internal: n_ctx = 2048\n", + "llama_model_load_internal: n_embd = 5120\n", + "llama_model_load_internal: n_mult = 256\n", + "llama_model_load_internal: n_head = 40\n", + "llama_model_load_internal: n_layer = 40\n", + "llama_model_load_internal: n_rot = 128\n", + "llama_model_load_internal: ftype = 2 (mostly Q4_0)\n", + "llama_model_load_internal: n_ff = 13824\n", + "llama_model_load_internal: n_parts = 1\n", + "llama_model_load_internal: model size = 13B\n", + "llama_model_load_internal: ggml ctx size = 0.09 MB\n", + "llama_model_load_internal: mem required = 9031.71 MB (+ 1608.00 MB per state)\n", + "llama_new_context_with_model: kv self size = 1600.00 MB\n", + "ggml_metal_init: allocating\n", + "ggml_metal_init: using MPS\n", + "ggml_metal_init: loading '/Users/rlm/miniforge3/envs/llama/lib/python3.9/site-packages/gpt4all/llmodel_DO_NOT_MODIFY/build/ggml-metal.metal'\n", + "ggml_metal_init: loaded kernel_add 0x2bbbbc2f0\n", + "ggml_metal_init: loaded kernel_mul 0x2bbbba840\n", + "ggml_metal_init: loaded kernel_mul_row 0x2bb917dd0\n", + "ggml_metal_init: loaded kernel_scale 0x2bb918150\n", + "ggml_metal_init: loaded kernel_silu 0x2bb9184d0\n", + "ggml_metal_init: loaded kernel_relu 0x2bb918850\n", + "ggml_metal_init: loaded kernel_gelu 0x2bbbc3f10\n", + "ggml_metal_init: loaded kernel_soft_max 0x2bbbc5840\n", + "ggml_metal_init: loaded kernel_diag_mask_inf 0x2bbbc4c70\n", + "ggml_metal_init: loaded kernel_get_rows_f16 0x2bbbc5fc0\n", + "ggml_metal_init: loaded kernel_get_rows_q4_0 0x2bbbc6720\n", + "ggml_metal_init: loaded kernel_get_rows_q4_1 0x2bb918c10\n", + "ggml_metal_init: loaded kernel_get_rows_q2_k 0x2bbbc51b0\n", + "ggml_metal_init: loaded kernel_get_rows_q3_k 0x2bbbc7630\n", + "ggml_metal_init: loaded kernel_get_rows_q4_k 0x2d4394e30\n", + "ggml_metal_init: loaded kernel_get_rows_q5_k 0x2bbbc7890\n", + "ggml_metal_init: loaded kernel_get_rows_q6_k 0x2d4395210\n", + "ggml_metal_init: loaded kernel_rms_norm 0x2bbbc8740\n", + "ggml_metal_init: loaded kernel_norm 0x2bbbc8b30\n", + "ggml_metal_init: loaded kernel_mul_mat_f16_f32 0x2d4395470\n", + "ggml_metal_init: loaded kernel_mul_mat_q4_0_f32 0x2d4395a70\n", + "ggml_metal_init: loaded kernel_mul_mat_q4_1_f32 0x1242b1a00\n", + "ggml_metal_init: loaded kernel_mul_mat_q2_k_f32 0x29f17d1c0\n", + "ggml_metal_init: loaded kernel_mul_mat_q3_k_f32 0x2d4396050\n", + "ggml_metal_init: loaded kernel_mul_mat_q4_k_f32 0x2bbbc98a0\n", + "ggml_metal_init: loaded kernel_mul_mat_q5_k_f32 0x2bbbca4a0\n", + "ggml_metal_init: loaded kernel_mul_mat_q6_k_f32 0x2bbbcae90\n", + "ggml_metal_init: loaded kernel_rope 0x2bbbca700\n", + "ggml_metal_init: loaded kernel_alibi_f32 0x2bbbcc6e0\n", + "ggml_metal_init: loaded kernel_cpy_f32_f16 0x2bbbccf90\n", + "ggml_metal_init: loaded kernel_cpy_f32_f32 0x2bbbcd900\n", + "ggml_metal_init: loaded kernel_cpy_f16_f16 0x2bbbce1f0\n", + "ggml_metal_init: recommendedMaxWorkingSetSize = 21845.34 MB\n", + "ggml_metal_init: hasUnifiedMemory = true\n", + "ggml_metal_init: maxTransferRate = built-in GPU\n", + "ggml_metal_add_buffer: allocated 'data ' buffer, size = 6984.06 MB, ( 6984.45 / 21845.34)\n", + "ggml_metal_add_buffer: allocated 'eval ' buffer, size = 1024.00 MB, ( 8008.45 / 21845.34)\n", + "ggml_metal_add_buffer: allocated 'kv ' buffer, size = 1602.00 MB, ( 9610.45 / 21845.34)\n", + "ggml_metal_add_buffer: allocated 'scr0 ' buffer, size = 512.00 MB, (10122.45 / 21845.34)\n", + "ggml_metal_add_buffer: allocated 'scr1 ' buffer, size = 512.00 MB, (10634.45 / 21845.34)\n" + ] + } + ], + "source": [ + "from langchain.llms import GPT4All\n", + "from langchain.chains import RetrievalQA\n", + "\n", + "llm = GPT4All(model=\"/Users/rlm/Desktop/Code/gpt4all/models/nous-hermes-13b.ggmlv3.q4_0.bin\",max_tokens=2048)\n", + "qa_chain = RetrievalQA.from_chain_type(llm, retriever=vectorstore.as_retriever())" + ] + }, + { + "cell_type": "markdown", + "id": "fa82f437", + "metadata": {}, + "source": [ + "#### Customizing the prompt\n", + "\n", + "The prompt in `RetrievalQA` chain can be easily customized." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e4fee704", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ggml_metal_free: deallocating\n" + ] + }, + { + "data": { + "text/plain": [ + "'The approaches to task decomposition include using LLM with simple prompting, task-specific instructions, or human inputs. Thanks for asking!'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.chains import RetrievalQA\n", + "from langchain.prompts import PromptTemplate\n", + "\n", + "template = \"\"\"Use the following pieces of context to answer the question at the end. \n", + "If you don't know the answer, just say that you don't know, don't try to make up an answer. \n", + "Use three sentences maximum and keep the answer as concise as possible. \n", + "Always say \"thanks for asking!\" at the end of the answer. \n", + "{context}\n", + "Question: {question}\n", + "Helpful Answer:\"\"\"\n", + "QA_CHAIN_PROMPT = PromptTemplate.from_template(template)\n", + "\n", + "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", + "qa_chain = RetrievalQA.from_chain_type(\n", + " llm,\n", + " retriever=vectorstore.as_retriever(),\n", + " chain_type_kwargs={\"prompt\": QA_CHAIN_PROMPT}\n", + ")\n", + "result = qa_chain({\"query\": question})\n", + "result[\"result\"]" + ] + }, + { + "cell_type": "markdown", + "id": "ff40e8db", + "metadata": {}, + "source": [ + "#### Return source documents\n", + "\n", + "The full set of retrieved documents used for answer distillation can be returned using `return_source_documents=True`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "60004293", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n" + ] + }, + { + "data": { + "text/plain": [ + "Document(page_content='Task decomposition can be done (1) by LLM with simple prompting like \"Steps for XYZ.\\\\n1.\", \"What are the subgoals for achieving XYZ?\", (2) by using task-specific instructions; e.g. \"Write a story outline.\" for writing a novel, or (3) with human inputs.', metadata={'description': 'Building agents with LLM (large language model) as its core controller is a cool concept. Several proof-of-concepts demos, such as AutoGPT, GPT-Engineer and BabyAGI, serve as inspiring examples. The potentiality of LLM extends beyond generating well-written copies, stories, essays and programs; it can be framed as a powerful general problem solver.\\nAgent System Overview In a LLM-powered autonomous agent system, LLM functions as the agent’s brain, complemented by several key components:', 'language': 'en', 'source': 'https://lilianweng.github.io/posts/2023-06-23-agent/', 'title': \"LLM Powered Autonomous Agents | Lil'Log\"})" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.chains import RetrievalQA\n", + "\n", + "qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectorstore.as_retriever(),\n", + " return_source_documents=True)\n", + "result = qa_chain({\"query\": question})\n", + "print(len(result['source_documents']))\n", + "result['source_documents'][0]" + ] + }, + { + "cell_type": "markdown", + "id": "1b600236", + "metadata": {}, + "source": [ + "#### Return citations\n", + "\n", + "Answer citations can be returned using `RetrievalQAWithSourcesChain`." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "948f6d19", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'question': 'What are the approaches to Task Decomposition?',\n", + " 'answer': 'The approaches to Task Decomposition include:\\n1. Using LLM with simple prompting, such as providing steps or subgoals for achieving a task.\\n2. Using task-specific instructions, such as providing a specific instruction like \"Write a story outline\" for writing a novel.\\n3. Using human inputs to decompose the task.\\nAnother approach is the Tree of Thoughts, which extends the Chain of Thought (CoT) technique by exploring multiple reasoning possibilities at each step and generating multiple thoughts per step, creating a tree structure. The search process can be BFS or DFS, and each state can be evaluated by a classifier or majority vote.\\nSources: https://lilianweng.github.io/posts/2023-06-23-agent/',\n", + " 'sources': ''}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.chains import RetrievalQAWithSourcesChain\n", + "\n", + "qa_chain = RetrievalQAWithSourcesChain.from_chain_type(llm,retriever=vectorstore.as_retriever())\n", + "\n", + "result = qa_chain({\"question\": question})\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "73d0b138", + "metadata": {}, + "source": [ + "#### Customizing retrieved document processing\n", + "\n", + "Retrieved documents can be fed to an LLM for answer distillation in a few different ways.\n", + "\n", + "`stuff`, `refine`, `map-reduce`, and `map-rerank` chains for passing documents to an LLM prompt are well summarized [here](/docs/modules/chains/document/).\n", + " \n", + "`stuff` is commonly used because it simply \"stuffs\" all retrieved documents into the prompt.\n", + "\n", + "The [load_qa_chain](/docs/use_cases/question_answering/how_to/question_answering.html) is an easy way to pass documents to an LLM using these various approaches (e.g., see `chain_type`)." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "29aa139f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'output_text': 'The approaches to task decomposition mentioned in the provided context are:\\n\\n1. Chain of thought (CoT): This approach involves instructing the language model to \"think step by step\" and decompose complex tasks into smaller and simpler steps. It enhances model performance on complex tasks by utilizing more test-time computation.\\n\\n2. Tree of Thoughts: This approach extends CoT by exploring multiple reasoning possibilities at each step. It decomposes the problem into multiple thought steps and generates multiple thoughts per step, creating a tree structure. The search process can be BFS or DFS, and each state is evaluated by a classifier or majority vote.\\n\\n3. LLM with simple prompting: This approach involves using a language model with simple prompts like \"Steps for XYZ\" or \"What are the subgoals for achieving XYZ?\" to perform task decomposition.\\n\\n4. Task-specific instructions: This approach involves providing task-specific instructions to guide the language model in decomposing the task. For example, providing the instruction \"Write a story outline\" for the task of writing a novel.\\n\\n5. Human inputs: Task decomposition can also be done with human inputs, where humans provide guidance and input to break down the task into smaller subtasks.'}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain.chains.question_answering import load_qa_chain\n", + "\n", + "chain = load_qa_chain(llm, chain_type=\"stuff\")\n", + "chain({\"input_documents\": unique_docs, \"question\": question},return_only_outputs=True)" + ] + }, + { + "cell_type": "markdown", + "id": "a8cb8cd1", + "metadata": {}, + "source": [ + "We can also pass the `chain_type` to `RetrievalQA`." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "f68574bd", + "metadata": {}, + "outputs": [], + "source": [ + "qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectorstore.as_retriever(),\n", + " chain_type=\"stuff\")\n", + "result = qa_chain({\"query\": question})" + ] + }, + { + "cell_type": "markdown", + "id": "b33aeb5f", + "metadata": {}, + "source": [ + "In summary, the user can choose the desired level of abstraction for QA:\n", + "\n", + "![summary_chains.png](/img/summary_chains.png)\n", + "\n", + "## Step 6. Chat\n", + "\n", + "See our [use-case on chat](/docs/use_cases/chatbots) for detail on this!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/snippets/modules/callbacks/get_started.mdx b/docs/snippets/modules/callbacks/get_started.mdx index 7e4974da9..9596e2a37 100644 --- a/docs/snippets/modules/callbacks/get_started.mdx +++ b/docs/snippets/modules/callbacks/get_started.mdx @@ -130,10 +130,10 @@ chain.run(number=2, callbacks=[handler]) The `callbacks` argument is available on most objects throughout the API (Chains, Models, Tools, Agents, etc.) in two different places: -- **Constructor callbacks**: defined in the constructor, eg. `LLMChain(callbacks=[handler], tags=['a-tag'])`, which will be used for all calls made on that object, and will be scoped to that object only, eg. if you pass a handler to the `LLMChain` constructor, it will not be used by the Model attached to that chain. -- **Request callbacks**: defined in the `run()`/`apply()` methods used for issuing a request, eg. `chain.run(input, callbacks=[handler])`, which will be used for that specific request only, and all sub-requests that it contains (eg. a call to an LLMChain triggers a call to a Model, which uses the same handler passed in the `call()` method). +- **Constructor callbacks**: defined in the constructor, e.g. `LLMChain(callbacks=[handler], tags=['a-tag'])`, which will be used for all calls made on that object, and will be scoped to that object only, e.g. if you pass a handler to the `LLMChain` constructor, it will not be used by the Model attached to that chain. +- **Request callbacks**: defined in the `run()`/`apply()` methods used for issuing a request, e.g. `chain.run(input, callbacks=[handler])`, which will be used for that specific request only, and all sub-requests that it contains (e.g. a call to an LLMChain triggers a call to a Model, which uses the same handler passed in the `call()` method). -The `verbose` argument is available on most objects throughout the API (Chains, Models, Tools, Agents, etc.) as a constructor argument, eg. `LLMChain(verbose=True)`, and it is equivalent to passing a `ConsoleCallbackHandler` to the `callbacks` argument of that object and all child objects. This is useful for debugging, as it will log all events to the console. +The `verbose` argument is available on most objects throughout the API (Chains, Models, Tools, Agents, etc.) as a constructor argument, e.g. `LLMChain(verbose=True)`, and it is equivalent to passing a `ConsoleCallbackHandler` to the `callbacks` argument of that object and all child objects. This is useful for debugging, as it will log all events to the console. ### When do you want to use each of these? diff --git a/docs/snippets/modules/chains/popular/sqlite.mdx b/docs/snippets/modules/chains/popular/sqlite.mdx index 01024a5e4..a709328d1 100644 --- a/docs/snippets/modules/chains/popular/sqlite.mdx +++ b/docs/snippets/modules/chains/popular/sqlite.mdx @@ -628,7 +628,7 @@ local_chain("How many customers are there?") -Even this relatively large model will most likely fail to generate more complicated SQL by itself. However, you can log its inputs and outputs so that you can hand-correct them and use the corrected examples for few shot prompt examples later. In practice, you could log any executions of your chain that raise exceptions (as shown in the example below) or get direct user feedback in cases where the results are incorrect (but did not raise an exception). +Even this relatively large model will most likely fail to generate more complicated SQL by itself. However, you can log its inputs and outputs so that you can hand-correct them and use the corrected examples for few-shot prompt examples later. In practice, you could log any executions of your chain that raise exceptions (as shown in the example below) or get direct user feedback in cases where the results are incorrect (but did not raise an exception). ```bash @@ -878,7 +878,7 @@ YAML_EXAMPLES = """ """ ``` -Now that you have some examples (with manually corrected output SQL), you can do few shot prompt seeding the usual way: +Now that you have some examples (with manually corrected output SQL), you can do few-shot prompt seeding the usual way: ```python @@ -925,7 +925,7 @@ few_shot_prompt = FewShotPromptTemplate( -The model should do better now with this few shot prompt, especially for inputs similar to the examples you have seeded it with. +The model should do better now with this few-shot prompt, especially for inputs similar to the examples you have seeded it with. ```python diff --git a/docs/snippets/modules/data_connection/document_transformers/get_started.mdx b/docs/snippets/modules/data_connection/document_transformers/get_started.mdx index faafa4500..266aa29e5 100644 --- a/docs/snippets/modules/data_connection/document_transformers/get_started.mdx +++ b/docs/snippets/modules/data_connection/document_transformers/get_started.mdx @@ -4,7 +4,7 @@ In addition to controlling which characters you can split on, you can also contr - `length_function`: how the length of chunks is calculated. Defaults to just counting number of characters, but it's pretty common to pass a token counter here. - `chunk_size`: the maximum size of your chunks (as measured by the length function). -- `chunk_overlap`: the maximum overlap between chunks. It can be nice to have some overlap to maintain some continuity between chunks (eg do a sliding window). +- `chunk_overlap`: the maximum overlap between chunks. It can be nice to have some overlap to maintain some continuity between chunks (e.g. do a sliding window). - `add_start_index`: whether to include the starting position of each chunk within the original document in the metadata. diff --git a/docs/snippets/modules/model_io/models/chat/how_to/prompts.mdx b/docs/snippets/modules/model_io/models/chat/how_to/prompts.mdx index b29643512..a02c7b4e2 100644 --- a/docs/snippets/modules/model_io/models/chat/how_to/prompts.mdx +++ b/docs/snippets/modules/model_io/models/chat/how_to/prompts.mdx @@ -34,7 +34,7 @@ chat(chat_prompt.format_prompt(input_language="English", output_language="French -If you wanted to construct the MessagePromptTemplate more directly, you could create a PromptTemplate outside and then pass it in, eg: +If you wanted to construct the MessagePromptTemplate more directly, you could create a PromptTemplate outside and then pass it in, e.g.: ```python diff --git a/docs/snippets/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx b/docs/snippets/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx index e14aafd2f..4e20db3e3 100644 --- a/docs/snippets/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx +++ b/docs/snippets/modules/model_io/prompts/prompt_templates/few_shot_examples.mdx @@ -1,13 +1,13 @@ ### Use Case -In this tutorial, we'll configure few shot examples for self-ask with search. +In this tutorial, we'll configure few-shot examples for self-ask with search. ## Using an example set ### Create the example set -To get started, create a list of few shot examples. Each example should be a dictionary with the keys being the input variables and the values being the values for those input variables. +To get started, create a list of few-shot examples. Each example should be a dictionary with the keys being the input variables and the values being the values for those input variables. ```python from langchain.prompts.few_shot import FewShotPromptTemplate @@ -69,9 +69,9 @@ So the final answer is: No ] ``` -### Create a formatter for the few shot examples +### Create a formatter for the few-shot examples -Configure a formatter that will format the few shot examples into a string. This formatter should be a `PromptTemplate` object. +Configure a formatter that will format the few-shot examples into a string. This formatter should be a `PromptTemplate` object. ```python @@ -98,7 +98,7 @@ print(example_prompt.format(**examples[0])) ### Feed examples and formatter to `FewShotPromptTemplate` -Finally, create a `FewShotPromptTemplate` object. This object takes in the few shot examples and the formatter for the few shot examples. +Finally, create a `FewShotPromptTemplate` object. This object takes in the few-shot examples and the formatter for the few-shot examples. ```python @@ -171,7 +171,7 @@ print(prompt.format(input="Who was the father of Mary Ball Washington?")) We will reuse the example set and the formatter from the previous section. However, instead of feeding the examples directly into the `FewShotPromptTemplate` object, we will feed them into an `ExampleSelector` object. -In this tutorial, we will use the `SemanticSimilarityExampleSelector` class. This class selects few shot examples based on their similarity to the input. It uses an embedding model to compute the similarity between the input and the few shot examples, as well as a vector store to perform the nearest neighbor search. +In this tutorial, we will use the `SemanticSimilarityExampleSelector` class. This class selects few-shot examples based on their similarity to the input. It uses an embedding model to compute the similarity between the input and the few-shot examples, as well as a vector store to perform the nearest neighbor search. ```python @@ -224,7 +224,7 @@ for example in selected_examples: ### Feed example selector into `FewShotPromptTemplate` -Finally, create a `FewShotPromptTemplate` object. This object takes in the example selector and the formatter for the few shot examples. +Finally, create a `FewShotPromptTemplate` object. This object takes in the example selector and the formatter for the few-shot examples. ```python diff --git a/docs/snippets/modules/model_io/prompts/prompt_templates/partial.mdx b/docs/snippets/modules/model_io/prompts/prompt_templates/partial.mdx index b791a220f..120340f37 100644 --- a/docs/snippets/modules/model_io/prompts/prompt_templates/partial.mdx +++ b/docs/snippets/modules/model_io/prompts/prompt_templates/partial.mdx @@ -1,4 +1,4 @@ -## Partial With Strings +## Partial with strings One common use case for wanting to partial a prompt template is if you get some of the variables before others. For example, suppose you have a prompt template that requires two variables, `foo` and `baz`. If you get the `foo` value early on in the chain, but the `baz` value later, it can be annoying to wait until you have both variables in the same place to pass them to the prompt template. Instead, you can partial the prompt template with the `foo` value, and then pass the partialed prompt template along and just use that. Below is an example of doing this: @@ -40,7 +40,7 @@ print(prompt.format(bar="baz")) -## Partial With Functions +## Partial with functions The other common use is to partial with a function. The use case for this is when you have a variable you know that you always want to fetch in a common way. A prime example of this is with date or time. Imagine you have a prompt which you always want to have the current date. You can't hard code it in the prompt, and passing it along with the other input variables is a bit annoying. In this case, it's very handy to be able to partial the prompt with a function that always returns the current date. diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/__init__.py b/libs/experimental/langchain_experimental/comprehend_moderation/__init__.py new file mode 100644 index 000000000..5e4a26863 --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/__init__.py @@ -0,0 +1,25 @@ +from langchain_experimental.comprehend_moderation.amazon_comprehend_moderation import ( + AmazonComprehendModerationChain, +) +from langchain_experimental.comprehend_moderation.base_moderation import BaseModeration +from langchain_experimental.comprehend_moderation.base_moderation_callbacks import ( + BaseModerationCallbackHandler, +) +from langchain_experimental.comprehend_moderation.base_moderation_enums import ( + BaseModerationActions, + BaseModerationFilters, +) +from langchain_experimental.comprehend_moderation.intent import ComprehendIntent +from langchain_experimental.comprehend_moderation.pii import ComprehendPII +from langchain_experimental.comprehend_moderation.toxicity import ComprehendToxicity + +__all__ = [ + "BaseModeration", + "BaseModerationActions", + "BaseModerationFilters", + "ComprehendPII", + "ComprehendIntent", + "ComprehendToxicity", + "BaseModerationCallbackHandler", + "AmazonComprehendModerationChain", +] diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/amazon_comprehend_moderation.py b/libs/experimental/langchain_experimental/comprehend_moderation/amazon_comprehend_moderation.py new file mode 100644 index 000000000..d00520e62 --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/amazon_comprehend_moderation.py @@ -0,0 +1,184 @@ +from typing import Any, Dict, List, Optional + +from langchain.callbacks.manager import CallbackManagerForChainRun +from langchain.chains.base import Chain + +from langchain_experimental.comprehend_moderation.base_moderation import ( + BaseModeration, +) +from langchain_experimental.comprehend_moderation.base_moderation_callbacks import ( + BaseModerationCallbackHandler, +) +from langchain_experimental.pydantic_v1 import root_validator + + +class AmazonComprehendModerationChain(Chain): + """A subclass of Chain, designed to apply moderation to LLMs.""" + + output_key: str = "output" #: :meta private: + """Key used to fetch/store the output in data containers. Defaults to `output`""" + + input_key: str = "input" #: :meta private: + """Key used to fetch/store the input in data containers. Defaults to `input`""" + + moderation_config: Optional[Dict[str, Any]] = None + """Configuration settings for moderation""" + + client: Optional[Any] + """boto3 client object for connection to Amazon Comprehend""" + + region_name: Optional[str] = None + """The aws region e.g., `us-west-2`. Fallsback to AWS_DEFAULT_REGION env variable + or region specified in ~/.aws/config in case it is not provided here. + """ + + credentials_profile_name: Optional[str] = None + """The name of the profile in the ~/.aws/credentials or ~/.aws/config files, which + has either access keys or role information specified. + If not specified, the default credential profile or, if on an EC2 instance, + credentials from IMDS will be used. + See: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html + """ + + moderation_callback: Optional[BaseModerationCallbackHandler] = None + """Callback handler for moderation, this is different + from regular callbacks which can be used in addition to this.""" + + unique_id: Optional[str] = None + """A unique id that can be used to identify or group a user or session""" + + @root_validator(pre=True) + def create_client(cls, values: Dict[str, Any]) -> Dict[str, Any]: + """ + Creates an Amazon Comprehend client + + Args: + values (Dict[str, Any]): A dictionary containing configuration values. + + Returns: + Dict[str, Any]: A dictionary with the updated configuration values, + including the Amazon Comprehend client. + + Raises: + ModuleNotFoundError: If the 'boto3' package is not installed. + ValueError: If there is an issue importing 'boto3' or loading + AWS credentials. + + Example: + .. code-block:: python + + config = { + "credentials_profile_name": "my-profile", + "region_name": "us-west-2" + } + updated_config = create_client(config) + comprehend_client = updated_config["client"] + """ + + if values.get("client") is not None: + return values + try: + import boto3 + + if values.get("credentials_profile_name"): + session = boto3.Session(profile_name=values["credentials_profile_name"]) + else: + # use default credentials + session = boto3.Session() + + client_params = {} + if values.get("region_name"): + client_params["region_name"] = values["region_name"] + + values["client"] = session.client("comprehend", **client_params) + + return values + except ImportError: + raise ModuleNotFoundError( + "Could not import boto3 python package. " + "Please install it with `pip install boto3`." + ) + except Exception as e: + raise ValueError( + "Could not load credentials to authenticate with AWS client. " + "Please check that credentials in the specified " + "profile name are valid." + ) from e + + @property + def output_keys(self) -> List[str]: + """ + Returns a list of output keys. + + This method defines the output keys that will be used to access the output + values produced by the chain or function. It ensures that the specified keys + are available to access the outputs. + + Returns: + List[str]: A list of output keys. + + Note: + This method is considered private and may not be intended for direct + external use. + + """ + return [self.output_key] + + @property + def input_keys(self) -> List[str]: + """ + Returns a list of input keys expected by the prompt. + + This method defines the input keys that the prompt expects in order to perform + its processing. It ensures that the specified keys are available for providing + input to the prompt. + + Returns: + List[str]: A list of input keys. + + Note: + This method is considered private and may not be intended for direct + external use. + """ + return [self.input_key] + + def _call( + self, + inputs: Dict[str, Any], + run_manager: Optional[CallbackManagerForChainRun] = None, + ) -> Dict[str, str]: + """ + Executes the moderation process on the input text and returns the processed + output. + + This internal method performs the moderation process on the input text. It + converts the input prompt value to plain text, applies the specified filters, + and then converts the filtered output back to a suitable prompt value object. + Additionally, it provides the option to log information about the run using + the provided `run_manager`. + + Args: + inputs: A dictionary containing input values + run_manager: A run manager to handle run-related events. Default is None + + Returns: + Dict[str, str]: A dictionary containing the processed output of the + moderation process. + + Raises: + ValueError: If there is an error during the moderation process + """ + + if run_manager: + run_manager.on_text("Running AmazonComprehendModerationChain...\n") + + moderation = BaseModeration( + client=self.client, + config=self.moderation_config, + moderation_callback=self.moderation_callback, + unique_id=self.unique_id, + run_manager=run_manager, + ) + response = moderation.moderate(prompt=inputs[self.input_keys[0]]) + + return {self.output_key: response} diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation.py b/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation.py new file mode 100644 index 000000000..c639112b9 --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation.py @@ -0,0 +1,176 @@ +import uuid +from typing import Any, Callable, Dict, Optional + +from langchain.callbacks.manager import CallbackManagerForChainRun +from langchain.prompts.base import StringPromptValue +from langchain.prompts.chat import ChatPromptValue +from langchain.schema import AIMessage, HumanMessage + +from langchain_experimental.comprehend_moderation.intent import ComprehendIntent +from langchain_experimental.comprehend_moderation.pii import ComprehendPII +from langchain_experimental.comprehend_moderation.toxicity import ComprehendToxicity + + +class BaseModeration: + def __init__( + self, + client: Any, + config: Optional[Dict[str, Any]] = None, + moderation_callback: Optional[Any] = None, + unique_id: Optional[str] = None, + run_manager: Optional[CallbackManagerForChainRun] = None, + ): + self.client = client + self.config = config + self.moderation_callback = moderation_callback + self.unique_id = unique_id + self.chat_message_index = 0 + self.run_manager = run_manager + self.chain_id = str(uuid.uuid4()) + + def _convert_prompt_to_text(self, prompt: Any) -> str: + input_text = str() + + if isinstance(prompt, StringPromptValue): + input_text = prompt.text + elif isinstance(prompt, str): + input_text = prompt + elif isinstance(prompt, ChatPromptValue): + """ + We will just check the last message in the message Chain of a + ChatPromptTemplate. The typical chronology is + SystemMessage > HumanMessage > AIMessage and so on. However assuming + that with every chat the chain is invoked we will only check the last + message. This is assuming that all previous messages have been checked + already. Only HumanMessage and AIMessage will be checked. We can perhaps + loop through and take advantage of the additional_kwargs property in the + HumanMessage and AIMessage schema to mark messages that have been moderated. + However that means that this class could generate multiple text chunks + and moderate() logics would need to be updated. This also means some + complexity in re-constructing the prompt while keeping the messages in + sequence. + """ + message = prompt.messages[-1] + self.chat_message_index = len(prompt.messages) - 1 + if isinstance(message, HumanMessage): + input_text = message.content + + if isinstance(message, AIMessage): + input_text = message.content + else: + raise ValueError( + f"Invalid input type {type(input)}. " + "Must be a PromptValue, str, or list of BaseMessages." + ) + return input_text + + def _convert_text_to_prompt(self, prompt: Any, text: str) -> Any: + if isinstance(prompt, StringPromptValue): + return StringPromptValue(text=text) + elif isinstance(prompt, str): + return text + elif isinstance(prompt, ChatPromptValue): + messages = prompt.messages + message = messages[self.chat_message_index] + + if isinstance(message, HumanMessage): + messages[self.chat_message_index] = HumanMessage( + content=text, + example=message.example, + additional_kwargs=message.additional_kwargs, + ) + if isinstance(message, AIMessage): + messages[self.chat_message_index] = AIMessage( + content=text, + example=message.example, + additional_kwargs=message.additional_kwargs, + ) + return ChatPromptValue(messages=messages) + else: + raise ValueError( + f"Invalid input type {type(input)}. " + "Must be a PromptValue, str, or list of BaseMessages." + ) + + def _moderation_class(self, moderation_class: Any) -> Callable: + return moderation_class( + client=self.client, + callback=self.moderation_callback, + unique_id=self.unique_id, + chain_id=self.chain_id, + ).validate + + def _log_message_for_verbose(self, message: str) -> None: + if self.run_manager: + self.run_manager.on_text(message) + + def moderate(self, prompt: Any) -> str: + from langchain_experimental.comprehend_moderation.base_moderation_exceptions import ( # noqa: E501 + ModerationIntentionError, + ModerationPiiError, + ModerationToxicityError, + ) + + try: + # convert prompt to text + input_text = self._convert_prompt_to_text(prompt=prompt) + output_text = str() + # perform moderation + if self.config is None: + # In absence of config Action will default to STOP only + self._log_message_for_verbose("Running pii validation...\n") + pii_validate = self._moderation_class(moderation_class=ComprehendPII) + output_text = pii_validate(prompt_value=input_text) + + self._log_message_for_verbose("Running toxicity validation...\n") + toxicity_validate = self._moderation_class( + moderation_class=ComprehendToxicity + ) + output_text = toxicity_validate(prompt_value=output_text) + + self._log_message_for_verbose("Running intent validation...\n") + intent_validate = self._moderation_class( + moderation_class=ComprehendIntent + ) + output_text = intent_validate(prompt_value=output_text) + else: + filter_functions = { + "pii": ComprehendPII, + "toxicity": ComprehendToxicity, + "intent": ComprehendIntent, + } + filters = self.config["filters"] + for _filter in filters: + filter_name = f"{_filter}" + if filter_name in filter_functions: + self._log_message_for_verbose( + f"Running {filter_name} Validation...\n" + ) + validation_fn = self._moderation_class( + moderation_class=filter_functions[filter_name] + ) + input_text = input_text if not output_text else output_text + output_text = validation_fn( + prompt_value=input_text, + config=self.config[filter_name] + if filter_name in self.config + else None, + ) + # convert text to prompt and return + return self._convert_text_to_prompt(prompt=prompt, text=output_text) + + except ModerationPiiError as e: + self._log_message_for_verbose(f"Found PII content..stopping..\n{str(e)}\n") + raise e + except ModerationToxicityError as e: + self._log_message_for_verbose( + f"Found Toxic content..stopping..\n{str(e)}\n" + ) + raise e + except ModerationIntentionError as e: + self._log_message_for_verbose( + f"Found Harmful intention..stopping..\n{str(e)}\n" + ) + raise e + except Exception as e: + raise e diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_callbacks.py b/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_callbacks.py new file mode 100644 index 000000000..d7fcd76a1 --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_callbacks.py @@ -0,0 +1,64 @@ +from typing import Any, Callable, Dict + + +class BaseModerationCallbackHandler: + def __init__(self) -> None: + if ( + self._is_method_unchanged( + BaseModerationCallbackHandler.on_after_pii, self.on_after_pii + ) + and self._is_method_unchanged( + BaseModerationCallbackHandler.on_after_toxicity, self.on_after_toxicity + ) + and self._is_method_unchanged( + BaseModerationCallbackHandler.on_after_intent, self.on_after_intent + ) + ): + raise NotImplementedError( + "Subclasses must override at least one of on_after_pii(), " + "on_after_toxicity(), or on_after_intent() functions." + ) + + def _is_method_unchanged( + self, base_method: Callable, derived_method: Callable + ) -> bool: + return base_method.__qualname__ == derived_method.__qualname__ + + async def on_after_pii( + self, moderation_beacon: Dict[str, Any], unique_id: str, **kwargs: Any + ) -> None: + """Run after PII validation is complete.""" + raise NotImplementedError("Subclasses should implement this async method.") + + async def on_after_toxicity( + self, moderation_beacon: Dict[str, Any], unique_id: str, **kwargs: Any + ) -> None: + """Run after Toxicity validation is complete.""" + raise NotImplementedError("Subclasses should implement this async method.") + + async def on_after_intent( + self, moderation_beacon: Dict[str, Any], unique_id: str, **kwargs: Any + ) -> None: + """Run after Toxicity validation is complete.""" + raise NotImplementedError("Subclasses should implement this async method.") + + @property + def pii_callback(self) -> bool: + return ( + self.on_after_pii.__func__ # type: ignore + is not BaseModerationCallbackHandler.on_after_pii + ) + + @property + def toxicity_callback(self) -> bool: + return ( + self.on_after_toxicity.__func__ # type: ignore + is not BaseModerationCallbackHandler.on_after_toxicity + ) + + @property + def intent_callback(self) -> bool: + return ( + self.on_after_intent.__func__ # type: ignore + is not BaseModerationCallbackHandler.on_after_intent + ) diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_enums.py b/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_enums.py new file mode 100644 index 000000000..aec629ebc --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_enums.py @@ -0,0 +1,12 @@ +from enum import Enum + + +class BaseModerationActions(Enum): + STOP = 1 + ALLOW = 2 + + +class BaseModerationFilters(str, Enum): + PII = "pii" + TOXICITY = "toxicity" + INTENT = "intent" diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_exceptions.py b/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_exceptions.py new file mode 100644 index 000000000..74b3971df --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/base_moderation_exceptions.py @@ -0,0 +1,43 @@ +class ModerationPiiError(Exception): + """Exception raised if PII entities are detected. + + Attributes: + message -- explanation of the error + """ + + def __init__( + self, message: str = "The prompt contains PII entities and cannot be processed" + ): + self.message = message + super().__init__(self.message) + + +class ModerationToxicityError(Exception): + """Exception raised if Toxic entities are detected. + + Attributes: + message -- explanation of the error + """ + + def __init__( + self, message: str = "The prompt contains toxic content and cannot be processed" + ): + self.message = message + super().__init__(self.message) + + +class ModerationIntentionError(Exception): + """Exception raised if Intention entities are detected. + + Attributes: + message -- explanation of the error + """ + + def __init__( + self, + message: str = ( + "The prompt indicates an un-desired intent and " "cannot be processed" + ), + ): + self.message = message + super().__init__(self.message) diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/intent.py b/libs/experimental/langchain_experimental/comprehend_moderation/intent.py new file mode 100644 index 000000000..761c07286 --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/intent.py @@ -0,0 +1,101 @@ +import asyncio +import warnings +from typing import Any, Dict, Optional + +from langchain_experimental.comprehend_moderation.base_moderation_exceptions import ( + ModerationIntentionError, +) + + +class ComprehendIntent: + def __init__( + self, + client: Any, + callback: Optional[Any] = None, + unique_id: Optional[str] = None, + chain_id: Optional[str] = None, + ) -> None: + self.client = client + self.moderation_beacon = { + "moderation_chain_id": chain_id, + "moderation_type": "Intent", + "moderation_status": "LABELS_NOT_FOUND", + } + self.callback = callback + self.unique_id = unique_id + + def _get_arn(self) -> str: + region_name = self.client.meta.region_name + service = "comprehend" + intent_endpoint = "document-classifier-endpoint/prompt-intent" + return f"arn:aws:{service}:{region_name}:aws:{intent_endpoint}" + + def validate( + self, prompt_value: str, config: Optional[Dict[str, Any]] = None + ) -> str: + """ + Check and validate the intent of the given prompt text. + + Args: + comprehend_client: Comprehend client for intent classification + prompt_value (str): The input text to be checked for unintended intent + config (Dict[str, Any]): Configuration settings for intent checks + + Raises: + ValueError: If unintended intent is found in the prompt text based + on the specified threshold. + + Returns: + str: The input prompt_value. + + Note: + This function checks the intent of the provided prompt text using + Comprehend's classify_document API and raises an error if unintended + intent is detected with a score above the specified threshold. + + """ + from langchain_experimental.comprehend_moderation.base_moderation_enums import ( + BaseModerationActions, + ) + + threshold = config.get("threshold", 0.5) if config else 0.5 + action = ( + config.get("action", BaseModerationActions.STOP) + if config + else BaseModerationActions.STOP + ) + intent_found = False + + if action == BaseModerationActions.ALLOW: + warnings.warn( + "You have allowed content with Harmful content." + "Defaulting to STOP action..." + ) + action = BaseModerationActions.STOP + + endpoint_arn = self._get_arn() + response = self.client.classify_document( + Text=prompt_value, EndpointArn=endpoint_arn + ) + + if self.callback and self.callback.intent_callback: + self.moderation_beacon["moderation_input"] = prompt_value + self.moderation_beacon["moderation_output"] = response + + for class_result in response["Classes"]: + if ( + class_result["Score"] >= threshold + and class_result["Name"] == "UNDESIRED_PROMPT" + ): + intent_found = True + break + + if self.callback and self.callback.intent_callback: + if intent_found: + self.moderation_beacon["moderation_status"] = "LABELS_FOUND" + asyncio.create_task( + self.callback.on_after_intent(self.moderation_beacon, self.unique_id) + ) + if intent_found: + raise ModerationIntentionError + return prompt_value diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/pii.py b/libs/experimental/langchain_experimental/comprehend_moderation/pii.py new file mode 100644 index 000000000..2c82b7a40 --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/pii.py @@ -0,0 +1,173 @@ +import asyncio +from typing import Any, Dict, Optional + +from langchain_experimental.comprehend_moderation.base_moderation_exceptions import ( + ModerationPiiError, +) + + +class ComprehendPII: + def __init__( + self, + client: Any, + callback: Optional[Any] = None, + unique_id: Optional[str] = None, + chain_id: Optional[str] = None, + ) -> None: + self.client = client + self.moderation_beacon = { + "moderation_chain_id": chain_id, + "moderation_type": "PII", + "moderation_status": "LABELS_NOT_FOUND", + } + self.callback = callback + self.unique_id = unique_id + + def validate( + self, prompt_value: str, config: Optional[Dict[str, Any]] = None + ) -> str: + from langchain_experimental.comprehend_moderation.base_moderation_enums import ( + BaseModerationActions, + ) + + if config: + action = config.get("action", BaseModerationActions.STOP) + if action not in [BaseModerationActions.STOP, BaseModerationActions.ALLOW]: + raise ValueError("Action can either be stop or allow") + + return ( + self._contains_pii(prompt_value=prompt_value, config=config) + if action == BaseModerationActions.STOP + else self._detect_pii(prompt_value=prompt_value, config=config) + ) + else: + return self._contains_pii(prompt_value=prompt_value) + + def _contains_pii( + self, prompt_value: str, config: Optional[Dict[str, Any]] = None + ) -> str: + """ + Checks for Personally Identifiable Information (PII) labels above a + specified threshold. + + Args: + prompt_value (str): The input text to be checked for PII labels. + config (Dict[str, Any]): Configuration for PII check and actions. + + Returns: + str: the original prompt + + Note: + - The provided client should be initialized with valid AWS credentials. + """ + pii_identified = self.client.contains_pii_entities( + Text=prompt_value, LanguageCode="en" + ) + + if self.callback and self.callback.pii_callback: + self.moderation_beacon["moderation_input"] = prompt_value + self.moderation_beacon["moderation_output"] = pii_identified + + threshold = config.get("threshold", 0.5) if config else 0.5 + pii_labels = config.get("labels", []) if config else [] + pii_found = False + for entity in pii_identified["Labels"]: + if (entity["Score"] >= threshold and entity["Name"] in pii_labels) or ( + entity["Score"] >= threshold and not pii_labels + ): + pii_found = True + break + + if self.callback and self.callback.pii_callback: + if pii_found: + self.moderation_beacon["moderation_status"] = "LABELS_FOUND" + asyncio.create_task( + self.callback.on_after_pii(self.moderation_beacon, self.unique_id) + ) + if pii_found: + raise ModerationPiiError + return prompt_value + + def _detect_pii(self, prompt_value: str, config: Optional[Dict[str, Any]]) -> str: + """ + Detects and handles Personally Identifiable Information (PII) entities in the + given prompt text using Amazon Comprehend's detect_pii_entities API. The + function provides options to redact or stop processing based on the identified + PII entities and a provided configuration. + + Args: + prompt_value (str): The input text to be checked for PII entities. + config (Dict[str, Any]): A configuration specifying how to handle + PII entities. + + Returns: + str: The processed prompt text with redacted PII entities or raised + exceptions. + + Raises: + ValueError: If the prompt contains configured PII entities for + stopping processing. + + Note: + - If PII is not found in the prompt, the original prompt is returned. + - The client should be initialized with valid AWS credentials. + """ + pii_identified = self.client.detect_pii_entities( + Text=prompt_value, LanguageCode="en" + ) + + if self.callback and self.callback.pii_callback: + self.moderation_beacon["moderation_input"] = prompt_value + self.moderation_beacon["moderation_output"] = pii_identified + + if (pii_identified["Entities"]) == []: + if self.callback and self.callback.pii_callback: + asyncio.create_task( + self.callback.on_after_pii(self.moderation_beacon, self.unique_id) + ) + return prompt_value + + pii_found = False + if not config and pii_identified["Entities"]: + for entity in pii_identified["Entities"]: + if entity["Score"] >= 0.5: + pii_found = True + break + + if self.callback and self.callback.pii_callback: + if pii_found: + self.moderation_beacon["moderation_status"] = "LABELS_FOUND" + asyncio.create_task( + self.callback.on_after_pii(self.moderation_beacon, self.unique_id) + ) + if pii_found: + raise ModerationPiiError + else: + threshold = config.get("threshold", 0.5) # type: ignore + pii_labels = config.get("labels", []) # type: ignore + mask_marker = config.get("mask_character", "*") # type: ignore + pii_found = False + + for entity in pii_identified["Entities"]: + if ( + pii_labels + and entity["Type"] in pii_labels + and entity["Score"] >= threshold + ) or (not pii_labels and entity["Score"] >= threshold): + pii_found = True + char_offset_begin = entity["BeginOffset"] + char_offset_end = entity["EndOffset"] + prompt_value = ( + prompt_value[:char_offset_begin] + + mask_marker * (char_offset_end - char_offset_begin) + + prompt_value[char_offset_end:] + ) + + if self.callback and self.callback.pii_callback: + if pii_found: + self.moderation_beacon["moderation_status"] = "LABELS_FOUND" + asyncio.create_task( + self.callback.on_after_pii(self.moderation_beacon, self.unique_id) + ) + + return prompt_value diff --git a/libs/experimental/langchain_experimental/comprehend_moderation/toxicity.py b/libs/experimental/langchain_experimental/comprehend_moderation/toxicity.py new file mode 100644 index 000000000..b66320ec5 --- /dev/null +++ b/libs/experimental/langchain_experimental/comprehend_moderation/toxicity.py @@ -0,0 +1,209 @@ +import asyncio +import importlib +import warnings +from typing import Any, Dict, List, Optional + +from langchain_experimental.comprehend_moderation.base_moderation_exceptions import ( + ModerationToxicityError, +) + + +class ComprehendToxicity: + def __init__( + self, + client: Any, + callback: Optional[Any] = None, + unique_id: Optional[str] = None, + chain_id: Optional[str] = None, + ) -> None: + self.client = client + self.moderation_beacon = { + "moderation_chain_id": chain_id, + "moderation_type": "Toxicity", + "moderation_status": "LABELS_NOT_FOUND", + } + self.callback = callback + self.unique_id = unique_id + + def _toxicity_init_validate(self, max_size: int) -> Any: + """ + Validate and initialize toxicity processing configuration. + + Args: + max_size (int): Maximum sentence size defined in the configuration object. + + Raises: + Exception: If the maximum sentence size exceeds the 5KB limit. + + Note: + This function ensures that the NLTK punkt tokenizer is downloaded if not + already present. + + Returns: + None + """ + if max_size > 1024 * 5: + raise Exception("The sentence length should not exceed 5KB.") + try: + nltk = importlib.import_module("nltk") + nltk.data.find("tokenizers/punkt") + return nltk + except ImportError: + raise ModuleNotFoundError( + "Could not import nltk python package. " + "Please install it with `pip install nltk`." + ) + except LookupError: + nltk.download("punkt") + + def _split_paragraph( + self, prompt_value: str, max_size: int = 1024 * 4 + ) -> List[List[str]]: + """ + Split a paragraph into chunks of sentences, respecting the maximum size limit. + + Args: + paragraph (str): The input paragraph to be split into chunks + max_size (int, optional): The maximum size limit in bytes for each chunk + Defaults to 1024. + + Returns: + List[List[str]]: A list of chunks, where each chunk is a list of sentences + + Note: + This function validates the maximum sentence size based on service limits + using the 'toxicity_init_validate' function. It uses the NLTK sentence + tokenizer to split the paragraph into sentences. + + """ + + # validate max. sentence size based on Service limits + nltk = self._toxicity_init_validate(max_size) + + sentences = nltk.sent_tokenize(prompt_value) + + chunks = [] + current_chunk = [] # type: ignore + current_size = 0 + + for sentence in sentences: + sentence_size = len(sentence.encode("utf-8")) + + # If adding a new sentence exceeds max_size or + # current_chunk has 10 sentences, start a new chunk + if (current_size + sentence_size > max_size) or (len(current_chunk) >= 10): + if current_chunk: # Avoid appending empty chunks + chunks.append(current_chunk) + current_chunk = [] + current_size = 0 + + current_chunk.append(sentence) + current_size += sentence_size + + # Add any remaining sentences + if current_chunk: + chunks.append(current_chunk) + + return chunks + + def validate( + self, prompt_value: str, config: Optional[Dict[str, Any]] = None + ) -> str: + """ + Check the toxicity of a given text prompt using AWS Comprehend service + and apply actions based on configuration. + + Args: + prompt_value (str): The text content to be checked for toxicity. + config (Dict[str, Any]): Configuration for toxicity checks and actions. + + Returns: + str: The original prompt_value if allowed or no toxicity found. + + Raises: + ValueError: If the prompt contains toxic labels and cannot be + processed based on the configuration. + """ + + chunks = self._split_paragraph(prompt_value=prompt_value) + for sentence_list in chunks: + segments = [{"Text": sentence} for sentence in sentence_list] + response = self.client.detect_toxic_content( + TextSegments=segments, LanguageCode="en" + ) + if self.callback and self.callback.toxicity_callback: + self.moderation_beacon["moderation_input"] = segments # type: ignore + self.moderation_beacon["moderation_output"] = response + + if config: + from langchain_experimental.comprehend_moderation.base_moderation_enums import ( # noqa: E501 + BaseModerationActions, + ) + + toxicity_found = False + action = config.get("action", BaseModerationActions.STOP) + if action not in [ + BaseModerationActions.STOP, + BaseModerationActions.ALLOW, + ]: + raise ValueError("Action can either be stop or allow") + + threshold = config.get("threshold", 0.5) if config else 0.5 + toxicity_labels = config.get("labels", []) if config else [] + + if action == BaseModerationActions.STOP: + for item in response["ResultList"]: + for label in item["Labels"]: + if ( + label + and ( + not toxicity_labels + or label["Name"] in toxicity_labels + ) + and label["Score"] >= threshold + ): + toxicity_found = True + break + + if action == BaseModerationActions.ALLOW: + if not toxicity_labels: + warnings.warn( + "You have allowed toxic content without specifying " + "any toxicity labels." + ) + else: + for item in response["ResultList"]: + for label in item["Labels"]: + if ( + label["Name"] in toxicity_labels + and label["Score"] >= threshold + ): + toxicity_found = True + break + + if self.callback and self.callback.toxicity_callback: + if toxicity_found: + self.moderation_beacon["moderation_status"] = "LABELS_FOUND" + asyncio.create_task( + self.callback.on_after_toxicity( + self.moderation_beacon, self.unique_id + ) + ) + if toxicity_found: + raise ModerationToxicityError + else: + if response["ResultList"]: + detected_toxic_labels = list() + for item in response["ResultList"]: + detected_toxic_labels.extend(item["Labels"]) + if any(item["Score"] >= 0.5 for item in detected_toxic_labels): + if self.callback and self.callback.toxicity_callback: + self.moderation_beacon["moderation_status"] = "LABELS_FOUND" + asyncio.create_task( + self.callback.on_after_toxicity( + self.moderation_beacon, self.unique_id + ) + ) + raise ModerationToxicityError + + return prompt_value diff --git a/libs/experimental/langchain_experimental/cpal/base.py b/libs/experimental/langchain_experimental/cpal/base.py index 498bb7b06..bba59d5d3 100644 --- a/libs/experimental/langchain_experimental/cpal/base.py +++ b/libs/experimental/langchain_experimental/cpal/base.py @@ -6,7 +6,6 @@ from __future__ import annotations import json from typing import Any, ClassVar, Dict, List, Optional, Type -import pydantic from langchain.base_language import BaseLanguageModel from langchain.callbacks.manager import CallbackManagerForChainRun from langchain.chains.base import Chain @@ -14,6 +13,7 @@ from langchain.chains.llm import LLMChain from langchain.output_parsers import PydanticOutputParser from langchain.prompts.prompt import PromptTemplate +from langchain_experimental import pydantic_v1 as pydantic from langchain_experimental.cpal.constants import Constant from langchain_experimental.cpal.models import ( CausalModel, diff --git a/libs/experimental/langchain_experimental/pydantic_v1/__init__.py b/libs/experimental/langchain_experimental/pydantic_v1/__init__.py index 859822531..826f1c500 100644 --- a/libs/experimental/langchain_experimental/pydantic_v1/__init__.py +++ b/libs/experimental/langchain_experimental/pydantic_v1/__init__.py @@ -1,3 +1,4 @@ +import typing from importlib import metadata ## Create namespaces for pydantic v1 and v2. @@ -11,11 +12,19 @@ from importlib import metadata # unambiguously uses either v1 or v2 API. # * This change is easier to roll out and roll back. -try: - from pydantic.v1 import * # noqa: F403 -except ImportError: +# It's currently impossible to support mypy for both pydantic v1 and v2 at once: +# https://github.com/pydantic/pydantic/issues/6022 +# +# In the lint environment, pydantic is currently v1. +# When we upgrade it to pydantic v2, we'll need +# to replace this with `from pydantic.v1 import *`. +if typing.TYPE_CHECKING: from pydantic import * # noqa: F403 - +else: + try: + from pydantic.v1 import * # noqa: F403 + except ImportError: + from pydantic import * # noqa: F403 try: _PYDANTIC_MAJOR_VERSION: int = int(metadata.version("pydantic").split(".")[0]) diff --git a/libs/experimental/langchain_experimental/pydantic_v1/dataclasses.py b/libs/experimental/langchain_experimental/pydantic_v1/dataclasses.py index bb7253c29..25a7810a0 100644 --- a/libs/experimental/langchain_experimental/pydantic_v1/dataclasses.py +++ b/libs/experimental/langchain_experimental/pydantic_v1/dataclasses.py @@ -1,4 +1,15 @@ -try: - from pydantic.v1.dataclasses import * # noqa: F403 -except ImportError: +import typing + +# It's currently impossible to support mypy for both pydantic v1 and v2 at once: +# https://github.com/pydantic/pydantic/issues/6022 +# +# In the lint environment, pydantic is currently v1. +# When we upgrade it to pydantic v2, we'll need to +# replace this with `from pydantic.v1.dataclasses import *`. +if typing.TYPE_CHECKING: from pydantic.dataclasses import * # noqa: F403 +else: + try: + from pydantic.v1.dataclasses import * # noqa: F403 + except ImportError: + from pydantic.dataclasses import * # noqa: F403 diff --git a/libs/experimental/langchain_experimental/pydantic_v1/main.py b/libs/experimental/langchain_experimental/pydantic_v1/main.py index 4b8f1670e..2fa4c9958 100644 --- a/libs/experimental/langchain_experimental/pydantic_v1/main.py +++ b/libs/experimental/langchain_experimental/pydantic_v1/main.py @@ -1,4 +1,15 @@ -try: - from pydantic.v1.main import * # noqa: F403 -except ImportError: +import typing + +# It's currently impossible to support mypy for both pydantic v1 and v2 at once: +# https://github.com/pydantic/pydantic/issues/6022 +# +# In the lint environment, pydantic is currently v1. +# When we upgrade it to pydantic v2, we'll need +# to replace this with `from pydantic.v1.main import *`. +if typing.TYPE_CHECKING: from pydantic.main import * # noqa: F403 +else: + try: + from pydantic.v1.main import * # noqa: F403 + except ImportError: + from pydantic.main import * # noqa: F403 diff --git a/libs/experimental/poetry.lock b/libs/experimental/poetry.lock index 91191a459..71b7d1b94 100644 --- a/libs/experimental/poetry.lock +++ b/libs/experimental/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiohttp" version = "3.8.5" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -113,7 +112,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -128,7 +126,6 @@ frozenlist = ">=1.1.0" name = "anyio" version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -150,7 +147,6 @@ trio = ["trio (<0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "dev" optional = false python-versions = "*" files = [ @@ -160,29 +156,28 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -category = "dev" +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] argon2-cffi-bindings = "*" [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -220,7 +215,6 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -235,7 +229,6 @@ python-dateutil = ">=2.7.0" name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" -category = "dev" optional = false python-versions = "*" files = [ @@ -251,14 +244,13 @@ test = ["astroid", "pytest"] [[package]] name = "async-lru" -version = "2.0.3" +version = "2.0.4" description = "Simple LRU cache for asyncio" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "async-lru-2.0.3.tar.gz", hash = "sha256:b714c9d1415fca4e264da72a9e2abc66880ce7430e03a973341f88ea4c0d4869"}, - {file = "async_lru-2.0.3-py3-none-any.whl", hash = "sha256:00c0a8899c20b9c88663a47732689ff98189c9fa08ad9f734d7722f934d250b1"}, + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, ] [package.dependencies] @@ -266,21 +258,19 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "async-timeout" -version = "4.0.2" +version = "4.0.3" description = "Timeout context manager for asyncio programs" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] [[package]] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -299,7 +289,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -314,7 +303,6 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "dev" optional = false python-versions = "*" files = [ @@ -326,7 +314,6 @@ files = [ name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -345,7 +332,6 @@ lxml = ["lxml"] name = "black" version = "23.7.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -392,7 +378,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -409,21 +394,19 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "dev" optional = false python-versions = "*" files = [ @@ -500,7 +483,6 @@ pycparser = "*" name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -583,14 +565,13 @@ files = [ [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -600,7 +581,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -610,18 +590,17 @@ files = [ [[package]] name = "comm" -version = "0.1.3" +version = "0.1.4" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"}, - {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"}, + {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, + {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, ] [package.dependencies] -traitlets = ">=5.3" +traitlets = ">=4" [package.extras] lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] @@ -632,7 +611,6 @@ typing = ["mypy (>=0.990)"] name = "dataclasses-json" version = "0.5.9" description = "Easily serialize dataclasses to and from JSON" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -650,37 +628,35 @@ dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest ( [[package]] name = "debugpy" -version = "1.6.7" +version = "1.6.7.post1" description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, + {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, + {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, ] [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -692,7 +668,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -702,14 +677,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] @@ -719,7 +693,6 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false python-versions = "*" files = [ @@ -732,14 +705,13 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] [[package]] name = "fastjsonschema" -version = "2.17.1" +version = "2.18.0" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, ] [package.extras] @@ -749,7 +721,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -761,7 +732,6 @@ files = [ name = "frozenlist" version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -832,7 +802,6 @@ files = [ name = "greenlet" version = "2.0.2" description = "Lightweight in-process concurrent programming" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" files = [ @@ -906,7 +875,6 @@ test = ["objgraph", "psutil"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -918,7 +886,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -936,14 +903,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.0" +version = "6.0.1" description = "Read resources from Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.0-py3-none-any.whl", hash = "sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185"}, - {file = "importlib_resources-6.0.0.tar.gz", hash = "sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2"}, + {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, + {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, ] [package.dependencies] @@ -957,7 +923,6 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -967,14 +932,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.24.0" +version = "6.25.1" description = "IPython Kernel for Jupyter" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.24.0-py3-none-any.whl", hash = "sha256:2f5fffc7ad8f1fd5aadb4e171ba9129d9668dbafa374732cf9511ada52d6547f"}, - {file = "ipykernel-6.24.0.tar.gz", hash = "sha256:29cea0a716b1176d002a61d0b0c851f34536495bc4ef7dd0222c88b41b816123"}, + {file = "ipykernel-6.25.1-py3-none-any.whl", hash = "sha256:c8a2430b357073b37c76c21c52184db42f6b4b0e438e1eb7df3c4440d120497c"}, + {file = "ipykernel-6.25.1.tar.gz", hash = "sha256:050391364c0977e768e354bdb60cbbfbee7cbb943b1af1618382021136ffd42f"}, ] [package.dependencies] @@ -983,7 +947,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -1003,7 +967,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" name = "ipython" version = "8.12.2" description = "IPython: Productive Interactive Computing" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1043,7 +1006,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" -category = "dev" optional = false python-versions = "*" files = [ @@ -1053,18 +1015,17 @@ files = [ [[package]] name = "ipywidgets" -version = "8.0.7" +version = "8.1.0" description = "Jupyter interactive widgets" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "ipywidgets-8.0.7-py3-none-any.whl", hash = "sha256:e0aed0c95a1e55b6a123f64305245578bdc09e52965a34941c2b6a578b8c64a0"}, - {file = "ipywidgets-8.0.7.tar.gz", hash = "sha256:50ace0a8886e9a0d68b980db82f94c25d55d21ff2340ed36f802dd9365e94acf"}, + {file = "ipywidgets-8.1.0-py3-none-any.whl", hash = "sha256:6c8396cc7b8c95dfb4e9ab0054f48c002f045e7e5d7ae523f559d64e525a98ab"}, + {file = "ipywidgets-8.1.0.tar.gz", hash = "sha256:ce97dd90525b3066fd00094690964e7eac14cf9b7745d35565b5eeac20cce687"}, ] [package.dependencies] -ipykernel = ">=4.5.1" +comm = ">=0.1.3" ipython = ">=6.1.0" jupyterlab-widgets = ">=3.0.7,<3.1.0" traitlets = ">=4.3.1" @@ -1077,7 +1038,6 @@ test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1090,29 +1050,27 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1130,7 +1088,6 @@ i18n = ["Babel (>=2.7)"] name = "json5" version = "0.9.14" description = "A Python implementation of the JSON5 data format." -category = "dev" optional = false python-versions = "*" files = [ @@ -1145,23 +1102,22 @@ dev = ["hypothesis"] name = "jsonpointer" version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" -version = "4.18.4" +version = "4.19.0" description = "An implementation of JSON Schema validation for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.18.4-py3-none-any.whl", hash = "sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe"}, - {file = "jsonschema-4.18.4.tar.gz", hash = "sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d"}, + {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, + {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, ] [package.dependencies] @@ -1188,7 +1144,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.7.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1204,7 +1159,6 @@ referencing = ">=0.28.0" name = "jupyter" version = "1.0.0" description = "Jupyter metapackage. Install all the Jupyter components in one go." -category = "dev" optional = false python-versions = "*" files = [ @@ -1225,7 +1179,6 @@ qtconsole = "*" name = "jupyter-client" version = "8.3.0" description = "Jupyter protocol implementation and client libraries" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1235,7 +1188,7 @@ files = [ [package.dependencies] importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" @@ -1249,7 +1202,6 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt name = "jupyter-console" version = "6.6.3" description = "Jupyter terminal console" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1261,7 +1213,7 @@ files = [ ipykernel = ">=6.14" ipython = "*" jupyter-client = ">=7.0.0" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" prompt-toolkit = ">=3.0.30" pygments = "*" pyzmq = ">=17" @@ -1274,7 +1226,6 @@ test = ["flaky", "pexpect", "pytest"] name = "jupyter-core" version = "5.3.1" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1293,20 +1244,20 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.6.3" +version = "0.7.0" description = "Jupyter Event System library" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, - {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, + {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"}, + {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"}, ] [package.dependencies] -jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} python-json-logger = ">=2.0.4" pyyaml = ">=5.3" +referencing = "*" rfc3339-validator = "*" rfc3986-validator = ">=0.1.1" traitlets = ">=5.3" @@ -1314,13 +1265,12 @@ traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] [[package]] name = "jupyter-lsp" version = "2.2.0" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1334,14 +1284,13 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.7.0" +version = "2.7.2" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, - {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, + {file = "jupyter_server-2.7.2-py3-none-any.whl", hash = "sha256:98a375347b580e837e7016007c24680a4261ed8ad7cd35196ac087d229f48e5a"}, + {file = "jupyter_server-2.7.2.tar.gz", hash = "sha256:d64fb4e593907290e5df916e3c9399c15ab2cd7bdb71cbcd1d36452dbfb30523"}, ] [package.dependencies] @@ -1349,7 +1298,7 @@ anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" jupyter-events = ">=0.6.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" @@ -1359,7 +1308,7 @@ packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} pyzmq = ">=24" -send2trash = "*" +send2trash = ">=1.8.2" terminado = ">=0.8.3" tornado = ">=6.2.0" traitlets = ">=5.6.0" @@ -1373,7 +1322,6 @@ test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-sc name = "jupyter-server-terminals" version = "0.4.4" description = "A Jupyter Server Extension Providing Terminals." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1391,14 +1339,13 @@ test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", [[package]] name = "jupyterlab" -version = "4.0.3" +version = "4.0.5" description = "JupyterLab computational environment" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.0.3-py3-none-any.whl", hash = "sha256:d369944391b1d15f2d1f3cb965fb67352956279b2ae6f03ce7947a43940a8301"}, - {file = "jupyterlab-4.0.3.tar.gz", hash = "sha256:e14d1ce46a613028111d0d476a1d7d6b094003b7462bac669f5b478317abcb39"}, + {file = "jupyterlab-4.0.5-py3-none-any.whl", hash = "sha256:13b3a326e7b95d72746fe20dbe80ee1e71165d6905e01ceaf1320eb809cb1b47"}, + {file = "jupyterlab-4.0.5.tar.gz", hash = "sha256:de49deb75f9b9aec478ed04754cbefe9c5d22fd796a5783cdc65e212983d3611"}, ] [package.dependencies] @@ -1427,7 +1374,6 @@ test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-cons name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1437,14 +1383,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.23.0" +version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, - {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, ] [package.dependencies] @@ -1460,13 +1405,12 @@ requests = ">=2.28" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "jupyterlab-widgets" version = "3.0.8" description = "Jupyter interactive widgets for JupyterLab" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1478,7 +1422,6 @@ files = [ name = "langchain" version = "0.0.239" description = "Building applications with LLMs through composability" -category = "main" optional = false python-versions = ">=3.8.1,<4.0" files = [ @@ -1516,25 +1459,23 @@ text-helpers = ["chardet (>=5.1.0,<6.0.0)"] [[package]] name = "langsmith" -version = "0.0.12" +version = "0.0.25" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." -category = "main" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langsmith-0.0.12-py3-none-any.whl", hash = "sha256:d7a4360d1984b57689c6470ffcef79dcb217dd7129bdfd3bcfcb22dc058787f6"}, - {file = "langsmith-0.0.12.tar.gz", hash = "sha256:5abf30ac4ebb6b68955bea617669585e80a6fe9def90664503d5fbd6d095e91e"}, + {file = "langsmith-0.0.25-py3-none-any.whl", hash = "sha256:d595435ad21fa6077550d7c85472935d1e8241afa042c1e29287d2c95c3ed151"}, + {file = "langsmith-0.0.25.tar.gz", hash = "sha256:e728c398fc1adaa0ed8abeb21f6a92d7fb19fe3ab49d3911c22b03dfe25935d6"}, ] [package.dependencies] -pydantic = ">=1,<2" +pydantic = ">=1,<3" requests = ">=2,<3" [[package]] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1594,7 +1535,6 @@ files = [ name = "marshmallow" version = "3.20.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1615,7 +1555,6 @@ tests = ["pytest", "pytz", "simplejson"] name = "marshmallow-enum" version = "1.5.1" description = "Enum field for Marshmallow" -category = "main" optional = false python-versions = "*" files = [ @@ -1630,7 +1569,6 @@ marshmallow = ">=2.0.0" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1645,7 +1583,6 @@ traitlets = "*" name = "mistune" version = "3.0.1" description = "A sane and fast Markdown parser with useful plugins and renderers" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1657,7 +1594,6 @@ files = [ name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1741,7 +1677,6 @@ files = [ name = "mypy" version = "0.991" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1792,7 +1727,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1804,7 +1738,6 @@ files = [ name = "nbclient" version = "0.8.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -1814,7 +1747,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" traitlets = ">=5.4" @@ -1825,14 +1758,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.7.2" +version = "7.7.4" description = "Converting Jupyter Notebooks" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.7.2-py3-none-any.whl", hash = "sha256:25e0cf2b663ee0cd5a90afb6b2f2940bf1abe5cc5bc995b88c8156ca65fa7ede"}, - {file = "nbconvert-7.7.2.tar.gz", hash = "sha256:36d3e7bf32f0c075878176cdeeb645931c994cbed5b747bc7a570ba8cd2321f3"}, + {file = "nbconvert-7.7.4-py3-none-any.whl", hash = "sha256:ace26f4386d08eb5c55833596a942048c5502a95e05590cb523826a749a40a37"}, + {file = "nbconvert-7.7.4.tar.gz", hash = "sha256:1113d039fa3fc3a846ffa5a3b0a019e85aaa94c566a09fa0c400fb7638e46087"}, ] [package.dependencies] @@ -1864,14 +1796,13 @@ webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.1" +version = "5.9.2" description = "The Jupyter Notebook format" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.1-py3-none-any.whl", hash = "sha256:b7968ebf4811178a4108ee837eae1442e3f054132100f0359219e9ed1ce3ca45"}, - {file = "nbformat-5.9.1.tar.gz", hash = "sha256:3a7f52d040639cbd8a3890218c8b0ffb93211588c57446c90095e32ba5881b5d"}, + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, ] [package.dependencies] @@ -1886,26 +1817,24 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.5.7" description = "Patch asyncio to allow nested event loops" -category = "dev" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, + {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, + {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, ] [[package]] name = "notebook" -version = "7.0.0" +version = "7.0.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "notebook-7.0.0-py3-none-any.whl", hash = "sha256:71b4e695e658763a2766613176491854708fb46fbe7664bf5e494deeeab92d60"}, - {file = "notebook-7.0.0.tar.gz", hash = "sha256:38b55e6939df0ba73b53212c3b234e41102f1789e0158606cedaebf00abef6c8"}, + {file = "notebook-7.0.2-py3-none-any.whl", hash = "sha256:c77b1499dc9b07ce4f4f26990dcb25b2107b434f2536766b51a72a4228d9a4b6"}, + {file = "notebook-7.0.2.tar.gz", hash = "sha256:d70d6a07418c829bd5f54337ce993b7105261d9026f9d3fe68e9b8aa1a20da9a"}, ] [package.dependencies] @@ -1925,7 +1854,6 @@ test = ["ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[tes name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1941,42 +1869,41 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numexpr" -version = "2.8.4" +version = "2.8.5" description = "Fast numerical expression evaluator for NumPy" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "numexpr-2.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a75967d46b6bd56455dd32da6285e5ffabe155d0ee61eef685bbfb8dafb2e484"}, - {file = "numexpr-2.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db93cf1842f068247de631bfc8af20118bf1f9447cd929b531595a5e0efc9346"}, - {file = "numexpr-2.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bca95f4473b444428061d4cda8e59ac564dc7dc6a1dea3015af9805c6bc2946"}, - {file = "numexpr-2.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e34931089a6bafc77aaae21f37ad6594b98aa1085bb8b45d5b3cd038c3c17d9"}, - {file = "numexpr-2.8.4-cp310-cp310-win32.whl", hash = "sha256:f3a920bfac2645017110b87ddbe364c9c7a742870a4d2f6120b8786c25dc6db3"}, - {file = "numexpr-2.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:6931b1e9d4f629f43c14b21d44f3f77997298bea43790cfcdb4dd98804f90783"}, - {file = "numexpr-2.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9400781553541f414f82eac056f2b4c965373650df9694286b9bd7e8d413f8d8"}, - {file = "numexpr-2.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ee9db7598dd4001138b482342b96d78110dd77cefc051ec75af3295604dde6a"}, - {file = "numexpr-2.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff5835e8af9a212e8480003d731aad1727aaea909926fd009e8ae6a1cba7f141"}, - {file = "numexpr-2.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:655d84eb09adfee3c09ecf4a89a512225da153fdb7de13c447404b7d0523a9a7"}, - {file = "numexpr-2.8.4-cp311-cp311-win32.whl", hash = "sha256:5538b30199bfc68886d2be18fcef3abd11d9271767a7a69ff3688defe782800a"}, - {file = "numexpr-2.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:3f039321d1c17962c33079987b675fb251b273dbec0f51aac0934e932446ccc3"}, - {file = "numexpr-2.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c867cc36cf815a3ec9122029874e00d8fbcef65035c4a5901e9b120dd5d626a2"}, - {file = "numexpr-2.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:059546e8f6283ccdb47c683101a890844f667fa6d56258d48ae2ecf1b3875957"}, - {file = "numexpr-2.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:845a6aa0ed3e2a53239b89c1ebfa8cf052d3cc6e053c72805e8153300078c0b1"}, - {file = "numexpr-2.8.4-cp37-cp37m-win32.whl", hash = "sha256:a38664e699526cb1687aefd9069e2b5b9387da7feac4545de446141f1ef86f46"}, - {file = "numexpr-2.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:eaec59e9bf70ff05615c34a8b8d6c7bd042bd9f55465d7b495ea5436f45319d0"}, - {file = "numexpr-2.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b318541bf3d8326682ebada087ba0050549a16d8b3fa260dd2585d73a83d20a7"}, - {file = "numexpr-2.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b076db98ca65eeaf9bd224576e3ac84c05e451c0bd85b13664b7e5f7b62e2c70"}, - {file = "numexpr-2.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f12cc851240f7911a47c91aaf223dba753e98e46dff3017282e633602e76a7"}, - {file = "numexpr-2.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c368aa35ae9b18840e78b05f929d3a7b3abccdba9630a878c7db74ca2368339"}, - {file = "numexpr-2.8.4-cp38-cp38-win32.whl", hash = "sha256:b96334fc1748e9ec4f93d5fadb1044089d73fb08208fdb8382ed77c893f0be01"}, - {file = "numexpr-2.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:a6d2d7740ae83ba5f3531e83afc4b626daa71df1ef903970947903345c37bd03"}, - {file = "numexpr-2.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:77898fdf3da6bb96aa8a4759a8231d763a75d848b2f2e5c5279dad0b243c8dfe"}, - {file = "numexpr-2.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df35324666b693f13a016bc7957de7cc4d8801b746b81060b671bf78a52b9037"}, - {file = "numexpr-2.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ac9cfe6d0078c5fc06ba1c1bbd20b8783f28c6f475bbabd3cad53683075cab"}, - {file = "numexpr-2.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df3a1f6b24214a1ab826e9c1c99edf1686c8e307547a9aef33910d586f626d01"}, - {file = "numexpr-2.8.4-cp39-cp39-win32.whl", hash = "sha256:7d71add384adc9119568d7e9ffa8a35b195decae81e0abf54a2b7779852f0637"}, - {file = "numexpr-2.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:9f096d707290a6a00b6ffdaf581ee37331109fb7b6c8744e9ded7c779a48e517"}, - {file = "numexpr-2.8.4.tar.gz", hash = "sha256:d5432537418d18691b9115d615d6daa17ee8275baef3edf1afbbf8bc69806147"}, + {file = "numexpr-2.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51f3ab160c3847ebcca93cd88f935a7802b54a01ab63fe93152994a64d7a6cf2"}, + {file = "numexpr-2.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:de29c77f674e4eb8f0846525a475cab64008c227c8bc4ba5153ab3f72441cc63"}, + {file = "numexpr-2.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf85ba1327eb87ec82ae7936f13c8850fb969a0ca34f3ba9fa3897c09d5c80d7"}, + {file = "numexpr-2.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c00be69f747f44a631830215cab482f0f77f75af2925695adff57c1cc0f9a68"}, + {file = "numexpr-2.8.5-cp310-cp310-win32.whl", hash = "sha256:c46350dcdb93e32f033eea5a21269514ffcaf501d9abd6036992d37e48a308b0"}, + {file = "numexpr-2.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:894b027438b8ec88dea32a19193716c79f4ff8ddb92302dcc9731b51ba3565a8"}, + {file = "numexpr-2.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6df184d40d4cf9f21c71f429962f39332f7398147762588c9f3a5c77065d0c06"}, + {file = "numexpr-2.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:178b85ad373c6903e55d75787d61b92380439b70d94b001cb055a501b0821335"}, + {file = "numexpr-2.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:578fe4008e4d5d6ff01bbeb2d7b7ba1ec658a5cda9c720cd26a9a8325f8ef438"}, + {file = "numexpr-2.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef621b4ee366a5c6a484f6678c9259f5b826569f8bfa0b89ba2306d5055468bb"}, + {file = "numexpr-2.8.5-cp311-cp311-win32.whl", hash = "sha256:dd57ab1a3d3aaa9274aff1cefbf93b8ddacc7973afef5b125905f6bf18fabab0"}, + {file = "numexpr-2.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:783324ba40eb804ecfc9ebae86120a1e339ab112d0ab8a1f0d48a26354d5bf9b"}, + {file = "numexpr-2.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:183d5430db76826e54465c69db93a3c6ecbf03cda5aa1bb96eaad0147e9b68dc"}, + {file = "numexpr-2.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39ce106f92ccea5b07b1d6f2f3c4370f05edf27691dc720a63903484a2137e48"}, + {file = "numexpr-2.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b594dc9e2d6291a0bc5c065e6d9caf3eee743b5663897832e9b17753c002947a"}, + {file = "numexpr-2.8.5-cp37-cp37m-win32.whl", hash = "sha256:62b4faf8e0627673b0210a837792bddd23050ecebc98069ab23eb0633ff1ef5f"}, + {file = "numexpr-2.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:db5c65417d69414f1ab31302ea01d3548303ef31209c38b4849d145be4e1d1ba"}, + {file = "numexpr-2.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb36ffcfa1606e41aa08d559b4277bcad0e16b83941d1a4fee8d2bd5a34f8e0e"}, + {file = "numexpr-2.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34af2a0e857d02a4bc5758bc037a777d50dacb13bcd57c7905268a3e44994ed6"}, + {file = "numexpr-2.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a8dad2bfaad5a5c34a2e8bbf62b9df1dfab266d345fda1feb20ff4e264b347a"}, + {file = "numexpr-2.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b93f5a866cd13a808bc3d3a9c487d94cd02eec408b275ff0aa150f2e8e5191f8"}, + {file = "numexpr-2.8.5-cp38-cp38-win32.whl", hash = "sha256:558390fea6370003ac749ed9d0f38d708aa096f5dcb707ddb6e0ca5a0dd37da1"}, + {file = "numexpr-2.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:55983806815035eb63c5039520688c49536bb7f3cc3fc1d7d64c6a00cf3f353e"}, + {file = "numexpr-2.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1510da20e6f5f45333610b1ded44c566e2690c6c437c84f2a212ca09627c7e01"}, + {file = "numexpr-2.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e8b5bf7bcb4e8dcd66522d8fc96e1db7278f901cb4fd2e155efbe62a41dde08"}, + {file = "numexpr-2.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ed0e1c1ef5f34381448539f1fe9015906d21c9cfa2797c06194d4207dadb465"}, + {file = "numexpr-2.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aea6ab45c87c0a7041183c08a798f0ad4d7c5eccbce20cfe79ce6f1a45ef3702"}, + {file = "numexpr-2.8.5-cp39-cp39-win32.whl", hash = "sha256:cbfd833ee5fdb0efb862e152aee7e6ccea9c596d5c11d22604c2e6307bff7cad"}, + {file = "numexpr-2.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:283ce8609a7ccbadf91a68f3484558b3e36d27c93c98a41ec205efb0ab43c872"}, + {file = "numexpr-2.8.5.tar.gz", hash = "sha256:45ed41e55a0abcecf3d711481e12a5fb7a904fe99d42bc282a17cc5f8ea510be"}, ] [package.dependencies] @@ -1986,7 +1913,6 @@ numpy = ">=1.13.3" name = "numpy" version = "1.24.4" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2024,7 +1950,6 @@ files = [ name = "openapi-schema-pydantic" version = "1.2.4" description = "OpenAPI (v3) specification schema as pydantic class" -category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -2037,21 +1962,19 @@ pydantic = ">=1.8.2" [[package]] name = "overrides" -version = "7.3.1" +version = "7.4.0" description = "A decorator to automatically detect mismatch when overriding a method." -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "overrides-7.3.1-py3-none-any.whl", hash = "sha256:6187d8710a935d09b0bcef8238301d6ee2569d2ac1ae0ec39a8c7924e27f58ca"}, - {file = "overrides-7.3.1.tar.gz", hash = "sha256:8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2"}, + {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, + {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, ] [[package]] name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2063,7 +1986,6 @@ files = [ name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2075,7 +1997,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2089,21 +2010,19 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "dev" optional = false python-versions = "*" files = [ @@ -2118,7 +2037,6 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" optional = false python-versions = "*" files = [ @@ -2130,7 +2048,6 @@ files = [ name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2140,25 +2057,23 @@ files = [ [[package]] name = "platformdirs" -version = "3.9.1" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, - {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2174,7 +2089,6 @@ testing = ["pytest", "pytest-benchmark"] name = "prometheus-client" version = "0.17.1" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2189,7 +2103,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -2204,7 +2117,6 @@ wcwidth = "*" name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2231,7 +2143,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -2243,7 +2154,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "dev" optional = false python-versions = "*" files = [ @@ -2258,7 +2168,6 @@ tests = ["pytest"] name = "pycparser" version = "2.21" description = "C parser in Python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2268,48 +2177,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.11" +version = "1.10.12" description = "Data validation and settings management using python type hints" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff44c5e89315b15ff1f7fdaf9853770b810936d6b01a7bcecaa227d2f8fe444f"}, - {file = "pydantic-1.10.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c098d4ab5e2d5b3984d3cb2527e2d6099d3de85630c8934efcfdc348a9760e"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0588788a9a85f3e5e9ebca14211a496409cb3deca5b6971ff37c556d581854e7"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9baf78b31da2dc3d3f346ef18e58ec5f12f5aaa17ac517e2ffd026a92a87588"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:373c0840f5c2b5b1ccadd9286782852b901055998136287828731868027a724f"}, - {file = "pydantic-1.10.11-cp310-cp310-win_amd64.whl", hash = "sha256:c3339a46bbe6013ef7bdd2844679bfe500347ac5742cd4019a88312aa58a9847"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a6c32e1c3809fbc49debb96bf833164f3438b3696abf0fbeceb417d123e6eb"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a451ccab49971af043ec4e0d207cbc8cbe53dbf148ef9f19599024076fe9c25b"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02d24f7b2b365fed586ed73582c20f353a4c50e4be9ba2c57ab96f8091ddae"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f34739a89260dfa420aa3cbd069fbcc794b25bbe5c0a214f8fb29e363484b66"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e297897eb4bebde985f72a46a7552a7556a3dd11e7f76acda0c1093e3dbcf216"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d185819a7a059550ecb85d5134e7d40f2565f3dd94cfd870132c5f91a89cf58c"}, - {file = "pydantic-1.10.11-cp311-cp311-win_amd64.whl", hash = "sha256:4400015f15c9b464c9db2d5d951b6a780102cfa5870f2c036d37c23b56f7fc1b"}, - {file = "pydantic-1.10.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2417de68290434461a266271fc57274a138510dca19982336639484c73a07af6"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331c031ba1554b974c98679bd0780d89670d6fd6f53f5d70b10bdc9addee1713"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8268a735a14c308923e8958363e3a3404f6834bb98c11f5ab43251a4e410170c"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:44e51ba599c3ef227e168424e220cd3e544288c57829520dc90ea9cb190c3248"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d7781f1d13b19700b7949c5a639c764a077cbbdd4322ed505b449d3ca8edcb36"}, - {file = "pydantic-1.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:7522a7666157aa22b812ce14c827574ddccc94f361237ca6ea8bb0d5c38f1629"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc64eab9b19cd794a380179ac0e6752335e9555d214cfcb755820333c0784cb3"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8dc77064471780262b6a68fe67e013298d130414d5aaf9b562c33987dbd2cf4f"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe429898f2c9dd209bd0632a606bddc06f8bce081bbd03d1c775a45886e2c1cb"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:192c608ad002a748e4a0bed2ddbcd98f9b56df50a7c24d9a931a8c5dd053bd3d"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ef55392ec4bb5721f4ded1096241e4b7151ba6d50a50a80a2526c854f42e6a2f"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e0bb6efe86281623abbeeb0be64eab740c865388ee934cd3e6a358784aca6e"}, - {file = "pydantic-1.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:265a60da42f9f27e0b1014eab8acd3e53bd0bad5c5b4884e98a55f8f596b2c19"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:469adf96c8e2c2bbfa655fc7735a2a82f4c543d9fee97bd113a7fb509bf5e622"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6cbfbd010b14c8a905a7b10f9fe090068d1744d46f9e0c021db28daeb8b6de1"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9738b0f2e6c70f44ee0de53f2089d6002b10c33264abee07bdb5c7f03038303"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:787cf23e5a0cde753f2eabac1b2e73ae3844eb873fd1f5bdbff3048d8dbb7604"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:174899023337b9fc685ac8adaa7b047050616136ccd30e9070627c1aaab53a13"}, - {file = "pydantic-1.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1954f8778489a04b245a1e7b8b22a9d3ea8ef49337285693cf6959e4b757535e"}, - {file = "pydantic-1.10.11-py3-none-any.whl", hash = "sha256:008c5e266c8aada206d0627a011504e14268a62091450210eda7c07fabe6963e"}, - {file = "pydantic-1.10.11.tar.gz", hash = "sha256:f66d479cf7eb331372c470614be6511eae96f1f120344c25f3f9bb59fb1b5528"}, + {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, + {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, + {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, + {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, + {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, + {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, + {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, + {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, + {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, + {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, + {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, + {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, + {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, + {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, + {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, + {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, + {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, + {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, + {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, + {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, + {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, + {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, + {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, + {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, + {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, + {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, + {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, + {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, + {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, + {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, + {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, + {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, + {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, + {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, + {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, + {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, ] [package.dependencies] @@ -2321,14 +2229,13 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -2338,7 +2245,6 @@ plugins = ["importlib-metadata"] name = "pytest" version = "7.4.0" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2361,7 +2267,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -2376,7 +2281,6 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2388,7 +2292,6 @@ files = [ name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "dev" optional = false python-versions = "*" files = [ @@ -2400,7 +2303,6 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "dev" optional = false python-versions = "*" files = [ @@ -2424,7 +2326,6 @@ files = [ name = "pywinpty" version = "2.0.11" description = "Pseudo terminal support for Windows from Python." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2439,7 +2340,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2487,89 +2387,104 @@ files = [ [[package]] name = "pyzmq" -version = "25.1.0" +version = "25.1.1" description = "Python bindings for 0MQ" -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, ] [package.dependencies] @@ -2579,7 +2494,6 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "qtconsole" version = "5.4.3" description = "Jupyter Qt console" -category = "dev" optional = false python-versions = ">= 3.7" files = [ @@ -2606,7 +2520,6 @@ test = ["flaky", "pytest", "pytest-qt"] name = "qtpy" version = "2.3.1" description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2622,14 +2535,13 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] [[package]] name = "referencing" -version = "0.30.0" +version = "0.30.2" description = "JSON Referencing + Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.30.0-py3-none-any.whl", hash = "sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548"}, - {file = "referencing-0.30.0.tar.gz", hash = "sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b"}, + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, ] [package.dependencies] @@ -2640,7 +2552,6 @@ rpds-py = ">=0.7.0" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2662,7 +2573,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2677,7 +2587,6 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2689,7 +2598,6 @@ files = [ name = "rpds-py" version = "0.9.2" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2796,7 +2704,6 @@ files = [ name = "ruff" version = "0.0.249" description = "An extremely fast Python linter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2823,7 +2730,6 @@ files = [ name = "send2trash" version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -2840,7 +2746,6 @@ win32 = ["pywin32"] name = "setuptools" version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2857,7 +2762,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2869,7 +2773,6 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2881,7 +2784,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2891,61 +2793,60 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.19" +version = "2.0.20" description = "Database Abstraction Library" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9deaae357edc2091a9ed5d25e9ee8bba98bcfae454b3911adeaf159c2e9ca9e3"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0bf0fd65b50a330261ec7fe3d091dfc1c577483c96a9fa1e4323e932961aa1b5"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d90ccc15ba1baa345796a8fb1965223ca7ded2d235ccbef80a47b85cea2d71a"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4e688f6784427e5f9479d1a13617f573de8f7d4aa713ba82813bcd16e259d1"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:584f66e5e1979a7a00f4935015840be627e31ca29ad13f49a6e51e97a3fb8cae"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c69ce70047b801d2aba3e5ff3cba32014558966109fecab0c39d16c18510f15"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-win32.whl", hash = "sha256:96f0463573469579d32ad0c91929548d78314ef95c210a8115346271beeeaaa2"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-win_amd64.whl", hash = "sha256:22bafb1da60c24514c141a7ff852b52f9f573fb933b1e6b5263f0daa28ce6db9"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d6894708eeb81f6d8193e996257223b6bb4041cb05a17cd5cf373ed836ef87a2"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f2afd1aafded7362b397581772c670f20ea84d0a780b93a1a1529da7c3d369"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15afbf5aa76f2241184c1d3b61af1a72ba31ce4161013d7cb5c4c2fca04fd6e"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc05b59142445a4efb9c1fd75c334b431d35c304b0e33f4fa0ff1ea4890f92e"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5831138f0cc06b43edf5f99541c64adf0ab0d41f9a4471fd63b54ae18399e4de"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3afa8a21a9046917b3a12ffe016ba7ebe7a55a6fc0c7d950beb303c735c3c3ad"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-win32.whl", hash = "sha256:c896d4e6ab2eba2afa1d56be3d0b936c56d4666e789bfc59d6ae76e9fcf46145"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-win_amd64.whl", hash = "sha256:024d2f67fb3ec697555e48caeb7147cfe2c08065a4f1a52d93c3d44fc8e6ad1c"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:89bc2b374ebee1a02fd2eae6fd0570b5ad897ee514e0f84c5c137c942772aa0c"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd4d410a76c3762511ae075d50f379ae09551d92525aa5bb307f8343bf7c2c12"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f469f15068cd8351826df4080ffe4cc6377c5bf7d29b5a07b0e717dddb4c7ea2"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cda283700c984e699e8ef0fcc5c61f00c9d14b6f65a4f2767c97242513fcdd84"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:43699eb3f80920cc39a380c159ae21c8a8924fe071bccb68fc509e099420b148"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-win32.whl", hash = "sha256:61ada5831db36d897e28eb95f0f81814525e0d7927fb51145526c4e63174920b"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-win_amd64.whl", hash = "sha256:57d100a421d9ab4874f51285c059003292433c648df6abe6c9c904e5bd5b0828"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:16a310f5bc75a5b2ce7cb656d0e76eb13440b8354f927ff15cbaddd2523ee2d1"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf7b5e3856cbf1876da4e9d9715546fa26b6e0ba1a682d5ed2fc3ca4c7c3ec5b"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e7b69d9ced4b53310a87117824b23c509c6fc1f692aa7272d47561347e133b6"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9eb4575bfa5afc4b066528302bf12083da3175f71b64a43a7c0badda2be365"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6b54d1ad7a162857bb7c8ef689049c7cd9eae2f38864fc096d62ae10bc100c7d"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5d6afc41ca0ecf373366fd8e10aee2797128d3ae45eb8467b19da4899bcd1ee0"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-win32.whl", hash = "sha256:430614f18443b58ceb9dedec323ecddc0abb2b34e79d03503b5a7579cd73a531"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-win_amd64.whl", hash = "sha256:eb60699de43ba1a1f77363f563bb2c652f7748127ba3a774f7cf2c7804aa0d3d"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a752b7a9aceb0ba173955d4f780c64ee15a1a991f1c52d307d6215c6c73b3a4c"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7351c05db355da112e056a7b731253cbeffab9dfdb3be1e895368513c7d70106"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa51ce4aea583b0c6b426f4b0563d3535c1c75986c4373a0987d84d22376585b"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae7473a67cd82a41decfea58c0eac581209a0aa30f8bc9190926fbf628bb17f7"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851a37898a8a39783aab603c7348eb5b20d83c76a14766a43f56e6ad422d1ec8"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539010665c90e60c4a1650afe4ab49ca100c74e6aef882466f1de6471d414be7"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-win32.whl", hash = "sha256:f82c310ddf97b04e1392c33cf9a70909e0ae10a7e2ddc1d64495e3abdc5d19fb"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-win_amd64.whl", hash = "sha256:8e712cfd2e07b801bc6b60fdf64853bc2bd0af33ca8fa46166a23fe11ce0dbb0"}, - {file = "SQLAlchemy-2.0.19-py3-none-any.whl", hash = "sha256:314145c1389b021a9ad5aa3a18bac6f5d939f9087d7fc5443be28cba19d2c972"}, - {file = "SQLAlchemy-2.0.19.tar.gz", hash = "sha256:77a14fa20264af73ddcdb1e2b9c5a829b8cc6b8304d0f093271980e36c200a3f"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759b51346aa388c2e606ee206c0bc6f15a5299f6174d1e10cadbe4530d3c7a98"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1506e988ebeaaf316f183da601f24eedd7452e163010ea63dbe52dc91c7fc70e"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5768c268df78bacbde166b48be788b83dddaa2a5974b8810af422ddfe68a9bc8"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3f0dd6d15b6dc8b28a838a5c48ced7455c3e1fb47b89da9c79cc2090b072a50"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:243d0fb261f80a26774829bc2cee71df3222587ac789b7eaf6555c5b15651eed"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb6d77c31e1bf4268b4d61b549c341cbff9842f8e115ba6904249c20cb78a61"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-win32.whl", hash = "sha256:bcb04441f370cbe6e37c2b8d79e4af9e4789f626c595899d94abebe8b38f9a4d"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-win_amd64.whl", hash = "sha256:d32b5ffef6c5bcb452723a496bad2d4c52b346240c59b3e6dba279f6dcc06c14"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd81466bdbc82b060c3c110b2937ab65ace41dfa7b18681fdfad2f37f27acdd7"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6fe7d61dc71119e21ddb0094ee994418c12f68c61b3d263ebaae50ea8399c4d4"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4e571af672e1bb710b3cc1a9794b55bce1eae5aed41a608c0401885e3491179"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3364b7066b3c7f4437dd345d47271f1251e0cfb0aba67e785343cdbdb0fff08c"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1be86ccea0c965a1e8cd6ccf6884b924c319fcc85765f16c69f1ae7148eba64b"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1d35d49a972649b5080557c603110620a86aa11db350d7a7cb0f0a3f611948a0"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-win32.whl", hash = "sha256:27d554ef5d12501898d88d255c54eef8414576f34672e02fe96d75908993cf53"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-win_amd64.whl", hash = "sha256:411e7f140200c02c4b953b3dbd08351c9f9818d2bd591b56d0fa0716bd014f1e"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3c6aceebbc47db04f2d779db03afeaa2c73ea3f8dcd3987eb9efdb987ffa09a3"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d3f175410a6db0ad96b10bfbb0a5530ecd4fcf1e2b5d83d968dd64791f810ed"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea8186be85da6587456c9ddc7bf480ebad1a0e6dcbad3967c4821233a4d4df57"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c3d99ba99007dab8233f635c32b5cd24fb1df8d64e17bc7df136cedbea427897"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:76fdfc0f6f5341987474ff48e7a66c3cd2b8a71ddda01fa82fedb180b961630a"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-win32.whl", hash = "sha256:d3793dcf5bc4d74ae1e9db15121250c2da476e1af8e45a1d9a52b1513a393459"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-win_amd64.whl", hash = "sha256:79fde625a0a55220d3624e64101ed68a059c1c1f126c74f08a42097a72ff66a9"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:599ccd23a7146e126be1c7632d1d47847fa9f333104d03325c4e15440fc7d927"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1a58052b5a93425f656675673ef1f7e005a3b72e3f2c91b8acca1b27ccadf5f4"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79543f945be7a5ada9943d555cf9b1531cfea49241809dd1183701f94a748624"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63e73da7fb030ae0a46a9ffbeef7e892f5def4baf8064786d040d45c1d6d1dc5"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ce5e81b800a8afc870bb8e0a275d81957e16f8c4b62415a7b386f29a0cb9763"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb0d3e94c2a84215532d9bcf10229476ffd3b08f481c53754113b794afb62d14"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-win32.whl", hash = "sha256:8dd77fd6648b677d7742d2c3cc105a66e2681cc5e5fb247b88c7a7b78351cf74"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-win_amd64.whl", hash = "sha256:6f8a934f9dfdf762c844e5164046a9cea25fabbc9ec865c023fe7f300f11ca4a"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:26a3399eaf65e9ab2690c07bd5cf898b639e76903e0abad096cd609233ce5208"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4cde2e1096cbb3e62002efdb7050113aa5f01718035ba9f29f9d89c3758e7e4e"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b09ba72e4e6d341bb5bdd3564f1cea6095d4c3632e45dc69375a1dbe4e26ec"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b74eeafaa11372627ce94e4dc88a6751b2b4d263015b3523e2b1e57291102f0"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:77d37c1b4e64c926fa3de23e8244b964aab92963d0f74d98cbc0783a9e04f501"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:eefebcc5c555803065128401a1e224a64607259b5eb907021bf9b175f315d2a6"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-win32.whl", hash = "sha256:3423dc2a3b94125094897118b52bdf4d37daf142cbcf26d48af284b763ab90e9"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-win_amd64.whl", hash = "sha256:5ed61e3463021763b853628aef8bc5d469fe12d95f82c74ef605049d810f3267"}, + {file = "SQLAlchemy-2.0.20-py3-none-any.whl", hash = "sha256:63a368231c53c93e2b67d0c5556a9836fdcd383f7e3026a39602aad775b14acf"}, + {file = "SQLAlchemy-2.0.20.tar.gz", hash = "sha256:ca8a5ff2aa7f3ade6c498aaafce25b1eaeabe4e42b73e25519183e4566a16fc6"}, ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\""} typing-extensions = ">=4.2.0" [package.extras] -aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] asyncio = ["greenlet (!=0.4.17)"] asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] @@ -2972,7 +2873,6 @@ sqlcipher = ["sqlcipher3-binary"] name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "dev" optional = false python-versions = "*" files = [ @@ -2990,14 +2890,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "tenacity" -version = "8.2.2" +version = "8.2.3" description = "Retry code until it succeeds" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, - {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, + {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, + {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, ] [package.extras] @@ -3007,7 +2906,6 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3028,7 +2926,6 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3047,7 +2944,6 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3057,30 +2953,28 @@ files = [ [[package]] name = "tornado" -version = "6.3.2" +version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" optional = false python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, - {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, - {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, - {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, ] [[package]] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3096,7 +2990,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "types-pyyaml" version = "6.0.12.11" description = "Typing stubs for PyYAML" -category = "dev" optional = false python-versions = "*" files = [ @@ -3108,7 +3001,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3120,7 +3012,6 @@ files = [ name = "typing-inspect" version = "0.9.0" description = "Runtime inspection utilities for typing module." -category = "main" optional = false python-versions = "*" files = [ @@ -3136,7 +3027,6 @@ typing-extensions = ">=3.7.4" name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3151,7 +3041,6 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3169,7 +3058,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -3181,7 +3069,6 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3197,7 +3084,6 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -3207,18 +3093,17 @@ files = [ [[package]] name = "websocket-client" -version = "1.6.1" +version = "1.6.2" description = "WebSocket client for Python with low level API options" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, + {file = "websocket-client-1.6.2.tar.gz", hash = "sha256:53e95c826bf800c4c465f50093a8c4ff091c7327023b10bfaff40cf1ef170eaa"}, + {file = "websocket_client-1.6.2-py3-none-any.whl", hash = "sha256:ce54f419dfae71f4bdba69ebe65bf7f0a93fe71bc009ad3a010aacc3eebad537"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] @@ -3226,7 +3111,6 @@ test = ["websockets"] name = "widgetsnbextension" version = "4.0.8" description = "Jupyter interactive widgets for Jupyter Notebook" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3238,7 +3122,6 @@ files = [ name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3326,7 +3209,6 @@ multidict = ">=4.0" name = "zipp" version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" optional = false python-versions = ">=3.8" files = [ diff --git a/libs/experimental/pyproject.toml b/libs/experimental/pyproject.toml index 461aceedf..a90522199 100644 --- a/libs/experimental/pyproject.toml +++ b/libs/experimental/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain-experimental" -version = "0.0.10" +version = "0.0.11" description = "Building applications with LLMs through composability" authors = [] license = "MIT" diff --git a/libs/experimental/tests/integration_tests/chains/test_cpal.py b/libs/experimental/tests/integration_tests/chains/test_cpal.py index c9f703de8..f37758617 100644 --- a/libs/experimental/tests/integration_tests/chains/test_cpal.py +++ b/libs/experimental/tests/integration_tests/chains/test_cpal.py @@ -5,12 +5,12 @@ import unittest from typing import Type from unittest import mock -import pydantic import pytest from langchain import OpenAI from langchain.output_parsers import PydanticOutputParser from langchain.prompts.prompt import PromptTemplate +from langchain_experimental import pydantic_v1 as pydantic from langchain_experimental.cpal.base import ( CausalChain, CPALChain, diff --git a/libs/langchain/langchain/adapters/openai.py b/libs/langchain/langchain/adapters/openai.py index e9f18408c..b846d4f46 100644 --- a/libs/langchain/langchain/adapters/openai.py +++ b/libs/langchain/langchain/adapters/openai.py @@ -15,6 +15,7 @@ from typing import ( from typing_extensions import Literal +from langchain.chat_loaders.base import ChatSession from langchain.schema.messages import ( AIMessage, AIMessageChunk, @@ -206,3 +207,19 @@ class ChatCompletion: _convert_message_chunk_to_delta(c, i) async for i, c in aenumerate(model_config.astream(converted_messages)) ) + + +def _has_assistant_message(session: ChatSession) -> bool: + """Check if chat session has an assistant message.""" + return any([isinstance(m, AIMessage) for m in session["messages"]]) + + +def convert_messages_for_finetuning( + sessions: Iterable[ChatSession], +) -> List[List[dict]]: + """Convert messages to a list of lists of dictionaries for fine-tuning.""" + return [ + [convert_message_to_dict(s) for s in session["messages"]] + for session in sessions + if _has_assistant_message(session) + ] diff --git a/libs/langchain/langchain/agents/agent_toolkits/__init__.py b/libs/langchain/langchain/agents/agent_toolkits/__init__.py index f914d0c1e..93532981e 100644 --- a/libs/langchain/langchain/agents/agent_toolkits/__init__.py +++ b/libs/langchain/langchain/agents/agent_toolkits/__init__.py @@ -1,4 +1,5 @@ """Agent toolkits.""" +from langchain.agents.agent_toolkits.ainetwork.toolkit import AINetworkToolkit from langchain.agents.agent_toolkits.amadeus.toolkit import AmadeusToolkit from langchain.agents.agent_toolkits.azure_cognitive_services import ( AzureCognitiveServicesToolkit, @@ -46,6 +47,7 @@ from langchain.agents.agent_toolkits.xorbits.base import create_xorbits_agent from langchain.agents.agent_toolkits.zapier.toolkit import ZapierToolkit __all__ = [ + "AINetworkToolkit", "AmadeusToolkit", "AzureCognitiveServicesToolkit", "FileManagementToolkit", diff --git a/libs/langchain/langchain/agents/agent_toolkits/ainetwork/__init__.py b/libs/langchain/langchain/agents/agent_toolkits/ainetwork/__init__.py new file mode 100644 index 000000000..c4295f2ef --- /dev/null +++ b/libs/langchain/langchain/agents/agent_toolkits/ainetwork/__init__.py @@ -0,0 +1 @@ +"""AINetwork toolkit.""" diff --git a/libs/langchain/langchain/agents/agent_toolkits/ainetwork/toolkit.py b/libs/langchain/langchain/agents/agent_toolkits/ainetwork/toolkit.py new file mode 100644 index 000000000..4fd790c94 --- /dev/null +++ b/libs/langchain/langchain/agents/agent_toolkits/ainetwork/toolkit.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, List, Literal, Optional + +from langchain.agents.agent_toolkits.base import BaseToolkit +from langchain.pydantic_v1 import root_validator +from langchain.tools import BaseTool +from langchain.tools.ainetwork.app import AINAppOps +from langchain.tools.ainetwork.owner import AINOwnerOps +from langchain.tools.ainetwork.rule import AINRuleOps +from langchain.tools.ainetwork.transfer import AINTransfer +from langchain.tools.ainetwork.utils import authenticate +from langchain.tools.ainetwork.value import AINValueOps + +if TYPE_CHECKING: + from ain.ain import Ain + + +class AINetworkToolkit(BaseToolkit): + """Toolkit for interacting with AINetwork Blockchain.""" + + network: Optional[Literal["mainnet", "testnet"]] = "testnet" + interface: Optional[Ain] = None + + @root_validator(pre=True) + def set_interface(cls, values: dict) -> dict: + if not values.get("interface"): + values["interface"] = authenticate(network=values.get("network", "testnet")) + return values + + class Config: + """Pydantic config.""" + + validate_all = True + arbitrary_types_allowed = True + + def get_tools(self) -> List[BaseTool]: + """Get the tools in the toolkit.""" + return [ + AINAppOps(), + AINOwnerOps(), + AINRuleOps(), + AINTransfer(), + AINValueOps(), + ] diff --git a/libs/langchain/langchain/cache.py b/libs/langchain/langchain/cache.py index a78c06080..3160fbae6 100644 --- a/libs/langchain/langchain/cache.py +++ b/libs/langchain/langchain/cache.py @@ -33,6 +33,7 @@ from typing import ( Any, Callable, Dict, + List, Optional, Sequence, Tuple, @@ -302,6 +303,14 @@ class RedisSemanticCache(BaseCache): # TODO - implement a TTL policy in Redis + DEFAULT_SCHEMA = { + "content_key": "prompt", + "text": [ + {"name": "prompt"}, + ], + "extra": [{"name": "return_val"}, {"name": "llm_string"}], + } + def __init__( self, redis_url: str, embedding: Embeddings, score_threshold: float = 0.2 ): @@ -349,12 +358,14 @@ class RedisSemanticCache(BaseCache): embedding=self.embedding, index_name=index_name, redis_url=self.redis_url, + schema=cast(Dict, self.DEFAULT_SCHEMA), ) except ValueError: redis = RedisVectorstore( - embedding_function=self.embedding.embed_query, + embedding=self.embedding, index_name=index_name, redis_url=self.redis_url, + index_schema=cast(Dict, self.DEFAULT_SCHEMA), ) _embedding = self.embedding.embed_query(text="test") redis._create_index(dim=len(_embedding)) @@ -374,17 +385,18 @@ class RedisSemanticCache(BaseCache): def lookup(self, prompt: str, llm_string: str) -> Optional[RETURN_VAL_TYPE]: """Look up based on prompt and llm_string.""" llm_cache = self._get_llm_cache(llm_string) - generations = [] + generations: List = [] # Read from a Hash - results = llm_cache.similarity_search_limit_score( + results = llm_cache.similarity_search( query=prompt, k=1, - score_threshold=self.score_threshold, + distance_threshold=self.score_threshold, ) if results: for document in results: - for text in document.metadata["return_val"]: - generations.append(Generation(text=text)) + generations.extend( + _load_generations_from_json(document.metadata["return_val"]) + ) return generations if generations else None def update(self, prompt: str, llm_string: str, return_val: RETURN_VAL_TYPE) -> None: @@ -402,11 +414,11 @@ class RedisSemanticCache(BaseCache): ) return llm_cache = self._get_llm_cache(llm_string) - # Write to vectorstore + _dump_generations_to_json([g for g in return_val]) metadata = { "llm_string": llm_string, "prompt": prompt, - "return_val": [generation.text for generation in return_val], + "return_val": _dump_generations_to_json([g for g in return_val]), } llm_cache.add_texts(texts=[prompt], metadatas=[metadata]) diff --git a/libs/langchain/langchain/callbacks/base.py b/libs/langchain/langchain/callbacks/base.py index c03633e2d..d6155536b 100644 --- a/libs/langchain/langchain/callbacks/base.py +++ b/libs/langchain/langchain/callbacks/base.py @@ -10,7 +10,7 @@ if TYPE_CHECKING: from langchain.schema.agent import AgentAction, AgentFinish from langchain.schema.document import Document from langchain.schema.messages import BaseMessage - from langchain.schema.output import LLMResult + from langchain.schema.output import ChatGenerationChunk, GenerationChunk, LLMResult class RetrieverManagerMixin: @@ -44,11 +44,18 @@ class LLMManagerMixin: self, token: str, *, + chunk: Optional[Union[GenerationChunk, ChatGenerationChunk]] = None, run_id: UUID, parent_run_id: Optional[UUID] = None, **kwargs: Any, ) -> Any: - """Run on new LLM token. Only available when streaming is enabled.""" + """Run on new LLM token. Only available when streaming is enabled. + + Args: + token (str): The new token. + chunk (GenerationChunk | ChatGenerationChunk): The new generated chunk, + containing content and other information. + """ def on_llm_end( self, @@ -316,6 +323,7 @@ class AsyncCallbackHandler(BaseCallbackHandler): self, token: str, *, + chunk: Optional[Union[GenerationChunk, ChatGenerationChunk]] = None, run_id: UUID, parent_run_id: Optional[UUID] = None, tags: Optional[List[str]] = None, diff --git a/libs/langchain/langchain/callbacks/manager.py b/libs/langchain/langchain/callbacks/manager.py index c6f626204..3f22832de 100644 --- a/libs/langchain/langchain/callbacks/manager.py +++ b/libs/langchain/langchain/callbacks/manager.py @@ -49,6 +49,7 @@ from langchain.schema import ( LLMResult, ) from langchain.schema.messages import BaseMessage, get_buffer_string +from langchain.schema.output import ChatGenerationChunk, GenerationChunk if TYPE_CHECKING: from langsmith import Client as LangSmithClient @@ -592,6 +593,8 @@ class CallbackManagerForLLMRun(RunManager, LLMManagerMixin): def on_llm_new_token( self, token: str, + *, + chunk: Optional[Union[GenerationChunk, ChatGenerationChunk]] = None, **kwargs: Any, ) -> None: """Run when LLM generates a new token. @@ -607,6 +610,7 @@ class CallbackManagerForLLMRun(RunManager, LLMManagerMixin): run_id=self.run_id, parent_run_id=self.parent_run_id, tags=self.tags, + chunk=chunk, **kwargs, ) @@ -655,6 +659,8 @@ class AsyncCallbackManagerForLLMRun(AsyncRunManager, LLMManagerMixin): async def on_llm_new_token( self, token: str, + *, + chunk: Optional[Union[GenerationChunk, ChatGenerationChunk]] = None, **kwargs: Any, ) -> None: """Run when LLM generates a new token. @@ -667,6 +673,7 @@ class AsyncCallbackManagerForLLMRun(AsyncRunManager, LLMManagerMixin): "on_llm_new_token", "ignore_llm", token, + chunk=chunk, run_id=self.run_id, parent_run_id=self.parent_run_id, tags=self.tags, diff --git a/libs/langchain/langchain/callbacks/streaming_stdout.py b/libs/langchain/langchain/callbacks/streaming_stdout.py index 4acde4ceb..2c71bc769 100644 --- a/libs/langchain/langchain/callbacks/streaming_stdout.py +++ b/libs/langchain/langchain/callbacks/streaming_stdout.py @@ -4,6 +4,7 @@ from typing import Any, Dict, List, Union from langchain.callbacks.base import BaseCallbackHandler from langchain.schema import AgentAction, AgentFinish, LLMResult +from langchain.schema.messages import BaseMessage class StreamingStdOutCallbackHandler(BaseCallbackHandler): @@ -14,6 +15,14 @@ class StreamingStdOutCallbackHandler(BaseCallbackHandler): ) -> None: """Run when LLM starts running.""" + def on_chat_model_start( + self, + serialized: Dict[str, Any], + messages: List[List[BaseMessage]], + **kwargs: Any + ) -> None: + """Run when LLM starts running.""" + def on_llm_new_token(self, token: str, **kwargs: Any) -> None: """Run on new LLM token. Only available when streaming is enabled.""" sys.stdout.write(token) diff --git a/libs/langchain/langchain/callbacks/tracers/base.py b/libs/langchain/langchain/callbacks/tracers/base.py index 7dec527c1..bee30a515 100644 --- a/libs/langchain/langchain/callbacks/tracers/base.py +++ b/libs/langchain/langchain/callbacks/tracers/base.py @@ -13,7 +13,12 @@ from langchain.callbacks.base import BaseCallbackHandler from langchain.callbacks.tracers.schemas import Run from langchain.load.dump import dumpd from langchain.schema.document import Document -from langchain.schema.output import ChatGeneration, LLMResult +from langchain.schema.output import ( + ChatGeneration, + ChatGenerationChunk, + GenerationChunk, + LLMResult, +) logger = logging.getLogger(__name__) @@ -123,6 +128,7 @@ class BaseTracer(BaseCallbackHandler, ABC): self, token: str, *, + chunk: Optional[Union[GenerationChunk, ChatGenerationChunk]] = None, run_id: UUID, parent_run_id: Optional[UUID] = None, **kwargs: Any, @@ -135,11 +141,14 @@ class BaseTracer(BaseCallbackHandler, ABC): llm_run = self.run_map.get(run_id_) if llm_run is None or llm_run.run_type != "llm": raise TracerException(f"No LLM Run found to be traced for {run_id}") + event_kwargs: Dict[str, Any] = {"token": token} + if chunk: + event_kwargs["chunk"] = chunk llm_run.events.append( { "name": "new_token", "time": datetime.utcnow(), - "kwargs": {"token": token}, + "kwargs": event_kwargs, }, ) diff --git a/libs/langchain/langchain/chains/graph_qa/cypher.py b/libs/langchain/langchain/chains/graph_qa/cypher.py index 015ff5f47..82c85ef1c 100644 --- a/libs/langchain/langchain/chains/graph_qa/cypher.py +++ b/libs/langchain/langchain/chains/graph_qa/cypher.py @@ -73,15 +73,28 @@ class GraphCypherQAChain(Chain): @classmethod def from_llm( cls, - llm: BaseLanguageModel, + llm: Optional[BaseLanguageModel] = None, *, qa_prompt: BasePromptTemplate = CYPHER_QA_PROMPT, cypher_prompt: BasePromptTemplate = CYPHER_GENERATION_PROMPT, + cypher_llm: Optional[BaseLanguageModel] = None, + qa_llm: Optional[BaseLanguageModel] = None, **kwargs: Any, ) -> GraphCypherQAChain: """Initialize from LLM.""" - qa_chain = LLMChain(llm=llm, prompt=qa_prompt) - cypher_generation_chain = LLMChain(llm=llm, prompt=cypher_prompt) + + if not cypher_llm and not llm: + raise ValueError("Either `llm` or `cypher_llm` parameters must be provided") + if not qa_llm and not llm: + raise ValueError("Either `llm` or `qa_llm` parameters must be provided") + if cypher_llm and qa_llm and llm: + raise ValueError( + "You can specify up to two of 'cypher_llm', 'qa_llm'" + ", and 'llm', but not all three simultaneously." + ) + + qa_chain = LLMChain(llm=qa_llm or llm, prompt=qa_prompt) + cypher_generation_chain = LLMChain(llm=cypher_llm or llm, prompt=cypher_prompt) return cls( qa_chain=qa_chain, diff --git a/libs/langchain/langchain/chains/qa_with_sources/base.py b/libs/langchain/langchain/chains/qa_with_sources/base.py index db07d24b2..d0408059a 100644 --- a/libs/langchain/langchain/chains/qa_with_sources/base.py +++ b/libs/langchain/langchain/chains/qa_with_sources/base.py @@ -120,9 +120,11 @@ class BaseQAWithSourcesChain(Chain, ABC): def _split_sources(self, answer: str) -> Tuple[str, str]: """Split sources from answer.""" - if re.search(r"SOURCES:\s", answer): - answer, sources = re.split(r"SOURCES:\s|QUESTION:\s", answer)[:2] - sources = re.split(r"\n", sources)[0] + if re.search(r"SOURCES?[:\s]", answer, re.IGNORECASE): + answer, sources = re.split( + r"SOURCES?[:\s]|QUESTION:\s", answer, flags=re.IGNORECASE + )[:2] + sources = re.split(r"\n", sources)[0].strip() else: sources = "" return answer, sources diff --git a/libs/langchain/langchain/chains/sql_database/prompt.py b/libs/langchain/langchain/chains/sql_database/prompt.py index 3b2040931..b212ecd30 100644 --- a/libs/langchain/langchain/chains/sql_database/prompt.py +++ b/libs/langchain/langchain/chains/sql_database/prompt.py @@ -42,6 +42,26 @@ DECIDER_PROMPT = PromptTemplate( output_parser=CommaSeparatedListOutputParser(), ) +_cratedb_prompt = """You are a CrateDB expert. Given an input question, first create a syntactically correct CrateDB query to run, then look at the results of the query and return the answer to the input question. +Unless the user specifies in the question a specific number of examples to obtain, query for at most {top_k} results using the LIMIT clause as per CrateDB. You can order the results to return the most informative data in the database. +Never query for all columns from a table. You must query only the columns that are needed to answer the question. Wrap each column name in double quotes (") to denote them as delimited identifiers. +Pay attention to use only the column names you can see in the tables below. Be careful to not query for columns that do not exist. Also, pay attention to which column is in which table. +Pay attention to use CURRENT_DATE function to get the current date, if the question involves "today". + +Use the following format: + +Question: Question here +SQLQuery: SQL Query to run +SQLResult: Result of the SQLQuery +Answer: Final answer here + +""" + +CRATEDB_PROMPT = PromptTemplate( + input_variables=["input", "table_info", "top_k"], + template=_cratedb_prompt + PROMPT_SUFFIX, +) + _duckdb_prompt = """You are a DuckDB expert. Given an input question, first create a syntactically correct DuckDB query to run, then look at the results of the query and return the answer to the input question. Unless the user specifies in the question a specific number of examples to obtain, query for at most {top_k} results using the LIMIT clause as per DuckDB. You can order the results to return the most informative data in the database. Never query for all columns from a table. You must query only the columns that are needed to answer the question. Wrap each column name in double quotes (") to denote them as delimited identifiers. @@ -250,6 +270,7 @@ PRESTODB_PROMPT = PromptTemplate( SQL_PROMPTS = { + "crate": CRATEDB_PROMPT, "duckdb": DUCKDB_PROMPT, "googlesql": GOOGLESQL_PROMPT, "mssql": MSSQL_PROMPT, diff --git a/libs/langchain/langchain/chat_loaders/__init__.py b/libs/langchain/langchain/chat_loaders/__init__.py new file mode 100644 index 000000000..594d87344 --- /dev/null +++ b/libs/langchain/langchain/chat_loaders/__init__.py @@ -0,0 +1,6 @@ +"""Load chat messages from common communications platforms for finetuning. + +This module provides functions to load chat messages from various +communications platforms such as Facebook Messenger, Telegram, and +WhatsApp. The loaded chat messages can be used for finetuning models. +""" diff --git a/libs/langchain/langchain/chat_loaders/base.py b/libs/langchain/langchain/chat_loaders/base.py new file mode 100644 index 000000000..418ba15d2 --- /dev/null +++ b/libs/langchain/langchain/chat_loaders/base.py @@ -0,0 +1,31 @@ +"""Base definitions for chat loaders. + +A chat loader is a class that loads chat messages from an external +source such as a file or a database. The chat messages can then be +used for finetuning. +""" + +from abc import ABC, abstractmethod +from typing import Iterator, List, Sequence, TypedDict + +from langchain.schema.messages import BaseMessage + + +class ChatSession(TypedDict): + """A chat session represents a single + conversation, channel, or other group of messages.""" + + messages: Sequence[BaseMessage] + """The LangChain chat messages loaded from the source.""" + + +class BaseChatLoader(ABC): + """Base class for chat loaders.""" + + @abstractmethod + def lazy_load(self) -> Iterator[ChatSession]: + """Lazy load the chat sessions.""" + + def load(self) -> List[ChatSession]: + """Eagerly load the chat sessions into memory.""" + return list(self.lazy_load()) diff --git a/libs/langchain/langchain/chat_loaders/facebook_messenger.py b/libs/langchain/langchain/chat_loaders/facebook_messenger.py new file mode 100644 index 000000000..5864c3274 --- /dev/null +++ b/libs/langchain/langchain/chat_loaders/facebook_messenger.py @@ -0,0 +1,77 @@ +import json +import logging +from pathlib import Path +from typing import Iterator, Union + +from langchain.chat_loaders.base import BaseChatLoader, ChatSession +from langchain.schema.messages import HumanMessage + +logger = logging.getLogger(__file__) + + +class SingleFileFacebookMessengerChatLoader(BaseChatLoader): + """A chat loader for loading Facebook Messenger chat data from a single file. + + Args: + path (Union[Path, str]): The path to the chat file. + + Attributes: + path (Path): The path to the chat file. + + """ + + def __init__(self, path: Union[Path, str]) -> None: + super().__init__() + self.file_path = path if isinstance(path, Path) else Path(path) + + def lazy_load(self) -> Iterator[ChatSession]: + """Lazy loads the chat data from the file. + + Yields: + ChatSession: A chat session containing the loaded messages. + + """ + with open(self.file_path) as f: + data = json.load(f) + sorted_data = sorted(data["messages"], key=lambda x: x["timestamp_ms"]) + messages = [] + for m in sorted_data: + messages.append( + HumanMessage( + content=m["content"], additional_kwargs={"sender": m["sender_name"]} + ) + ) + yield ChatSession(messages=messages) + + +class FolderFacebookMessengerChatLoader(BaseChatLoader): + """A chat loader for loading Facebook Messenger chat data from a folder. + + Args: + path (Union[str, Path]): The path to the directory + containing the chat files. + + Attributes: + path (Path): The path to the directory containing the chat files. + + """ + + def __init__(self, path: Union[str, Path]) -> None: + super().__init__() + self.directory_path = Path(path) if isinstance(path, str) else path + + def lazy_load(self) -> Iterator[ChatSession]: + """Lazy loads the chat data from the folder. + + Yields: + ChatSession: A chat session containing the loaded messages. + + """ + inbox_path = self.directory_path / "inbox" + for _dir in inbox_path.iterdir(): + if _dir.is_dir(): + for _file in _dir.iterdir(): + if _file.suffix.lower() == ".json": + file_loader = SingleFileFacebookMessengerChatLoader(path=_file) + for result in file_loader.lazy_load(): + yield result diff --git a/libs/langchain/langchain/chat_loaders/gmail.py b/libs/langchain/langchain/chat_loaders/gmail.py new file mode 100644 index 000000000..4e88accde --- /dev/null +++ b/libs/langchain/langchain/chat_loaders/gmail.py @@ -0,0 +1,110 @@ +import base64 +import re +from typing import Any, Iterator + +from langchain.chat_loaders.base import BaseChatLoader, ChatSession +from langchain.schema.messages import HumanMessage + + +def _extract_email_content(msg: Any) -> HumanMessage: + from_email = None + for values in msg["payload"]["headers"]: + name = values["name"] + if name == "From": + from_email = values["value"] + if from_email is None: + raise ValueError + for part in msg["payload"]["parts"]: + if part["mimeType"] == "text/plain": + data = part["body"]["data"] + data = base64.urlsafe_b64decode(data).decode("utf-8") + # Regular expression to split the email body at the first + # occurrence of a line that starts with "On ... wrote:" + pattern = re.compile(r"\r\nOn .+(\r\n)*wrote:\r\n") + # Split the email body and extract the first part + newest_response = re.split(pattern, data)[0] + message = HumanMessage( + content=newest_response, additional_kwargs={"sender": from_email} + ) + return message + raise ValueError + + +def _get_message_data(service: Any, message: Any) -> ChatSession: + msg = service.users().messages().get(userId="me", id=message["id"]).execute() + message_content = _extract_email_content(msg) + in_reply_to = None + email_data = msg["payload"]["headers"] + for values in email_data: + name = values["name"] + if name == "In-Reply-To": + in_reply_to = values["value"] + if in_reply_to is None: + raise ValueError + + thread_id = msg["threadId"] + + thread = service.users().threads().get(userId="me", id=thread_id).execute() + messages = thread["messages"] + + response_email = None + for message in messages: + email_data = message["payload"]["headers"] + for values in email_data: + if values["name"] == "Message-ID": + message_id = values["value"] + if message_id == in_reply_to: + response_email = message + if response_email is None: + raise ValueError + starter_content = _extract_email_content(response_email) + return ChatSession(messages=[starter_content, message_content]) + + +class GMailLoader(BaseChatLoader): + """This loader goes over how to load data from GMail. + + There are many ways you could want to load data from GMail. + This loader is currently fairly opinionated in how to do so. + The way it does it is it first looks for all messages that you have sent. + It then looks for messages where you are responding to a previous email. + It then fetches that previous email, and creates a training example + of that email, followed by your email. + + Note that there are clear limitations here. For example, + all examples created are only looking at the previous email for context. + + To use: + + - Set up a Google Developer Account: + Go to the Google Developer Console, create a project, + and enable the Gmail API for that project. + This will give you a credentials.json file that you'll need later. + """ + + def __init__(self, creds: Any, n: int = 100, raise_error: bool = False) -> None: + super().__init__() + self.creds = creds + self.n = n + self.raise_error = raise_error + + def lazy_load(self) -> Iterator[ChatSession]: + from googleapiclient.discovery import build + + service = build("gmail", "v1", credentials=self.creds) + results = ( + service.users() + .messages() + .list(userId="me", labelIds=["SENT"], maxResults=self.n) + .execute() + ) + messages = results.get("messages", []) + for message in messages: + try: + yield _get_message_data(service, message) + except Exception as e: + # TODO: handle errors better + if self.raise_error: + raise e + else: + pass diff --git a/libs/langchain/langchain/chat_loaders/slack.py b/libs/langchain/langchain/chat_loaders/slack.py new file mode 100644 index 000000000..261289bb4 --- /dev/null +++ b/libs/langchain/langchain/chat_loaders/slack.py @@ -0,0 +1,84 @@ +import json +import logging +import re +import zipfile +from pathlib import Path +from typing import Dict, Iterator, List, Union + +from langchain import schema +from langchain.chat_loaders import base as chat_loaders + +logger = logging.getLogger(__name__) + + +class SlackChatLoader(chat_loaders.BaseChatLoader): + def __init__( + self, + path: Union[str, Path], + ): + """ + Initialize the chat loader with the path to the exported Slack dump zip file. + + :param path: Path to the exported Slack dump zip file. + """ + self.zip_path = path if isinstance(path, Path) else Path(path) + if not self.zip_path.exists(): + raise FileNotFoundError(f"File {self.zip_path} not found") + + def _load_single_chat_session( + self, messages: List[Dict] + ) -> chat_loaders.ChatSession: + results: List[Union[schema.AIMessage, schema.HumanMessage]] = [] + previous_sender = None + for message in messages: + if not isinstance(message, dict): + continue + text = message.get("text", "") + timestamp = message.get("ts", "") + sender = message.get("user", "") + if not sender: + continue + skip_pattern = re.compile( + r"<@U\d+> has joined the channel", flags=re.IGNORECASE + ) + if skip_pattern.match(text): + continue + if sender == previous_sender: + results[-1].content += "\n\n" + text + results[-1].additional_kwargs["events"].append( + {"message_time": timestamp} + ) + else: + results.append( + schema.HumanMessage( + role=sender, + content=text, + additional_kwargs={ + "sender": sender, + "events": [{"message_time": timestamp}], + }, + ) + ) + previous_sender = sender + return chat_loaders.ChatSession(messages=results) + + def _read_json(self, zip_file: zipfile.ZipFile, file_path: str) -> List[dict]: + """Read JSON data from a zip subfile.""" + with zip_file.open(file_path, "r") as f: + data = json.load(f) + if not isinstance(data, list): + raise ValueError(f"Expected list of dictionaries, got {type(data)}") + return data + + def lazy_load(self) -> Iterator[chat_loaders.ChatSession]: + """ + Lazy load the chat sessions from the Slack dump file and yield them + in the required format. + + :return: Iterator of chat sessions containing messages. + """ + with zipfile.ZipFile(str(self.zip_path), "r") as zip_file: + for file_path in zip_file.namelist(): + if file_path.endswith(".json"): + messages = self._read_json(zip_file, file_path) + yield self._load_single_chat_session(messages) diff --git a/libs/langchain/langchain/chat_loaders/telegram.py b/libs/langchain/langchain/chat_loaders/telegram.py new file mode 100644 index 000000000..786dad727 --- /dev/null +++ b/libs/langchain/langchain/chat_loaders/telegram.py @@ -0,0 +1,152 @@ +import json +import logging +import os +import zipfile +from pathlib import Path +from typing import Iterator, List, Union + +from langchain import schema +from langchain.chat_loaders import base as chat_loaders + +logger = logging.getLogger(__name__) + + +class TelegramChatLoader(chat_loaders.BaseChatLoader): + """A loading utility for converting telegram conversations + to LangChain chat messages. + + To export, use the Telegram Desktop app from + https://desktop.telegram.org/, select a conversation, click the three dots + in the top right corner, and select "Export chat history". Then select + "Machine-readable JSON" (preferred) to export. Note: the 'lite' versions of + the desktop app (like "Telegram for MacOS") do not support exporting chat + history. + """ + + def __init__( + self, + path: Union[str, Path], + ): + """Initialize the TelegramChatLoader. + + Args: + path (Union[str, Path]): Path to the exported Telegram chat zip, + directory, json, or HTML file. + """ + self.path = path if isinstance(path, str) else str(path) + + def _load_single_chat_session_html( + self, file_path: str + ) -> chat_loaders.ChatSession: + """Load a single chat session from an HTML file. + + Args: + file_path (str): Path to the HTML file. + + Returns: + chat_loaders.ChatSession: The loaded chat session. + """ + try: + from bs4 import BeautifulSoup + except ImportError: + raise ImportError( + "Please install the 'beautifulsoup4' package to load" + " Telegram HTML files. You can do this by running" + "'pip install beautifulsoup4' in your terminal." + ) + with open(file_path, "r", encoding="utf-8") as file: + soup = BeautifulSoup(file, "html.parser") + + results: List[Union[schema.HumanMessage, schema.AIMessage]] = [] + previous_sender = None + for message in soup.select(".message.default"): + timestamp = message.select_one(".pull_right.date.details")["title"] + from_name_element = message.select_one(".from_name") + if from_name_element is None and previous_sender is None: + logger.debug("from_name not found in message") + continue + elif from_name_element is None: + from_name = previous_sender + else: + from_name = from_name_element.text.strip() + text = message.select_one(".text").text.strip() + results.append( + schema.HumanMessage( + content=text, + additional_kwargs={ + "sender": from_name, + "events": [{"message_time": timestamp}], + }, + ) + ) + previous_sender = from_name + + return chat_loaders.ChatSession(messages=results) + + def _load_single_chat_session_json( + self, file_path: str + ) -> chat_loaders.ChatSession: + """Load a single chat session from a JSON file. + + Args: + file_path (str): Path to the JSON file. + + Returns: + chat_loaders.ChatSession: The loaded chat session. + """ + with open(file_path, "r", encoding="utf-8") as file: + data = json.load(file) + + messages = data.get("messages", []) + results: List[schema.BaseMessage] = [] + for message in messages: + text = message.get("text", "") + timestamp = message.get("date", "") + from_name = message.get("from", "") + + results.append( + schema.HumanMessage( + content=text, + additional_kwargs={ + "sender": from_name, + "events": [{"message_time": timestamp}], + }, + ) + ) + + return chat_loaders.ChatSession(messages=results) + + def _iterate_files(self, path: str) -> Iterator[str]: + """Iterate over files in a directory or zip file. + + Args: + path (str): Path to the directory or zip file. + + Yields: + str: Path to each file. + """ + if os.path.isfile(path) and path.endswith((".html", ".json")): + yield path + elif os.path.isdir(path): + for root, _, files in os.walk(path): + for file in files: + if file.endswith((".html", ".json")): + yield os.path.join(root, file) + elif zipfile.is_zipfile(path): + with zipfile.ZipFile(path) as zip_file: + for file in zip_file.namelist(): + if file.endswith((".html", ".json")): + yield zip_file.extract(file) + + def lazy_load(self) -> Iterator[chat_loaders.ChatSession]: + """Lazy load the messages from the chat file and yield them + in as chat sessions. + + Yields: + chat_loaders.ChatSession: The loaded chat session. + """ + for file_path in self._iterate_files(self.path): + if file_path.endswith(".html"): + yield self._load_single_chat_session_html(file_path) + elif file_path.endswith(".json"): + yield self._load_single_chat_session_json(file_path) diff --git a/libs/langchain/langchain/chat_loaders/utils.py b/libs/langchain/langchain/chat_loaders/utils.py new file mode 100644 index 000000000..da41cfd23 --- /dev/null +++ b/libs/langchain/langchain/chat_loaders/utils.py @@ -0,0 +1,86 @@ +"""Utilities for chat loaders.""" +from copy import deepcopy +from typing import Iterable, Iterator, List + +from langchain import schema +from langchain.chat_loaders.base import ChatSession +from langchain.schema.messages import BaseMessage + + +def merge_chat_runs_in_session( + chat_session: ChatSession, delimiter: str = "\n\n" +) -> ChatSession: + """Merge chat runs together in a chat session. + + A chat run is a sequence of messages from the same sender. + + Args: + chat_session: A chat session. + + Returns: + A chat session with merged chat runs. + """ + messages: List[BaseMessage] = [] + for message in chat_session["messages"]: + if not messages: + messages.append(deepcopy(message)) + elif ( + isinstance(message, type(messages[-1])) + and messages[-1].additional_kwargs.get("sender") is not None + and messages[-1].additional_kwargs["sender"] + == message.additional_kwargs.get("sender") + ): + messages[-1].content = ( + messages[-1].content + delimiter + message.content + ).strip() + messages[-1].additional_kwargs.get("events", []).extend( + message.additional_kwargs.get("events") or [] + ) + else: + messages.append(deepcopy(message)) + return ChatSession(messages=messages) + + +def merge_chat_runs(chat_sessions: Iterable[ChatSession]) -> Iterator[ChatSession]: + """Merge chat runs together. + + A chat run is a sequence of messages from the same sender. + + Args: + chat_sessions: A list of chat sessions. + + Returns: + A list of chat sessions with merged chat runs. + """ + for chat_session in chat_sessions: + yield merge_chat_runs_in_session(chat_session) + + +def map_ai_messages_in_session(chat_sessions: ChatSession, sender: str) -> ChatSession: + """Convert messages from the specified 'sender' to AI messages. + + This is useful for fine-tuning the AI to adapt to your voice. + """ + messages = [] + num_converted = 0 + for message in chat_sessions["messages"]: + if message.additional_kwargs.get("sender") == sender: + message = schema.AIMessage( + content=message.content, + additional_kwargs=message.additional_kwargs.copy(), + example=getattr(message, "example", None), + ) + num_converted += 1 + messages.append(message) + return ChatSession(messages=messages) + + +def map_ai_messages( + chat_sessions: Iterable[ChatSession], sender: str +) -> Iterator[ChatSession]: + """Convert messages from the specified 'sender' to AI messages. + + This is useful for fine-tuning the AI to adapt to your voice. + """ + for chat_session in chat_sessions: + yield map_ai_messages_in_session(chat_session, sender) diff --git a/libs/langchain/langchain/chat_loaders/whatsapp.py b/libs/langchain/langchain/chat_loaders/whatsapp.py new file mode 100644 index 000000000..c911e262c --- /dev/null +++ b/libs/langchain/langchain/chat_loaders/whatsapp.py @@ -0,0 +1,116 @@ +import logging +import os +import re +import zipfile +from typing import Iterator, List, Union + +from langchain import schema +from langchain.chat_loaders import base as chat_loaders +from langchain.schema import messages + +logger = logging.getLogger(__name__) + + +class WhatsAppChatLoader(chat_loaders.BaseChatLoader): + def __init__(self, path: str): + """Initialize the WhatsAppChatLoader. + + Args: + path (str): Path to the exported WhatsApp chat + zip directory, folder, or file. + + To generate the dump, open the chat, click the three dots in the top + right corner, and select "More". Then select "Export chat" and + choose "Without media". + """ + self.path = path + ignore_lines = [ + "This message was deleted", + "", + "image omitted", + "Messages and calls are end-to-end encrypted. No one outside of this chat," + " not even WhatsApp, can read or listen to them.", + ] + self._ignore_lines = re.compile( + r"(" + "|".join([r"\u200E*" + line for line in ignore_lines]) + r")", + flags=re.IGNORECASE, + ) + self._message_line_regex = re.compile( + r"\u200E*\[?(\d{1,2}/\d{1,2}/\d{2,4}, \d{1,2}:\d{2}:\d{2} (?:AM|PM))\]?[ \u200E]*([^:]+): (.+)", # noqa + flags=re.IGNORECASE, + ) + + def _load_single_chat_session(self, file_path: str) -> chat_loaders.ChatSession: + """Load a single chat session from a file. + + Args: + file_path (str): Path to the chat file. + + Returns: + ChatSession: The loaded chat session. + """ + with open(file_path, "r", encoding="utf-8") as file: + txt = file.read() + + # Split messages by newlines, but keep multi-line messages grouped + chat_lines: List[str] = [] + current_message = "" + for line in txt.split("\n"): + if self._message_line_regex.match(line): + if current_message: + chat_lines.append(current_message) + current_message = line + else: + current_message += " " + line.strip() + if current_message: + chat_lines.append(current_message) + results: List[Union[messages.HumanMessage, messages.AIMessage]] = [] + for line in chat_lines: + result = self._message_line_regex.match(line.strip()) + if result: + timestamp, sender, text = result.groups() + if not self._ignore_lines.match(text.strip()): + results.append( + schema.HumanMessage( + role=sender, + content=text, + additional_kwargs={ + "sender": sender, + "events": [{"message_time": timestamp}], + }, + ) + ) + else: + logger.debug(f"Could not parse line: {line}") + return chat_loaders.ChatSession(messages=results) + + def _iterate_files(self, path: str) -> Iterator[str]: + """Iterate over the files in a directory or zip file. + + Args: + path (str): Path to the directory or zip file. + + Yields: + str: The path to each file. + """ + if os.path.isfile(path): + yield path + elif os.path.isdir(path): + for root, _, files in os.walk(path): + for file in files: + if file.endswith(".txt"): + yield os.path.join(root, file) + elif zipfile.is_zipfile(path): + with zipfile.ZipFile(path) as zip_file: + for file in zip_file.namelist(): + if file.endswith(".txt"): + yield zip_file.extract(file) + + def lazy_load(self) -> Iterator[chat_loaders.ChatSession]: + """Lazy load the messages from the chat file and yield + them as chat sessions. + + Yields: + Iterator[ChatSession]: The loaded chat sessions. + """ + yield self._load_single_chat_session(self.path) diff --git a/libs/langchain/langchain/chat_models/__init__.py b/libs/langchain/langchain/chat_models/__init__.py index 0f26a852b..ee21a2377 100644 --- a/libs/langchain/langchain/chat_models/__init__.py +++ b/libs/langchain/langchain/chat_models/__init__.py @@ -27,6 +27,7 @@ from langchain.chat_models.human import HumanInputChatModel from langchain.chat_models.jinachat import JinaChat from langchain.chat_models.litellm import ChatLiteLLM from langchain.chat_models.mlflow_ai_gateway import ChatMLflowAIGateway +from langchain.chat_models.ollama import ChatOllama from langchain.chat_models.openai import ChatOpenAI from langchain.chat_models.promptlayer_openai import PromptLayerChatOpenAI from langchain.chat_models.vertexai import ChatVertexAI @@ -39,6 +40,7 @@ __all__ = [ "ChatAnthropic", "ChatGooglePalm", "ChatMLflowAIGateway", + "ChatOllama", "ChatVertexAI", "JinaChat", "HumanInputChatModel", diff --git a/libs/langchain/langchain/chat_models/anthropic.py b/libs/langchain/langchain/chat_models/anthropic.py index e201e382f..4d00eae4d 100644 --- a/libs/langchain/langchain/chat_models/anthropic.py +++ b/libs/langchain/langchain/chat_models/anthropic.py @@ -32,10 +32,16 @@ class ChatAnthropic(BaseChatModel, _AnthropicCommon): .. code-block:: python import anthropic - from langchain.llms import Anthropic + from langchain.chat_models import ChatAnthropic model = ChatAnthropic(model="", anthropic_api_key="my-api-key") """ + class Config: + """Configuration for this pydantic object.""" + + allow_population_by_field_name = True + arbitrary_types_allowed = True + @property def lc_secrets(self) -> Dict[str, str]: return {"anthropic_api_key": "ANTHROPIC_API_KEY"} diff --git a/libs/langchain/langchain/chat_models/base.py b/libs/langchain/langchain/chat_models/base.py index 09199e30d..2d0db37c0 100644 --- a/libs/langchain/langchain/chat_models/base.py +++ b/libs/langchain/langchain/chat_models/base.py @@ -176,22 +176,22 @@ class BaseChatModel(BaseLanguageModel[BaseMessageChunk], ABC): dumpd(self), [messages], invocation_params=params, options=options ) try: - message: Optional[BaseMessageChunk] = None + generation: Optional[ChatGenerationChunk] = None for chunk in self._stream( messages, stop=stop, run_manager=run_manager, **kwargs ): yield chunk.message - if message is None: - message = chunk.message + if generation is None: + generation = chunk else: - message += chunk.message - assert message is not None + generation += chunk + assert generation is not None except (KeyboardInterrupt, Exception) as e: run_manager.on_llm_error(e) raise e else: run_manager.on_llm_end( - LLMResult(generations=[[ChatGeneration(message=message)]]), + LLMResult(generations=[[generation]]), ) async def astream( @@ -223,22 +223,22 @@ class BaseChatModel(BaseLanguageModel[BaseMessageChunk], ABC): dumpd(self), [messages], invocation_params=params, options=options ) try: - message: Optional[BaseMessageChunk] = None + generation: Optional[ChatGenerationChunk] = None async for chunk in self._astream( messages, stop=stop, run_manager=run_manager, **kwargs ): yield chunk.message - if message is None: - message = chunk.message + if generation is None: + generation = chunk else: - message += chunk.message - assert message is not None + generation += chunk + assert generation is not None except (KeyboardInterrupt, Exception) as e: await run_manager.on_llm_error(e) raise e else: await run_manager.on_llm_end( - LLMResult(generations=[[ChatGeneration(message=message)]]), + LLMResult(generations=[[generation]]), ) # --- Custom methods --- diff --git a/libs/langchain/langchain/chat_models/litellm.py b/libs/langchain/langchain/chat_models/litellm.py index d23549dc5..f429c3221 100644 --- a/libs/langchain/langchain/chat_models/litellm.py +++ b/libs/langchain/langchain/chat_models/litellm.py @@ -190,9 +190,6 @@ def _convert_message_to_dict(message: BaseMessage) -> dict: class ChatLiteLLM(BaseChatModel): """`LiteLLM` Chat models API. - To use you must have the google.generativeai Python package installed and - either: - 1. The ``GOOGLE_API_KEY``` environment variable set with your API key, or 2. Pass your API key using the google_api_key kwarg to the ChatGoogle constructor. @@ -206,7 +203,8 @@ class ChatLiteLLM(BaseChatModel): """ client: Any #: :meta private: - model_name: str = "gpt-3.5-turbo" + model: str = "gpt-3.5-turbo" + model_name: Optional[str] = None """Model name to use.""" openai_api_key: Optional[str] = None azure_api_key: Optional[str] = None @@ -217,8 +215,9 @@ class ChatLiteLLM(BaseChatModel): streaming: bool = False api_base: Optional[str] = None organization: Optional[str] = None + custom_llm_provider: Optional[str] = None request_timeout: Optional[Union[float, Tuple[float, float]]] = None - temperature: Optional[float] = None + temperature: Optional[float] = 1 model_kwargs: Dict[str, Any] = Field(default_factory=dict) """Run inference with this temperature. Must by in the closed interval [0.0, 1.0].""" @@ -238,8 +237,11 @@ class ChatLiteLLM(BaseChatModel): @property def _default_params(self) -> Dict[str, Any]: """Get the default parameters for calling OpenAI API.""" + set_model_value = self.model + if self.model_name is not None: + set_model_value = self.model_name return { - "model": self.model_name, + "model": set_model_value, "force_timeout": self.request_timeout, "max_tokens": self.max_tokens, "stream": self.streaming, @@ -251,10 +253,13 @@ class ChatLiteLLM(BaseChatModel): @property def _client_params(self) -> Dict[str, Any]: """Get the parameters used for the openai client.""" + set_model_value = self.model + if self.model_name is not None: + set_model_value = self.model_name self.client.api_base = self.api_base self.client.organization = self.organization creds: Dict[str, Any] = { - "model": self.model_name, + "model": set_model_value, "force_timeout": self.request_timeout, } return {**self._default_params, **creds} @@ -347,7 +352,10 @@ class ChatLiteLLM(BaseChatModel): ) generations.append(gen) token_usage = response.get("usage", {}) - llm_output = {"token_usage": token_usage, "model_name": self.model_name} + set_model_value = self.model + if self.model_name is not None: + set_model_value = self.model_name + llm_output = {"token_usage": token_usage, "model": set_model_value} return ChatResult(generations=generations, llm_output=llm_output) def _create_message_dicts( @@ -437,8 +445,11 @@ class ChatLiteLLM(BaseChatModel): @property def _identifying_params(self) -> Dict[str, Any]: """Get the identifying parameters.""" + set_model_value = self.model + if self.model_name is not None: + set_model_value = self.model_name return { - "model_name": self.model_name, + "model": set_model_value, "temperature": self.temperature, "top_p": self.top_p, "top_k": self.top_k, diff --git a/libs/langchain/langchain/chat_models/ollama.py b/libs/langchain/langchain/chat_models/ollama.py new file mode 100644 index 000000000..a1fdcd0ac --- /dev/null +++ b/libs/langchain/langchain/chat_models/ollama.py @@ -0,0 +1,122 @@ +import json +from typing import Any, Iterator, List, Optional + +from langchain.callbacks.manager import ( + CallbackManagerForLLMRun, +) +from langchain.chat_models.base import BaseChatModel +from langchain.llms.ollama import _OllamaCommon +from langchain.schema import ChatResult +from langchain.schema.messages import ( + AIMessage, + AIMessageChunk, + BaseMessage, + ChatMessage, + HumanMessage, + SystemMessage, +) +from langchain.schema.output import ChatGeneration, ChatGenerationChunk + + +def _stream_response_to_chat_generation_chunk( + stream_response: str, +) -> ChatGenerationChunk: + """Convert a stream response to a generation chunk.""" + parsed_response = json.loads(stream_response) + generation_info = parsed_response if parsed_response.get("done") is True else None + return ChatGenerationChunk( + message=AIMessageChunk(content=parsed_response.get("response", "")), + generation_info=generation_info, + ) + + +class ChatOllama(BaseChatModel, _OllamaCommon): + """Ollama locally runs large language models. + + To use, follow the instructions at https://ollama.ai/. + + Example: + .. code-block:: python + + from langchain.chat_models import ChatOllama + ollama = ChatOllama(model="llama2") + """ + + @property + def _llm_type(self) -> str: + """Return type of chat model.""" + return "ollama-chat" + + @property + def lc_serializable(self) -> bool: + return True + + def _format_message_as_text(self, message: BaseMessage) -> str: + if isinstance(message, ChatMessage): + message_text = f"\n\n{message.role.capitalize()}: {message.content}" + elif isinstance(message, HumanMessage): + message_text = f"[INST] {message.content} [/INST]" + elif isinstance(message, AIMessage): + message_text = f"{message.content}" + elif isinstance(message, SystemMessage): + message_text = f"<> {message.content} <>" + else: + raise ValueError(f"Got unknown type {message}") + return message_text + + def _format_messages_as_text(self, messages: List[BaseMessage]) -> str: + return "\n".join( + [self._format_message_as_text(message) for message in messages] + ) + + def _generate( + self, + messages: List[BaseMessage], + stop: Optional[List[str]] = None, + run_manager: Optional[CallbackManagerForLLMRun] = None, + **kwargs: Any, + ) -> ChatResult: + """Call out to Ollama's generate endpoint. + + Args: + messages: The list of base messages to pass into the model. + stop: Optional list of stop words to use when generating. + + Returns: + Chat generations from the model + + Example: + .. code-block:: python + + response = ollama([ + HumanMessage(content="Tell me about the history of AI") + ]) + """ + + prompt = self._format_messages_as_text(messages) + final_chunk = super()._stream_with_aggregation( + prompt, stop=stop, run_manager=run_manager, verbose=self.verbose, **kwargs + ) + chat_generation = ChatGeneration( + message=AIMessage(content=final_chunk.text), + generation_info=final_chunk.generation_info, + ) + return ChatResult(generations=[chat_generation]) + + def _stream( + self, + messages: List[BaseMessage], + stop: Optional[List[str]] = None, + run_manager: Optional[CallbackManagerForLLMRun] = None, + **kwargs: Any, + ) -> Iterator[ChatGenerationChunk]: + prompt = self._format_messages_as_text(messages) + for stream_resp in self._create_stream(prompt, stop, **kwargs): + if stream_resp: + chunk = _stream_response_to_chat_generation_chunk(stream_resp) + yield chunk + if run_manager: + run_manager.on_llm_new_token( + chunk.text, + verbose=self.verbose, + ) diff --git a/libs/langchain/langchain/chat_models/openai.py b/libs/langchain/langchain/chat_models/openai.py index c2c7880ed..5d944852d 100644 --- a/libs/langchain/langchain/chat_models/openai.py +++ b/libs/langchain/langchain/chat_models/openai.py @@ -307,12 +307,18 @@ class ChatOpenAI(BaseChatModel): ): if len(chunk["choices"]) == 0: continue - delta = chunk["choices"][0]["delta"] - chunk = _convert_delta_to_message_chunk(delta, default_chunk_class) + choice = chunk["choices"][0] + chunk = _convert_delta_to_message_chunk( + choice["delta"], default_chunk_class + ) + finish_reason = choice.get("finish_reason") + generation_info = ( + dict(finish_reason=finish_reason) if finish_reason is not None else None + ) default_chunk_class = chunk.__class__ - yield ChatGenerationChunk(message=chunk) + yield ChatGenerationChunk(message=chunk, generation_info=generation_info) if run_manager: - run_manager.on_llm_new_token(chunk.content) + run_manager.on_llm_new_token(chunk.content, chunk=chunk) def _generate( self, @@ -392,7 +398,7 @@ class ChatOpenAI(BaseChatModel): default_chunk_class = chunk.__class__ yield ChatGenerationChunk(message=chunk, generation_info=generation_info) if run_manager: - await run_manager.on_llm_new_token(chunk.content) + await run_manager.on_llm_new_token(token=chunk.content, chunk=chunk) async def _agenerate( self, diff --git a/libs/langchain/langchain/document_loaders/__init__.py b/libs/langchain/langchain/document_loaders/__init__.py index 195b586ac..ab9d37191 100644 --- a/libs/langchain/langchain/document_loaders/__init__.py +++ b/libs/langchain/langchain/document_loaders/__init__.py @@ -31,6 +31,7 @@ from langchain.document_loaders.airtable import AirtableLoader from langchain.document_loaders.apify_dataset import ApifyDatasetLoader from langchain.document_loaders.arcgis_loader import ArcGISLoader from langchain.document_loaders.arxiv import ArxivLoader +from langchain.document_loaders.assemblyai import AssemblyAIAudioTranscriptLoader from langchain.document_loaders.async_html import AsyncHtmlLoader from langchain.document_loaders.azlyrics import AZLyricsLoader from langchain.document_loaders.azure_blob_storage_container import ( @@ -132,6 +133,7 @@ from langchain.document_loaders.pdf import ( PyPDFLoader, UnstructuredPDFLoader, ) +from langchain.document_loaders.polars_dataframe import PolarsDataFrameLoader from langchain.document_loaders.powerpoint import UnstructuredPowerPointLoader from langchain.document_loaders.psychic import PsychicLoader from langchain.document_loaders.pubmed import PubMedLoader @@ -218,6 +220,7 @@ __all__ = [ "ApifyDatasetLoader", "ArcGISLoader", "ArxivLoader", + "AssemblyAIAudioTranscriptLoader", "AsyncHtmlLoader", "AzureBlobStorageContainerLoader", "AzureBlobStorageFileLoader", @@ -299,6 +302,7 @@ __all__ = [ "PDFPlumberLoader", "PagedPDFSplitter", "PlaywrightURLLoader", + "PolarsDataFrameLoader", "PsychicLoader", "PubMedLoader", "PyMuPDFLoader", diff --git a/libs/langchain/langchain/document_loaders/assemblyai.py b/libs/langchain/langchain/document_loaders/assemblyai.py new file mode 100644 index 000000000..d7b7ecb9b --- /dev/null +++ b/libs/langchain/langchain/document_loaders/assemblyai.py @@ -0,0 +1,111 @@ +from __future__ import annotations + +from enum import Enum +from typing import TYPE_CHECKING, List, Optional + +from langchain.docstore.document import Document +from langchain.document_loaders.base import BaseLoader + +if TYPE_CHECKING: + import assemblyai + + +class TranscriptFormat(Enum): + """Transcript format to use for the document loader.""" + + TEXT = "text" + """One document with the transcription text""" + SENTENCES = "sentences" + """Multiple documents, splits the transcription by each sentence""" + PARAGRAPHS = "paragraphs" + """Multiple documents, splits the transcription by each paragraph""" + SUBTITLES_SRT = "subtitles_srt" + """One document with the transcript exported in SRT subtitles format""" + SUBTITLES_VTT = "subtitles_vtt" + """One document with the transcript exported in VTT subtitles format""" + + +class AssemblyAIAudioTranscriptLoader(BaseLoader): + """ + Loader for AssemblyAI audio transcripts. + + It uses the AssemblyAI API to transcribe audio files + and loads the transcribed text into one or more Documents, + depending on the specified format. + + To use, you should have the ``assemblyai`` python package installed, and the + environment variable ``ASSEMBLYAI_API_KEY`` set with your API key. + Alternatively, the API key can also be passed as an argument. + + Audio files can be specified via an URL or a local file path. + """ + + def __init__( + self, + file_path: str, + *, + transcript_format: TranscriptFormat = TranscriptFormat.TEXT, + config: Optional[assemblyai.TranscriptionConfig] = None, + api_key: Optional[str] = None, + ): + """ + Initializes the AssemblyAI AudioTranscriptLoader. + + Args: + file_path: An URL or a local file path. + transcript_format: Transcript format to use. + See class ``TranscriptFormat`` for more info. + config: Transcription options and features. If ``None`` is given, + the Transcriber's default configuration will be used. + api_key: AssemblyAI API key. + """ + try: + import assemblyai + except ImportError: + raise ImportError( + "Could not import assemblyai python package. " + "Please install it with `pip install assemblyai`." + ) + if api_key is not None: + assemblyai.settings.api_key = api_key + + self.file_path = file_path + self.transcript_format = transcript_format + self.transcriber = assemblyai.Transcriber(config=config) + + def load(self) -> List[Document]: + """Transcribes the audio file and loads the transcript into documents. + + It uses the AssemblyAI API to transcribe the audio file and blocks until + the transcription is finished. + """ + transcript = self.transcriber.transcribe(self.file_path) + # This will raise a ValueError if no API key is set. + + if transcript.error: + raise ValueError(f"Could not transcribe file: {transcript.error}") + + if self.transcript_format == TranscriptFormat.TEXT: + return [ + Document( + page_content=transcript.text, metadata=transcript.json_response + ) + ] + elif self.transcript_format == TranscriptFormat.SENTENCES: + sentences = transcript.get_sentences() + return [ + Document(page_content=s.text, metadata=s.dict(exclude={"text"})) + for s in sentences + ] + elif self.transcript_format == TranscriptFormat.PARAGRAPHS: + paragraphs = transcript.get_paragraphs() + return [ + Document(page_content=p.text, metadata=p.dict(exclude={"text"})) + for p in paragraphs + ] + elif self.transcript_format == TranscriptFormat.SUBTITLES_SRT: + return [Document(page_content=transcript.export_subtitles_srt())] + elif self.transcript_format == TranscriptFormat.SUBTITLES_VTT: + return [Document(page_content=transcript.export_subtitles_vtt())] + else: + raise ValueError("Unknown transcript format.") diff --git a/libs/langchain/langchain/document_loaders/concurrent.py b/libs/langchain/langchain/document_loaders/concurrent.py index 2044dcc7f..bb55d6700 100644 --- a/libs/langchain/langchain/document_loaders/concurrent.py +++ b/libs/langchain/langchain/document_loaders/concurrent.py @@ -44,6 +44,7 @@ class ConcurrentLoader(GenericLoader): path: _PathLike, *, glob: str = "**/[!.]*", + exclude: Sequence[str] = (), suffixes: Optional[Sequence[str]] = None, show_progress: bool = False, parser: Union[DEFAULT, BaseBlobParser] = "default", @@ -52,12 +53,28 @@ class ConcurrentLoader(GenericLoader): """ Create a concurrent generic document loader using a filesystem blob loader. + + + Args: + path: The path to the directory to load documents from. + glob: The glob pattern to use to find documents. + suffixes: The suffixes to use to filter documents. If None, all files + matching the glob will be loaded. + exclude: A list of patterns to exclude from the loader. + show_progress: Whether to show a progress bar or not (requires tqdm). + Proxies to the file system loader. + parser: A blob parser which knows how to parse blobs into documents + num_workers: Max number of concurrent workers to use. """ blob_loader = FileSystemBlobLoader( - path, glob=glob, suffixes=suffixes, show_progress=show_progress + path, + glob=glob, + exclude=exclude, + suffixes=suffixes, + show_progress=show_progress, ) if isinstance(parser, str): blob_parser = get_parser(parser) else: blob_parser = parser - return cls(blob_loader, blob_parser, num_workers) + return cls(blob_loader, blob_parser, num_workers=num_workers) diff --git a/libs/langchain/langchain/document_loaders/confluence.py b/libs/langchain/langchain/document_loaders/confluence.py index a1151c08e..5a12e8984 100644 --- a/libs/langchain/langchain/document_loaders/confluence.py +++ b/libs/langchain/langchain/document_loaders/confluence.py @@ -20,16 +20,14 @@ logger = logging.getLogger(__name__) class ContentFormat(str, Enum): """Enumerator of the content formats of Confluence page.""" + EDITOR = "body.editor" + EXPORT_VIEW = "body.export_view" + ANONYMOUS_EXPORT_VIEW = "body.anonymous_export_view" STORAGE = "body.storage" VIEW = "body.view" def get_content(self, page: dict) -> str: - if self == ContentFormat.STORAGE: - return page["body"]["storage"]["value"] - elif self == ContentFormat.VIEW: - return page["body"]["view"]["value"] - - raise ValueError("unknown content format") + return page["body"][self.name.lower()]["value"] class ConfluenceLoader(BaseLoader): @@ -52,7 +50,10 @@ class ConfluenceLoader(BaseLoader): raw XML representation for storage. The view format is the HTML representation for viewing with macros are rendered as though it is viewed by users. You can pass a enum `content_format` argument to `load()` to specify the content format, this is - set to `ContentFormat.STORAGE` by default. + set to `ContentFormat.STORAGE` by default, the supported values are: + `ContentFormat.EDITOR`, `ContentFormat.EXPORT_VIEW`, + `ContentFormat.ANONYMOUS_EXPORT_VIEW`, `ContentFormat.STORAGE`, + and `ContentFormat.VIEW`. Hint: space_key and page_id can both be found in the URL of a page in Confluence - https://yoursite.atlassian.com/wiki/spaces//pages/ @@ -238,7 +239,11 @@ class ConfluenceLoader(BaseLoader): :type include_attachments: bool, optional :param include_comments: defaults to False :type include_comments: bool, optional - :param content_format: Specify content format, defaults to ContentFormat.STORAGE + :param content_format: Specify content format, defaults to + ContentFormat.STORAGE, the supported values are: + `ContentFormat.EDITOR`, `ContentFormat.EXPORT_VIEW`, + `ContentFormat.ANONYMOUS_EXPORT_VIEW`, + `ContentFormat.STORAGE`, and `ContentFormat.VIEW`. :type content_format: ContentFormat :param limit: Maximum number of pages to retrieve per request, defaults to 50 :type limit: int, optional @@ -333,7 +338,9 @@ class ConfluenceLoader(BaseLoader): ), before_sleep=before_sleep_log(logger, logging.WARNING), )(self.confluence.get_page_by_id) - page = get_page(page_id=page_id, expand=content_format.value) + page = get_page( + page_id=page_id, expand=f"{content_format.value},version" + ) if not include_restricted_content and not self.is_public_page(page): continue doc = self.process_page( @@ -473,14 +480,12 @@ class ConfluenceLoader(BaseLoader): else: attachment_texts = [] + content = content_format.get_content(page) if keep_markdown_format: # Use markdownify to keep the page Markdown style - text = markdownify( - page["body"]["storage"]["value"], heading_style="ATX" - ) + "".join(attachment_texts) + text = markdownify(content, heading_style="ATX") + "".join(attachment_texts) else: - content = content_format.get_content(page) if keep_newlines: text = BeautifulSoup( content.replace("

    ", "\n

    ").replace("
    ", "\n"), "lxml" @@ -502,13 +507,18 @@ class ConfluenceLoader(BaseLoader): ] text = text + "".join(comment_texts) + metadata = { + "title": page["title"], + "id": page["id"], + "source": self.base_url.strip("/") + page["_links"]["webui"], + } + + if "version" in page and "when" in page["version"]: + metadata["when"] = page["version"]["when"] + return Document( page_content=text, - metadata={ - "title": page["title"], - "id": page["id"], - "source": self.base_url.strip("/") + page["_links"]["webui"], - }, + metadata=metadata, ) def process_attachment( diff --git a/libs/langchain/langchain/document_loaders/dataframe.py b/libs/langchain/langchain/document_loaders/dataframe.py index 0476f6a29..261426a3c 100644 --- a/libs/langchain/langchain/document_loaders/dataframe.py +++ b/libs/langchain/langchain/document_loaders/dataframe.py @@ -4,23 +4,15 @@ from langchain.docstore.document import Document from langchain.document_loaders.base import BaseLoader -class DataFrameLoader(BaseLoader): - """Load `Pandas` DataFrame.""" - - def __init__(self, data_frame: Any, page_content_column: str = "text"): +class BaseDataFrameLoader(BaseLoader): + def __init__(self, data_frame: Any, *, page_content_column: str = "text"): """Initialize with dataframe object. Args: - data_frame: Pandas DataFrame object. + data_frame: DataFrame object. page_content_column: Name of the column containing the page content. Defaults to "text". """ - import pandas as pd - - if not isinstance(data_frame, pd.DataFrame): - raise ValueError( - f"Expected data_frame to be a pd.DataFrame, got {type(data_frame)}" - ) self.data_frame = data_frame self.page_content_column = page_content_column @@ -36,3 +28,28 @@ class DataFrameLoader(BaseLoader): def load(self) -> List[Document]: """Load full dataframe.""" return list(self.lazy_load()) + + +class DataFrameLoader(BaseDataFrameLoader): + """Load `Pandas` DataFrame.""" + + def __init__(self, data_frame: Any, page_content_column: str = "text"): + """Initialize with dataframe object. + + Args: + data_frame: Pandas DataFrame object. + page_content_column: Name of the column containing the page content. + Defaults to "text". + """ + try: + import pandas as pd + except ImportError as e: + raise ImportError( + "Unable to import pandas, please install with `pip install pandas`." + ) from e + + if not isinstance(data_frame, pd.DataFrame): + raise ValueError( + f"Expected data_frame to be a pd.DataFrame, got {type(data_frame)}" + ) + super().__init__(data_frame, page_content_column=page_content_column) diff --git a/libs/langchain/langchain/document_loaders/docugami.py b/libs/langchain/langchain/document_loaders/docugami.py index 5eeaf483f..0b94472a9 100644 --- a/libs/langchain/langchain/document_loaders/docugami.py +++ b/libs/langchain/langchain/document_loaders/docugami.py @@ -16,6 +16,7 @@ TABLE_NAME = "{http://www.w3.org/1999/xhtml}table" XPATH_KEY = "xpath" DOCUMENT_ID_KEY = "id" +DOCUMENT_SOURCE_KEY = "source" DOCUMENT_NAME_KEY = "name" STRUCTURE_KEY = "structure" TAG_KEY = "tag" @@ -143,8 +144,9 @@ class DocugamiLoader(BaseLoader, BaseModel): """Create a Document from a node and text.""" metadata = { XPATH_KEY: _xpath_for_chunk(node), - DOCUMENT_ID_KEY: document["id"], - DOCUMENT_NAME_KEY: document["name"], + DOCUMENT_ID_KEY: document[DOCUMENT_ID_KEY], + DOCUMENT_NAME_KEY: document[DOCUMENT_NAME_KEY], + DOCUMENT_SOURCE_KEY: document[DOCUMENT_NAME_KEY], STRUCTURE_KEY: node.attrib.get("structure", ""), TAG_KEY: re.sub(r"\{.*\}", "", node.tag), } diff --git a/libs/langchain/langchain/document_loaders/generic.py b/libs/langchain/langchain/document_loaders/generic.py index 2728e0ae9..26d7577a3 100644 --- a/libs/langchain/langchain/document_loaders/generic.py +++ b/libs/langchain/langchain/document_loaders/generic.py @@ -105,6 +105,7 @@ class GenericLoader(BaseLoader): path: _PathLike, *, glob: str = "**/[!.]*", + exclude: Sequence[str] = (), suffixes: Optional[Sequence[str]] = None, show_progress: bool = False, parser: Union[DEFAULT, BaseBlobParser] = "default", @@ -116,6 +117,7 @@ class GenericLoader(BaseLoader): glob: The glob pattern to use to find documents. suffixes: The suffixes to use to filter documents. If None, all files matching the glob will be loaded. + exclude: A list of patterns to exclude from the loader. show_progress: Whether to show a progress bar or not (requires tqdm). Proxies to the file system loader. parser: A blob parser which knows how to parse blobs into documents @@ -124,7 +126,11 @@ class GenericLoader(BaseLoader): A generic document loader. """ blob_loader = FileSystemBlobLoader( - path, glob=glob, suffixes=suffixes, show_progress=show_progress + path, + glob=glob, + exclude=exclude, + suffixes=suffixes, + show_progress=show_progress, ) if isinstance(parser, str): blob_parser = get_parser(parser) diff --git a/libs/langchain/langchain/document_loaders/googledrive.py b/libs/langchain/langchain/document_loaders/googledrive.py index 881bafbd5..513f9bba7 100644 --- a/libs/langchain/langchain/document_loaders/googledrive.py +++ b/libs/langchain/langchain/document_loaders/googledrive.py @@ -200,7 +200,11 @@ class GoogleDriveLoader(BaseLoader, BaseModel): creds = self._load_credentials() service = build("drive", "v3", credentials=creds) - file = service.files().get(fileId=id, supportsAllDrives=True).execute() + file = ( + service.files() + .get(fileId=id, supportsAllDrives=True, fields="modifiedTime,name") + .execute() + ) request = service.files().export_media(fileId=id, mimeType="text/plain") fh = BytesIO() downloader = MediaIoBaseDownload(fh, request) @@ -219,6 +223,7 @@ class GoogleDriveLoader(BaseLoader, BaseModel): metadata = { "source": f"https://docs.google.com/document/d/{id}/edit", "title": f"{file.get('name')}", + "when": f"{file.get('modifiedTime')}", } return Document(page_content=text, metadata=metadata) diff --git a/libs/langchain/langchain/document_loaders/mhtml.py b/libs/langchain/langchain/document_loaders/mhtml.py index c7b7f55ec..efe1030c2 100644 --- a/libs/langchain/langchain/document_loaders/mhtml.py +++ b/libs/langchain/langchain/document_loaders/mhtml.py @@ -52,7 +52,7 @@ class MHTMLLoader(BaseLoader): message = email.message_from_string(f.read()) parts = message.get_payload() - if type(parts) is not list: + if not isinstance(parts, list): parts = [message] for part in parts: diff --git a/libs/langchain/langchain/document_loaders/parsers/__init__.py b/libs/langchain/langchain/document_loaders/parsers/__init__.py index 5d4843e9a..e2233e5cc 100644 --- a/libs/langchain/langchain/document_loaders/parsers/__init__.py +++ b/libs/langchain/langchain/document_loaders/parsers/__init__.py @@ -1,4 +1,5 @@ from langchain.document_loaders.parsers.audio import OpenAIWhisperParser +from langchain.document_loaders.parsers.docai import DocAIParser from langchain.document_loaders.parsers.grobid import GrobidParser from langchain.document_loaders.parsers.html import BS4HTMLParser from langchain.document_loaders.parsers.language import LanguageParser @@ -12,6 +13,7 @@ from langchain.document_loaders.parsers.pdf import ( __all__ = [ "BS4HTMLParser", + "DocAIParser", "GrobidParser", "LanguageParser", "OpenAIWhisperParser", diff --git a/libs/langchain/langchain/document_loaders/parsers/docai.py b/libs/langchain/langchain/document_loaders/parsers/docai.py new file mode 100644 index 000000000..dd6913ac6 --- /dev/null +++ b/libs/langchain/langchain/document_loaders/parsers/docai.py @@ -0,0 +1,292 @@ +"""Module contains a PDF parser based on DocAI from Google Cloud. + +You need to install two libraries to use this parser: +pip install google-cloud-documentai +pip install google-cloud-documentai-toolbox +""" +import logging +import time +from dataclasses import dataclass +from typing import TYPE_CHECKING, Iterator, List, Optional, Sequence + +from langchain.docstore.document import Document +from langchain.document_loaders.base import BaseBlobParser +from langchain.document_loaders.blob_loaders import Blob +from langchain.utils.iter import batch_iterate + +if TYPE_CHECKING: + from google.api_core.operation import Operation + from google.cloud.documentai import DocumentProcessorServiceClient + + +logger = logging.getLogger(__name__) + + +@dataclass +class DocAIParsingResults: + """A dataclass to store DocAI parsing results.""" + + source_path: str + parsed_path: str + + +class DocAIParser(BaseBlobParser): + def __init__( + self, + *, + client: Optional["DocumentProcessorServiceClient"] = None, + location: Optional[str] = None, + gcs_output_path: Optional[str] = None, + processor_name: Optional[str] = None, + ): + """Initializes the parser. + + Args: + client: a DocumentProcessorServiceClient to use + location: a GCP location where a DOcAI parser is located + gcs_output_path: a path on GCS to store parsing results + processor_name: name of a processor + + You should provide either a client or location (and then a client + would be instantiated). + """ + if client and location: + raise ValueError( + "You should provide either a client or a location but not both " + "of them." + ) + if not client and not location: + raise ValueError( + "You must specify either a client or a location to instantiate " + "a client." + ) + + self._gcs_output_path = gcs_output_path + self._processor_name = processor_name + if client: + self._client = client + else: + try: + from google.api_core.client_options import ClientOptions + from google.cloud.documentai import DocumentProcessorServiceClient + except ImportError: + raise ImportError( + "documentai package not found, please install it with" + " `pip install google-cloud-documentai`" + ) + options = ClientOptions( + api_endpoint=f"{location}-documentai.googleapis.com" + ) + self._client = DocumentProcessorServiceClient(client_options=options) + + def lazy_parse(self, blob: Blob) -> Iterator[Document]: + """Parses a blob lazily. + + Args: + blobs: a Blob to parse + + This is a long-running operations! A recommended way is to batch + documents together and use `batch_parse` method. + """ + yield from self.batch_parse([blob], gcs_output_path=self._gcs_output_path) + + def batch_parse( + self, + blobs: Sequence[Blob], + gcs_output_path: Optional[str] = None, + timeout_sec: int = 3600, + check_in_interval_sec: int = 60, + ) -> Iterator[Document]: + """Parses a list of blobs lazily. + + Args: + blobs: a list of blobs to parse + gcs_output_path: a path on GCS to store parsing results + timeout_sec: a timeout to wait for DocAI to complete, in seconds + check_in_interval_sec: an interval to wait until next check + whether parsing operations have been completed, in seconds + This is a long-running operations! A recommended way is to decouple + parsing from creating Langchain Documents: + >>> operations = parser.docai_parse(blobs, gcs_path) + >>> parser.is_running(operations) + You can get operations names and save them: + >>> names = [op.operation.name for op in operations] + And when all operations are finished, you can use their results: + >>> operations = parser.operations_from_names(operation_names) + >>> results = parser.get_results(operations) + >>> docs = parser.parse_from_results(results) + """ + output_path = gcs_output_path if gcs_output_path else self._gcs_output_path + if output_path is None: + raise ValueError("An output path on GCS should be provided!") + operations = self.docai_parse(blobs, gcs_output_path=output_path) + operation_names = [op.operation.name for op in operations] + logger.debug( + f"Started parsing with DocAI, submitted operations {operation_names}" + ) + is_running, time_elapsed = True, 0 + while is_running: + is_running = self.is_running(operations) + if not is_running: + break + time.sleep(check_in_interval_sec) + time_elapsed += check_in_interval_sec + if time_elapsed > timeout_sec: + raise ValueError( + "Timeout exceeded! Check operations " f"{operation_names} later!" + ) + logger.debug(".") + + results = self.get_results(operations=operations) + yield from self.parse_from_results(results) + + def parse_from_results( + self, results: List[DocAIParsingResults] + ) -> Iterator[Document]: + try: + from google.cloud.documentai_toolbox.wrappers.document import _get_shards + from google.cloud.documentai_toolbox.wrappers.page import _text_from_layout + except ImportError: + raise ImportError( + "documentai_toolbox package not found, please install it with" + " `pip install google-cloud-documentai-toolbox`" + ) + for result in results: + output_gcs = result.parsed_path.split("/") + gcs_bucket_name = output_gcs[2] + gcs_prefix = "/".join(output_gcs[3:]) + "/" + shards = _get_shards(gcs_bucket_name, gcs_prefix) + docs, page_number = [], 1 + for shard in shards: + for page in shard.pages: + docs.append( + Document( + page_content=_text_from_layout(page.layout, shard.text), + metadata={ + "page": page_number, + "source": result.source_path, + }, + ) + ) + page_number += 1 + yield from docs + + def operations_from_names(self, operation_names: List[str]) -> List["Operation"]: + """Initializes Long-Running Operations from their names.""" + try: + from google.longrunning.operations_pb2 import ( + GetOperationRequest, # type: ignore + ) + except ImportError: + raise ImportError( + "documentai package not found, please install it with" + " `pip install gapic-google-longrunning`" + ) + + operations = [] + for name in operation_names: + request = GetOperationRequest(name=name) + operations.append(self._client.get_operation(request=request)) + return operations + + def is_running(self, operations: List["Operation"]) -> bool: + for op in operations: + if not op.done(): + return True + return False + + def docai_parse( + self, + blobs: Sequence[Blob], + *, + gcs_output_path: Optional[str] = None, + batch_size: int = 4000, + enable_native_pdf_parsing: bool = True, + ) -> List["Operation"]: + """Runs Google DocAI PDF parser on a list of blobs. + + Args: + blobs: a list of blobs to be parsed + gcs_output_path: a path (folder) on GCS to store results + batch_size: amount of documents per batch + enable_native_pdf_parsing: a config option for the parser + + DocAI has a limit on the amount of documents per batch, that's why split a + batch into mini-batches. Parsing is an async long-running operation + on Google Cloud and results are stored in a output GCS bucket. + """ + try: + from google.cloud import documentai + from google.cloud.documentai_v1.types import OcrConfig, ProcessOptions + except ImportError: + raise ImportError( + "documentai package not found, please install it with" + " `pip install google-cloud-documentai`" + ) + + if not self._processor_name: + raise ValueError("Processor name is not defined, aborting!") + output_path = gcs_output_path if gcs_output_path else self._gcs_output_path + if output_path is None: + raise ValueError("An output path on GCS should be provided!") + + operations = [] + for batch in batch_iterate(size=batch_size, iterable=blobs): + documents = [] + for blob in batch: + gcs_document = documentai.GcsDocument( + gcs_uri=blob.path, mime_type="application/pdf" + ) + documents.append(gcs_document) + gcs_documents = documentai.GcsDocuments(documents=documents) + + input_config = documentai.BatchDocumentsInputConfig( + gcs_documents=gcs_documents + ) + + gcs_output_config = documentai.DocumentOutputConfig.GcsOutputConfig( + gcs_uri=output_path, field_mask=None + ) + output_config = documentai.DocumentOutputConfig( + gcs_output_config=gcs_output_config + ) + + if enable_native_pdf_parsing: + process_options = ProcessOptions( + ocr_config=OcrConfig( + enable_native_pdf_parsing=enable_native_pdf_parsing + ) + ) + else: + process_options = ProcessOptions() + request = documentai.BatchProcessRequest( + name=self._processor_name, + input_documents=input_config, + document_output_config=output_config, + process_options=process_options, + ) + operations.append(self._client.batch_process_documents(request)) + return operations + + def get_results(self, operations: List["Operation"]) -> List[DocAIParsingResults]: + try: + from google.cloud.documentai_v1 import BatchProcessMetadata + except ImportError: + raise ImportError( + "documentai package not found, please install it with" + " `pip install google-cloud-documentai`" + ) + + results = [] + for op in operations: + if isinstance(op.metadata, BatchProcessMetadata): + metadata = op.metadata + else: + metadata = BatchProcessMetadata.deserialize(op.metadata.value) + for status in metadata.individual_process_statuses: + source = status.input_gcs_source + output = status.output_gcs_destination + results.append( + DocAIParsingResults(source_path=source, parsed_path=output) + ) + return results diff --git a/libs/langchain/langchain/document_loaders/polars_dataframe.py b/libs/langchain/langchain/document_loaders/polars_dataframe.py new file mode 100644 index 000000000..6ece942df --- /dev/null +++ b/libs/langchain/langchain/document_loaders/polars_dataframe.py @@ -0,0 +1,32 @@ +from typing import Any, Iterator + +from langchain.docstore.document import Document +from langchain.document_loaders.dataframe import BaseDataFrameLoader + + +class PolarsDataFrameLoader(BaseDataFrameLoader): + """Load `Polars` DataFrame.""" + + def __init__(self, data_frame: Any, *, page_content_column: str = "text"): + """Initialize with dataframe object. + + Args: + data_frame: Polars DataFrame object. + page_content_column: Name of the column containing the page content. + Defaults to "text". + """ + import polars as pl + + if not isinstance(data_frame, pl.DataFrame): + raise ValueError( + f"Expected data_frame to be a pl.DataFrame, got {type(data_frame)}" + ) + super().__init__(data_frame, page_content_column=page_content_column) + + def lazy_load(self) -> Iterator[Document]: + """Lazy load records from dataframe.""" + + for row in self.data_frame.iter_rows(named=True): + text = row[self.page_content_column] + row.pop(self.page_content_column) + yield Document(page_content=text, metadata=row) diff --git a/libs/langchain/langchain/document_loaders/xorbits.py b/libs/langchain/langchain/document_loaders/xorbits.py index bcc4e680f..723e9dc1b 100644 --- a/libs/langchain/langchain/document_loaders/xorbits.py +++ b/libs/langchain/langchain/document_loaders/xorbits.py @@ -1,10 +1,9 @@ -from typing import Any, Iterator, List +from typing import Any -from langchain.docstore.document import Document -from langchain.document_loaders.base import BaseLoader +from langchain.document_loaders.dataframe import BaseDataFrameLoader -class XorbitsLoader(BaseLoader): +class XorbitsLoader(BaseDataFrameLoader): """Load `Xorbits` DataFrame.""" def __init__(self, data_frame: Any, page_content_column: str = "text"): @@ -30,17 +29,4 @@ class XorbitsLoader(BaseLoader): f"Expected data_frame to be a xorbits.pandas.DataFrame, \ got {type(data_frame)}" ) - self.data_frame = data_frame - self.page_content_column = page_content_column - - def lazy_load(self) -> Iterator[Document]: - """Lazy load records from dataframe.""" - for _, row in self.data_frame.iterrows(): - text = row[self.page_content_column] - metadata = row.to_dict() - metadata.pop(self.page_content_column) - yield Document(page_content=text, metadata=metadata) - - def load(self) -> List[Document]: - """Load full dataframe.""" - return list(self.lazy_load()) + super().__init__(data_frame, page_content_column=page_content_column) diff --git a/libs/langchain/langchain/embeddings/mosaicml.py b/libs/langchain/langchain/embeddings/mosaicml.py index 8346bf7cf..6a3c3e11c 100644 --- a/libs/langchain/langchain/embeddings/mosaicml.py +++ b/libs/langchain/langchain/embeddings/mosaicml.py @@ -79,14 +79,8 @@ class MosaicMLInstructorEmbeddings(BaseModel, Embeddings): raise ValueError(f"Error raised by inference endpoint: {e}") try: - parsed_response = response.json() - - if "error" in parsed_response: - # if we get rate limited, try sleeping for 1 second - if ( - not is_retry - and "rate limit exceeded" in parsed_response["error"].lower() - ): + if response.status_code == 429: + if not is_retry: import time time.sleep(self.retry_sleep) @@ -94,16 +88,20 @@ class MosaicMLInstructorEmbeddings(BaseModel, Embeddings): return self._embed(input, is_retry=True) raise ValueError( - f"Error raised by inference API: {parsed_response['error']}" + f"Error raised by inference API: rate limit exceeded.\nResponse: " + f"{response.text}" ) + parsed_response = response.json() + # The inference API has changed a couple of times, so we add some handling # to be robust to multiple response formats. if isinstance(parsed_response, dict): - if "data" in parsed_response: - output_item = parsed_response["data"] - elif "output" in parsed_response: - output_item = parsed_response["output"] + output_keys = ["data", "output", "outputs"] + for key in output_keys: + if key in parsed_response: + output_item = parsed_response[key] + break else: raise ValueError( f"No key data or output in response: {parsed_response}" @@ -113,19 +111,6 @@ class MosaicMLInstructorEmbeddings(BaseModel, Embeddings): embeddings = output_item else: embeddings = [output_item] - elif isinstance(parsed_response, list): - first_item = parsed_response[0] - if isinstance(first_item, list): - embeddings = parsed_response - elif isinstance(first_item, dict): - if "output" in first_item: - embeddings = [item["output"] for item in parsed_response] - else: - raise ValueError( - f"No key data or output in response: {parsed_response}" - ) - else: - raise ValueError(f"Unexpected response format: {parsed_response}") else: raise ValueError(f"Unexpected response type: {parsed_response}") diff --git a/libs/langchain/langchain/embeddings/openai.py b/libs/langchain/langchain/embeddings/openai.py index 9c78e2499..976c879f9 100644 --- a/libs/langchain/langchain/embeddings/openai.py +++ b/libs/langchain/langchain/embeddings/openai.py @@ -352,9 +352,9 @@ class OpenAIEmbeddings(BaseModel, Embeddings): if self.show_progress_bar: try: - import tqdm + from tqdm.auto import tqdm - _iter = tqdm.tqdm(range(0, len(tokens), _chunk_size)) + _iter = tqdm(range(0, len(tokens), _chunk_size)) except ImportError: _iter = range(0, len(tokens), _chunk_size) else: diff --git a/libs/langchain/langchain/graphs/arangodb_graph.py b/libs/langchain/langchain/graphs/arangodb_graph.py index 69b78dea3..aedcd9560 100644 --- a/libs/langchain/langchain/graphs/arangodb_graph.py +++ b/libs/langchain/langchain/graphs/arangodb_graph.py @@ -66,6 +66,10 @@ class ArangoGraph: col_type: str = collection["type"] col_size: int = self.db.collection(col_name).count() + # Skip collection if empty + if col_size == 0: + continue + # Set number of ArangoDB documents/edges to retrieve limit_amount = ceil(sample_ratio * col_size) or 1 diff --git a/libs/langchain/langchain/hub.py b/libs/langchain/langchain/hub.py index 03ef9c552..0c0d2d0fe 100644 --- a/libs/langchain/langchain/hub.py +++ b/libs/langchain/langchain/hub.py @@ -5,7 +5,6 @@ from typing import TYPE_CHECKING, Any, Optional from langchain.load.dump import dumps from langchain.load.load import loads -from langchain.utils import get_from_env if TYPE_CHECKING: from langchainhub import Client @@ -20,9 +19,7 @@ def _get_client(api_url: Optional[str] = None, api_key: Optional[str] = None) -> "langchainhub`." ) from e - api_url = api_url or get_from_env("api_url", "LANGCHAIN_HUB_API_URL") - api_key = api_key or get_from_env("api_key", "LANGCHAIN_HUB_API_KEY", default="") - api_key = api_key or get_from_env("api_key", "LANGCHAIN_API_KEY") + # Client logic will also attempt to load URL/key from environment variables return Client(api_url, api_key=api_key) @@ -33,17 +30,35 @@ def push( api_url: Optional[str] = None, api_key: Optional[str] = None, parent_commit_hash: Optional[str] = "latest", + new_repo_is_public: bool = False, + new_repo_description: str = "", ) -> str: """ - Pushes an object to the hub and returns the URL. + Pushes an object to the hub and returns the URL it can be viewed at in a browser. + + :param repo_full_name: The full name of the repo to push to in the format of + `owner/repo`. + :param object: The LangChain to serialize and push to the hub. + :param api_url: The URL of the LangChain Hub API. Defaults to the hosted API service + if you have an api key set, or a localhost instance if not. + :param api_key: The API key to use to authenticate with the LangChain Hub API. + :param parent_commit_hash: The commit hash of the parent commit to push to. Defaults + to the latest commit automatically. + :param new_repo_is_public: Whether the repo should be public. Defaults to + False (Private by default). + :param new_repo_description: The description of the repo. Defaults to an empty + string. """ client = _get_client(api_url=api_url, api_key=api_key) manifest_json = dumps(object) - resp = client.push( - repo_full_name, manifest_json, parent_commit_hash=parent_commit_hash + message = client.push( + repo_full_name, + manifest_json, + parent_commit_hash=parent_commit_hash, + new_repo_is_public=new_repo_is_public, + new_repo_description=new_repo_description, ) - commit_hash: str = resp["commit"]["commit_hash"] - return commit_hash + return message def pull( @@ -53,7 +68,13 @@ def pull( api_key: Optional[str] = None, ) -> Any: """ - Pulls an object from the hub and returns it. + Pulls an object from the hub and returns it as a LangChain object. + + :param owner_repo_commit: The full name of the repo to pull from in the format of + `owner/repo:commit_hash`. + :param api_url: The URL of the LangChain Hub API. Defaults to the hosted API service + if you have an api key set, or a localhost instance if not. + :param api_key: The API key to use to authenticate with the LangChain Hub API. """ client = _get_client(api_url=api_url, api_key=api_key) resp: str = client.pull(owner_repo_commit) diff --git a/libs/langchain/langchain/indexes/__init__.py b/libs/langchain/langchain/indexes/__init__.py index d0c878915..792cf30c8 100644 --- a/libs/langchain/langchain/indexes/__init__.py +++ b/libs/langchain/langchain/indexes/__init__.py @@ -1,5 +1,28 @@ -"""**Index** utilities.""" +"""Code to support various indexing workflows. + +Provides code to: + +* Create knowledge graphs from data. + +* Support indexing workflows from LangChain data loaders to vectorstores. + +For indexing workflows, this code is used to avoid writing duplicated content +into the vectostore and to avoid over-writing content if it's unchanged. + +Importantly, this keeps on working even if the content being written is derived +via a set of transformations from some source content (e.g., indexing children +documents that were derived from parent documents by chunking.) +""" +from langchain.indexes._api import IndexingResult, index +from langchain.indexes._sql_record_manager import SQLRecordManager from langchain.indexes.graph import GraphIndexCreator from langchain.indexes.vectorstore import VectorstoreIndexCreator -__all__ = ["GraphIndexCreator", "VectorstoreIndexCreator"] +__all__ = [ + # Keep sorted + "GraphIndexCreator", + "index", + "IndexingResult", + "SQLRecordManager", + "VectorstoreIndexCreator", +] diff --git a/libs/langchain/langchain/indexes/_api.py b/libs/langchain/langchain/indexes/_api.py new file mode 100644 index 000000000..47b9d33ea --- /dev/null +++ b/libs/langchain/langchain/indexes/_api.py @@ -0,0 +1,346 @@ +"""Module contains logic for indexing documents into vector stores.""" +from __future__ import annotations + +import hashlib +import json +import uuid +from itertools import islice +from typing import ( + Any, + Callable, + Dict, + Iterable, + Iterator, + List, + Literal, + Optional, + Sequence, + TypedDict, + TypeVar, + Union, + cast, +) + +from langchain.document_loaders.base import BaseLoader +from langchain.indexes.base import NAMESPACE_UUID, RecordManager +from langchain.pydantic_v1 import root_validator +from langchain.schema import Document +from langchain.vectorstores.base import VectorStore + +T = TypeVar("T") + + +def _hash_string_to_uuid(input_string: str) -> uuid.UUID: + """Hashes a string and returns the corresponding UUID.""" + hash_value = hashlib.sha1(input_string.encode("utf-8")).hexdigest() + return uuid.uuid5(NAMESPACE_UUID, hash_value) + + +def _hash_nested_dict_to_uuid(data: dict) -> uuid.UUID: + """Hashes a nested dictionary and returns the corresponding UUID.""" + serialized_data = json.dumps(data, sort_keys=True) + hash_value = hashlib.sha1(serialized_data.encode("utf-8")).hexdigest() + return uuid.uuid5(NAMESPACE_UUID, hash_value) + + +class _HashedDocument(Document): + """A hashed document with a unique ID.""" + + uid: str + hash_: str + """The hash of the document including content and metadata.""" + content_hash: str + """The hash of the document content.""" + metadata_hash: str + """The hash of the document metadata.""" + + @root_validator(pre=True) + def calculate_hashes(cls, values: Dict[str, Any]) -> Dict[str, Any]: + """Root validator to calculate content and metadata hash.""" + content = values.get("page_content", "") + metadata = values.get("metadata", {}) + + forbidden_keys = ("hash_", "content_hash", "metadata_hash") + + for key in forbidden_keys: + if key in metadata: + raise ValueError( + f"Metadata cannot contain key {key} as it " + f"is reserved for internal use." + ) + + content_hash = str(_hash_string_to_uuid(content)) + + try: + metadata_hash = str(_hash_nested_dict_to_uuid(metadata)) + except Exception as e: + raise ValueError( + f"Failed to hash metadata: {e}. " + f"Please use a dict that can be serialized using json." + ) + + values["content_hash"] = content_hash + values["metadata_hash"] = metadata_hash + values["hash_"] = str(_hash_string_to_uuid(content_hash + metadata_hash)) + + _uid = values.get("uid", None) + + if _uid is None: + values["uid"] = values["hash_"] + return values + + def to_document(self) -> Document: + """Return a Document object.""" + return Document( + page_content=self.page_content, + metadata=self.metadata, + ) + + @classmethod + def from_document( + cls, document: Document, *, uid: Optional[str] = None + ) -> _HashedDocument: + """Create a HashedDocument from a Document.""" + return cls( + uid=uid, + page_content=document.page_content, + metadata=document.metadata, + ) + + +def _batch(size: int, iterable: Iterable[T]) -> Iterator[List[T]]: + """Utility batching function.""" + it = iter(iterable) + while True: + chunk = list(islice(it, size)) + if not chunk: + return + yield chunk + + +def _get_source_id_assigner( + source_id_key: Union[str, Callable[[Document], str], None], +) -> Callable[[Document], Union[str, None]]: + """Get the source id from the document.""" + if source_id_key is None: + return lambda doc: None + elif isinstance(source_id_key, str): + return lambda doc: doc.metadata[source_id_key] + elif callable(source_id_key): + return source_id_key + else: + raise ValueError( + f"source_id_key should be either None, a string or a callable. " + f"Got {source_id_key} of type {type(source_id_key)}." + ) + + +def _deduplicate_in_order( + hashed_documents: Iterable[_HashedDocument], +) -> Iterator[_HashedDocument]: + """Deduplicate a list of hashed documents while preserving order.""" + seen = set() + + for hashed_doc in hashed_documents: + if hashed_doc.hash_ not in seen: + seen.add(hashed_doc.hash_) + yield hashed_doc + + +# PUBLIC API + + +class IndexingResult(TypedDict): + """Return a detailed a breakdown of the result of the indexing operation.""" + + num_added: int + """Number of added documents.""" + num_updated: int + """Number of updated documents because they were not up to date.""" + num_deleted: int + """Number of deleted documents.""" + num_skipped: int + """Number of skipped documents because they were already up to date.""" + + +def index( + docs_source: Union[BaseLoader, Iterable[Document]], + record_manager: RecordManager, + vector_store: VectorStore, + *, + batch_size: int = 100, + delete_mode: Literal["incremental", "full", None] = None, + source_id_key: Union[str, Callable[[Document], str], None] = None, +) -> IndexingResult: + """Index data from the loader into the vector store. + + Indexing functionality uses a manager to keep track of which documents + are in the vector store. + + This allows us to keep track of which documents were updated, and which + documents were deleted, which documents should be skipped. + + For the time being, documents are indexed using their hashes, and users + are not able to specify the uid of the document. + + IMPORTANT: + if auto_cleanup is set to True, the loader should be returning + the entire dataset, and not just a subset of the dataset. + Otherwise, the auto_cleanup will remove documents that it is not + supposed to. + + Args: + docs_source: Data loader or iterable of documents to index. + record_manager: Timestamped set to keep track of which documents were + updated. + vector_store: Vector store to index the documents into. + batch_size: Batch size to use when indexing. + delete_mode: How to handle clean up of documents. + - Incremental: Cleans up all documents that haven't been updated AND + that are associated with source ids that were seen + during indexing. + Clean up is done continuously during indexing helping + to minimize the probability of users seeing duplicated + content. + - Full: Delete all documents that haven to been returned by the loader. + Clean up runs after all documents have been indexed. + This means that users may see duplicated content during indexing. + - None: Do not delete any documents. + source_id_key: Optional key that helps identify the original source + of the document. + + Returns: + Indexing result which contains information about how many documents + were added, updated, deleted, or skipped. + """ + if delete_mode not in {"incremental", "full", None}: + raise ValueError( + f"delete_mode should be one of 'incremental', 'full' or None. " + f"Got {delete_mode}." + ) + + if delete_mode == "incremental" and source_id_key is None: + raise ValueError("Source id key is required when delete mode is incremental.") + + # Check that the Vectorstore has required methods implemented + methods = ["delete", "add_documents"] + + for method in methods: + if not hasattr(vector_store, method): + raise ValueError( + f"Vectorstore {vector_store} does not have required method {method}" + ) + + if type(vector_store).delete == VectorStore.delete: + # Checking if the vectorstore has overridden the default delete method + # implementation which just raises a NotImplementedError + raise ValueError("Vectorstore has not implemented the delete method") + + if isinstance(docs_source, BaseLoader): + try: + doc_iterator = docs_source.lazy_load() + except NotImplementedError: + doc_iterator = iter(docs_source.load()) + else: + doc_iterator = iter(docs_source) + + source_id_assigner = _get_source_id_assigner(source_id_key) + + # Mark when the update started. + index_start_dt = record_manager.get_time() + num_added = 0 + num_skipped = 0 + num_updated = 0 + num_deleted = 0 + + for doc_batch in _batch(batch_size, doc_iterator): + hashed_docs = list( + _deduplicate_in_order( + [_HashedDocument.from_document(doc) for doc in doc_batch] + ) + ) + + source_ids: Sequence[Optional[str]] = [ + source_id_assigner(doc) for doc in hashed_docs + ] + + if delete_mode == "incremental": + # If the delete mode is incremental, source ids are required. + for source_id, hashed_doc in zip(source_ids, hashed_docs): + if source_id is None: + raise ValueError( + "Source ids are required when delete mode is incremental. " + f"Document that starts with " + f"content: {hashed_doc.page_content[:100]} was not assigned " + f"as source id." + ) + # source ids cannot be None after for loop above. + source_ids = cast(Sequence[str], source_ids) # type: ignore[assignment] + + exists_batch = record_manager.exists([doc.uid for doc in hashed_docs]) + + # Filter out documents that already exist in the record store. + uids = [] + docs_to_index = [] + for doc, hashed_doc, doc_exists in zip(doc_batch, hashed_docs, exists_batch): + if doc_exists: + # Must be updated to refresh timestamp. + record_manager.update([hashed_doc.uid], time_at_least=index_start_dt) + num_skipped += 1 + continue + uids.append(hashed_doc.uid) + docs_to_index.append(doc) + + # Be pessimistic and assume that all vector store write will fail. + # First write to vector store + if docs_to_index: + vector_store.add_documents(docs_to_index, ids=uids) + num_added += len(docs_to_index) + + # And only then update the record store. + # Update ALL records, even if they already exist since we want to refresh + # their timestamp. + record_manager.update( + [doc.uid for doc in hashed_docs], + group_ids=source_ids, + time_at_least=index_start_dt, + ) + + # If source IDs are provided, we can do the deletion incrementally! + if delete_mode == "incremental": + # Get the uids of the documents that were not returned by the loader. + + # mypy isn't good enough to determine that source ids cannot be None + # here due to a check that's happening above, so we check again. + for source_id in source_ids: + if source_id is None: + raise AssertionError("Source ids cannot be None here.") + + _source_ids = cast(Sequence[str], source_ids) + + uids_to_delete = record_manager.list_keys( + group_ids=_source_ids, before=index_start_dt + ) + if uids_to_delete: + # Then delete from vector store. + vector_store.delete(uids_to_delete) + # First delete from record store. + record_manager.delete_keys(uids_to_delete) + num_deleted += len(uids_to_delete) + + if delete_mode == "full": + uids_to_delete = record_manager.list_keys(before=index_start_dt) + + if uids_to_delete: + # Then delete from vector store. + vector_store.delete(uids_to_delete) + # First delete from record store. + record_manager.delete_keys(uids_to_delete) + num_deleted = len(uids_to_delete) + + return { + "num_added": num_added, + "num_updated": num_updated, + "num_skipped": num_skipped, + "num_deleted": num_deleted, + } diff --git a/libs/langchain/langchain/indexes/_sql_record_manager.py b/libs/langchain/langchain/indexes/_sql_record_manager.py new file mode 100644 index 000000000..9cad02ef9 --- /dev/null +++ b/libs/langchain/langchain/indexes/_sql_record_manager.py @@ -0,0 +1,265 @@ +"""Implementation of a record management layer in SQLAlchemy. + +The management layer uses SQLAlchemy to track upserted records. + +Currently, this layer only works with SQLite; hopwever, should be adaptable +to other SQL implementations with minimal effort. + +Currently, includes an implementation that uses SQLAlchemy which should +allow it to work with a variety of SQL as a backend. + +* Each key is associated with an updated_at field. +* This filed is updated whenever the key is updated. +* Keys can be listed based on the updated at field. +* Keys can be deleted. +""" +import contextlib +import uuid +from typing import Any, Dict, Generator, List, Optional, Sequence + +from sqlalchemy import ( + Column, + Engine, + Float, + Index, + String, + UniqueConstraint, + and_, + create_engine, + text, +) +from sqlalchemy.dialects.sqlite import insert +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import Session, sessionmaker + +from langchain.indexes.base import RecordManager + +Base = declarative_base() + + +class UpsertionRecord(Base): # type: ignore[valid-type,misc] + """Table used to keep track of when a key was last updated.""" + + # ATTENTION: + # Prior to modifying this table, please determine whether + # we should create migrations for this table to make sure + # users do not experience data loss. + __tablename__ = "upsertion_record" + + uuid = Column( + String, + index=True, + default=lambda: str(uuid.uuid4()), + primary_key=True, + nullable=False, + ) + key = Column(String, index=True) + # Using a non-normalized representation to handle `namespace` attribute. + # If the need arises, this attribute can be pulled into a separate Collection + # table at some time later. + namespace = Column(String, index=True, nullable=False) + group_id = Column(String, index=True, nullable=True) + + # The timestamp associated with the last record upsertion. + updated_at = Column(Float, index=True) + + __table_args__ = ( + UniqueConstraint("key", "namespace", name="uix_key_namespace"), + Index("ix_key_namespace", "key", "namespace"), + ) + + +class SQLRecordManager(RecordManager): + """A SQL Alchemy based implementation of the record manager.""" + + def __init__( + self, + namespace: str, + *, + engine: Optional[Engine] = None, + db_url: Optional[str] = None, + engine_kwargs: Optional[Dict[str, Any]] = None, + ) -> None: + """Initialize the SQLRecordManager. + + This class serves as a manager persistence layer that uses an SQL + backend to track upserted records. You should specify either a db_url + to create an engine or provide an existing engine. + + Args: + namespace: The namespace associated with this record manager. + engine: An already existing SQL Alchemy engine. + Default is None. + db_url: A database connection string used to create + an SQL Alchemy engine. Default is None. + engine_kwargs: Additional keyword arguments + to be passed when creating the engine. Default is an empty dictionary. + + Raises: + ValueError: If both db_url and engine are provided or neither. + AssertionError: If something unexpected happens during engine configuration. + """ + super().__init__(namespace=namespace) + if db_url is None and engine is None: + raise ValueError("Must specify either db_url or engine") + if db_url is not None and engine is not None: + raise ValueError("Must specify either db_url or engine, not both") + + if db_url: + _kwargs = engine_kwargs or {} + _engine = create_engine(db_url, **_kwargs) + elif engine: + _engine = engine + else: + raise AssertionError("Something went wrong with configuration of engine.") + + self.engine = _engine + self.session_factory = sessionmaker(bind=self.engine) + + def create_schema(self) -> None: + """Create the database schema.""" + Base.metadata.create_all(self.engine) + + @contextlib.contextmanager + def _make_session(self) -> Generator[Session, None, None]: + """Create a session and close it after use.""" + session = self.session_factory() + try: + yield session + finally: + session.close() + + def get_time(self) -> float: + """Get the current server time as a timestamp. + + Please note it's critical that time is obtained from the server since + we want a monotonic clock. + """ + with self._make_session() as session: + # * SQLite specific implementation, can be changed based on dialect. + # * For SQLite, unlike unixepoch it will work with older versions of SQLite. + # ---- + # julianday('now'): Julian day number for the current date and time. + # The Julian day is a continuous count of days, starting from a + # reference date (Julian day number 0). + # 2440587.5 - constant represents the Julian day number for January 1, 1970 + # 86400.0 - constant represents the number of seconds + # in a day (24 hours * 60 minutes * 60 seconds) + query = text("SELECT (julianday('now') - 2440587.5) * 86400.0;") + dt = session.execute(query).scalar() + if not isinstance(dt, float): + raise AssertionError(f"Unexpected type for datetime: {type(dt)}") + return dt + + def update( + self, + keys: Sequence[str], + *, + group_ids: Optional[Sequence[Optional[str]]] = None, + time_at_least: Optional[float] = None, + ) -> None: + """Upsert records into the SQLite database.""" + if group_ids is None: + group_ids = [None] * len(keys) + + if len(keys) != len(group_ids): + raise ValueError( + f"Number of keys ({len(keys)}) does not match number of " + f"group_ids ({len(group_ids)})" + ) + + # Get the current time from the server. + # This makes an extra round trip to the server, should not be a big deal + # if the batch size is large enough. + # Getting the time here helps us compare it against the time_at_least + # and raise an error if there is a time sync issue. + # Here, we're just being extra careful to minimize the chance of + # data loss due to incorrectly deleting records. + update_time = self.get_time() + + if time_at_least and update_time < time_at_least: + # Safeguard against time sync issues + raise AssertionError(f"Time sync issue: {update_time} < {time_at_least}") + + records_to_upsert = [ + { + "key": key, + "namespace": self.namespace, + "updated_at": update_time, + "group_id": group_id, + } + for key, group_id in zip(keys, group_ids) + ] + + with self._make_session() as session: + # Note: uses SQLite insert to make on_conflict_do_update work. + # This code needs to be generalized a bit to work with more dialects. + insert_stmt = insert(UpsertionRecord).values(records_to_upsert) + stmt = insert_stmt.on_conflict_do_update( # type: ignore[attr-defined] + [UpsertionRecord.key, UpsertionRecord.namespace], + set_=dict( + # attr-defined type ignore + updated_at=insert_stmt.excluded.updated_at, # type: ignore + group_id=insert_stmt.excluded.group_id, # type: ignore + ), + ) + session.execute(stmt) + session.commit() + + def exists(self, keys: Sequence[str]) -> List[bool]: + """Check if the given keys exist in the SQLite database.""" + with self._make_session() as session: + records = ( + # mypy does not recognize .all() + session.query(UpsertionRecord.key) # type: ignore[attr-defined] + .filter( + and_( + UpsertionRecord.key.in_(keys), + UpsertionRecord.namespace == self.namespace, + ) + ) + .all() + ) + found_keys = set(r.key for r in records) + return [k in found_keys for k in keys] + + def list_keys( + self, + *, + before: Optional[float] = None, + after: Optional[float] = None, + group_ids: Optional[Sequence[str]] = None, + ) -> List[str]: + """List records in the SQLite database based on the provided date range.""" + with self._make_session() as session: + query = session.query(UpsertionRecord).filter( + UpsertionRecord.namespace == self.namespace + ) + + # mypy does not recognize .all() or .filter() + if after: + query = query.filter( # type: ignore[attr-defined] + UpsertionRecord.updated_at > after + ) + if before: + query = query.filter( # type: ignore[attr-defined] + UpsertionRecord.updated_at < before + ) + if group_ids: + query = query.filter( # type: ignore[attr-defined] + UpsertionRecord.group_id.in_(group_ids) + ) + records = query.all() # type: ignore[attr-defined] + return [r.key for r in records] + + def delete_keys(self, keys: Sequence[str]) -> None: + """Delete records from the SQLite database.""" + with self._make_session() as session: + # mypy does not recognize .delete() + session.query(UpsertionRecord).filter( + and_( + UpsertionRecord.key.in_(keys), + UpsertionRecord.namespace == self.namespace, + ) + ).delete() # type: ignore[attr-defined] + session.commit() diff --git a/libs/langchain/langchain/indexes/base.py b/libs/langchain/langchain/indexes/base.py new file mode 100644 index 000000000..128455253 --- /dev/null +++ b/libs/langchain/langchain/indexes/base.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +import uuid +from abc import ABC, abstractmethod +from typing import List, Optional, Sequence + +NAMESPACE_UUID = uuid.UUID(int=1984) + + +class RecordManager(ABC): + """An abstract base class representing the interface for a record manager.""" + + def __init__( + self, + namespace: str, + ) -> None: + """Initialize the record manager. + + Args: + namespace (str): The namespace for the record manager. + """ + self.namespace = namespace + + @abstractmethod + def create_schema(self) -> None: + """Create the database schema for the record manager.""" + + @abstractmethod + def get_time(self) -> float: + """Get the current server time as a high resolution timestamp! + + It's important to get this from the server to ensure a monotonic clock, + otherwise there may be data loss when cleaning up old documents! + + Returns: + The current server time as a float timestamp. + """ + + @abstractmethod + def update( + self, + keys: Sequence[str], + *, + group_ids: Optional[Sequence[Optional[str]]] = None, + time_at_least: Optional[float] = None, + ) -> None: + """Upsert records into the database. + + Args: + keys: A list of record keys to upsert. + group_ids: A list of group IDs corresponding to the keys. + time_at_least: if provided, updates should only happen if the + updated_at field is at least this time. + + Raises: + ValueError: If the length of keys doesn't match the length of group_ids. + """ + + @abstractmethod + def exists(self, keys: Sequence[str]) -> List[bool]: + """Check if the provided keys exist in the database. + + Args: + keys: A list of keys to check. + + Returns: + A list of boolean values indicating the existence of each key. + """ + + @abstractmethod + def list_keys( + self, + *, + before: Optional[float] = None, + after: Optional[float] = None, + group_ids: Optional[Sequence[str]] = None, + ) -> List[str]: + """List records in the database based on the provided filters. + + Args: + before: Filter to list records updated before this time. + after: Filter to list records updated after this time. + group_ids: Filter to list records with specific group IDs. + + Returns: + A list of keys for the matching records. + """ + + @abstractmethod + def delete_keys(self, keys: Sequence[str]) -> None: + """Delete specified records from the database. + + Args: + keys: A list of keys to delete. + """ diff --git a/libs/langchain/langchain/llms/anthropic.py b/libs/langchain/langchain/llms/anthropic.py index afaea04b5..f7ee0ab57 100644 --- a/libs/langchain/langchain/llms/anthropic.py +++ b/libs/langchain/langchain/llms/anthropic.py @@ -21,10 +21,10 @@ from langchain.utils.utils import build_extra_kwargs class _AnthropicCommon(BaseLanguageModel): client: Any = None #: :meta private: async_client: Any = None #: :meta private: - model: str = "claude-2" + model: str = Field(default="claude-2", alias="model_name") """Model name to use.""" - max_tokens_to_sample: int = 256 + max_tokens_to_sample: int = Field(default=256, alias="max_tokens") """Denotes the number of tokens to predict per generation.""" temperature: Optional[float] = None @@ -144,6 +144,7 @@ class Anthropic(LLM, _AnthropicCommon): import anthropic from langchain.llms import Anthropic + model = Anthropic(model="", anthropic_api_key="my-api-key") # Simplest invocation, automatically wrapped with HUMAN_PROMPT @@ -157,6 +158,12 @@ class Anthropic(LLM, _AnthropicCommon): response = model(prompt) """ + class Config: + """Configuration for this pydantic object.""" + + allow_population_by_field_name = True + arbitrary_types_allowed = True + @root_validator() def raise_warning(cls, values: Dict) -> Dict: """Raise warning that this class is deprecated.""" @@ -282,9 +289,10 @@ class Anthropic(LLM, _AnthropicCommon): for token in self.client.completions.create( prompt=self._wrap_prompt(prompt), stop_sequences=stop, stream=True, **params ): - yield GenerationChunk(text=token.completion) + chunk = GenerationChunk(text=token.completion) + yield chunk if run_manager: - run_manager.on_llm_new_token(token.completion) + run_manager.on_llm_new_token(chunk.text, chunk=chunk) async def _astream( self, @@ -317,9 +325,10 @@ class Anthropic(LLM, _AnthropicCommon): stream=True, **params, ): - yield GenerationChunk(text=token.completion) + chunk = GenerationChunk(text=token.completion) + yield chunk if run_manager: - await run_manager.on_llm_new_token(token.completion) + await run_manager.on_llm_new_token(chunk.text, chunk=chunk) def get_num_tokens(self, text: str) -> int: """Calculate number of tokens.""" diff --git a/libs/langchain/langchain/llms/base.py b/libs/langchain/langchain/llms/base.py index a833487ff..a91ecd9f2 100644 --- a/libs/langchain/langchain/llms/base.py +++ b/libs/langchain/langchain/llms/base.py @@ -528,9 +528,13 @@ class BaseLLM(BaseLanguageModel[str], ABC): f" argument of type {type(prompts)}." ) # Create callback managers - if isinstance(callbacks, list) and ( - isinstance(callbacks[0], (list, BaseCallbackManager)) - or callbacks[0] is None + if ( + isinstance(callbacks, list) + and callbacks + and ( + isinstance(callbacks[0], (list, BaseCallbackManager)) + or callbacks[0] is None + ) ): # We've received a list of callbacks args to apply to each input assert len(callbacks) == len(prompts) diff --git a/libs/langchain/langchain/llms/mosaicml.py b/libs/langchain/langchain/llms/mosaicml.py index 780e7a8b4..718466178 100644 --- a/libs/langchain/langchain/llms/mosaicml.py +++ b/libs/langchain/langchain/llms/mosaicml.py @@ -138,14 +138,8 @@ class MosaicML(LLM): raise ValueError(f"Error raised by inference endpoint: {e}") try: - parsed_response = response.json() - - if "error" in parsed_response: - # if we get rate limited, try sleeping for 1 second - if ( - not is_retry - and "rate limit exceeded" in parsed_response["error"].lower() - ): + if response.status_code == 429: + if not is_retry: import time time.sleep(self.retry_sleep) @@ -153,9 +147,12 @@ class MosaicML(LLM): return self._call(prompt, stop, run_manager, is_retry=True) raise ValueError( - f"Error raised by inference API: {parsed_response['error']}" + f"Error raised by inference API: rate limit exceeded.\nResponse: " + f"{response.text}" ) + parsed_response = response.json() + # The inference API has changed a couple of times, so we add some handling # to be robust to multiple response formats. if isinstance(parsed_response, dict): @@ -173,23 +170,12 @@ class MosaicML(LLM): text = output_item[0] else: text = output_item - elif isinstance(parsed_response, list): - first_item = parsed_response[0] - if isinstance(first_item, str): - text = first_item - elif isinstance(first_item, dict): - if "output" in parsed_response: - text = first_item["output"] - else: - raise ValueError( - f"No key data or output in response: {parsed_response}" - ) - else: - raise ValueError(f"Unexpected response format: {parsed_response}") else: raise ValueError(f"Unexpected response type: {parsed_response}") - text = text[len(prompt) :] + # Older versions of the API include the input in the output response + if text.startswith(prompt): + text = text[len(prompt) :] except requests.exceptions.JSONDecodeError as e: raise ValueError( diff --git a/libs/langchain/langchain/llms/nlpcloud.py b/libs/langchain/langchain/llms/nlpcloud.py index 1420595ee..d908e374e 100644 --- a/libs/langchain/langchain/llms/nlpcloud.py +++ b/libs/langchain/langchain/llms/nlpcloud.py @@ -28,8 +28,6 @@ class NLPCloud(LLM): """Language to use (multilingual addon)""" temperature: float = 0.7 """What sampling temperature to use.""" - min_length: int = 1 - """The minimum number of tokens to generate in the completion.""" max_length: int = 256 """The maximum number of tokens to generate in the completion.""" length_no_input: bool = True @@ -46,14 +44,8 @@ class NLPCloud(LLM): """The number of highest probability tokens to keep for top-k filtering.""" repetition_penalty: float = 1.0 """Penalizes repeated tokens. 1.0 means no penalty.""" - length_penalty: float = 1.0 - """Exponential penalty to the length.""" - do_sample: bool = True - """Whether to use sampling (True) or greedy decoding.""" num_beams: int = 1 """Number of beams for beam search.""" - early_stopping: bool = False - """Whether to stop beam search at num_beams sentences.""" num_return_sequences: int = 1 """How many completions to generate for each prompt.""" @@ -91,7 +83,6 @@ class NLPCloud(LLM): """Get the default parameters for calling NLPCloud API.""" return { "temperature": self.temperature, - "min_length": self.min_length, "max_length": self.max_length, "length_no_input": self.length_no_input, "remove_input": self.remove_input, @@ -100,10 +91,7 @@ class NLPCloud(LLM): "top_p": self.top_p, "top_k": self.top_k, "repetition_penalty": self.repetition_penalty, - "length_penalty": self.length_penalty, - "do_sample": self.do_sample, "num_beams": self.num_beams, - "early_stopping": self.early_stopping, "num_return_sequences": self.num_return_sequences, } diff --git a/libs/langchain/langchain/llms/ollama.py b/libs/langchain/langchain/llms/ollama.py index ec132c08b..527bbcbc4 100644 --- a/libs/langchain/langchain/llms/ollama.py +++ b/libs/langchain/langchain/llms/ollama.py @@ -144,9 +144,35 @@ class _OllamaCommon(BaseLanguageModel): ) return response.iter_lines(decode_unicode=True) + def _stream_with_aggregation( + self, + prompt: str, + stop: Optional[List[str]] = None, + run_manager: Optional[CallbackManagerForLLMRun] = None, + verbose: bool = False, + **kwargs: Any, + ) -> GenerationChunk: + final_chunk: Optional[GenerationChunk] = None + for stream_resp in self._create_stream(prompt, stop, **kwargs): + if stream_resp: + chunk = _stream_response_to_generation_chunk(stream_resp) + if final_chunk is None: + final_chunk = chunk + else: + final_chunk += chunk + if run_manager: + run_manager.on_llm_new_token( + chunk.text, + verbose=verbose, + ) + if final_chunk is None: + raise ValueError("No data received from Ollama stream.") + + return final_chunk + class Ollama(BaseLLM, _OllamaCommon): - """Ollama locally run large language models. + """Ollama locally runs large language models. To use, follow the instructions at https://ollama.ai/. @@ -191,20 +217,13 @@ class Ollama(BaseLLM, _OllamaCommon): # TODO: add caching here. generations = [] for prompt in prompts: - final_chunk: Optional[GenerationChunk] = None - for stream_resp in self._create_stream(prompt, stop, **kwargs): - if stream_resp: - chunk = _stream_response_to_generation_chunk(stream_resp) - if final_chunk is None: - final_chunk = chunk - else: - final_chunk += chunk - if run_manager: - run_manager.on_llm_new_token( - chunk.text, - verbose=self.verbose, - ) - + final_chunk = super()._stream_with_aggregation( + prompt, + stop=stop, + run_manager=run_manager, + verbose=self.verbose, + **kwargs, + ) generations.append([final_chunk]) return LLMResult(generations=generations) diff --git a/libs/langchain/langchain/llms/openai.py b/libs/langchain/langchain/llms/openai.py index 0ab265291..837256ec9 100644 --- a/libs/langchain/langchain/llms/openai.py +++ b/libs/langchain/langchain/llms/openai.py @@ -297,6 +297,7 @@ class BaseOpenAI(BaseLLM): if run_manager: run_manager.on_llm_new_token( chunk.text, + chunk=chunk, verbose=self.verbose, logprobs=chunk.generation_info["logprobs"] if chunk.generation_info @@ -320,6 +321,7 @@ class BaseOpenAI(BaseLLM): if run_manager: await run_manager.on_llm_new_token( chunk.text, + chunk=chunk, verbose=self.verbose, logprobs=chunk.generation_info["logprobs"] if chunk.generation_info @@ -825,9 +827,10 @@ class OpenAIChat(BaseLLM): self, messages=messages, run_manager=run_manager, **params ): token = stream_resp["choices"][0]["delta"].get("content", "") - yield GenerationChunk(text=token) + chunk = GenerationChunk(text=token) + yield chunk if run_manager: - run_manager.on_llm_new_token(token) + run_manager.on_llm_new_token(token, chunk=chunk) async def _astream( self, @@ -842,9 +845,10 @@ class OpenAIChat(BaseLLM): self, messages=messages, run_manager=run_manager, **params ): token = stream_resp["choices"][0]["delta"].get("content", "") - yield GenerationChunk(text=token) + chunk = GenerationChunk(text=token) + yield chunk if run_manager: - await run_manager.on_llm_new_token(token) + await run_manager.on_llm_new_token(token, chunk=chunk) def _generate( self, diff --git a/libs/langchain/langchain/llms/promptguard.py b/libs/langchain/langchain/llms/promptguard.py index a6e859746..9f99ff401 100644 --- a/libs/langchain/langchain/llms/promptguard.py +++ b/libs/langchain/langchain/llms/promptguard.py @@ -23,10 +23,10 @@ class PromptGuard(LLM): Example: .. code-block:: python - from langchain.llms import PromptGuardLLM + from langchain.llms import PromptGuard from langchain.chat_models import ChatOpenAI - prompt_guard_llm = PromptGuardLLM(base_llm=ChatOpenAI()) + prompt_guard_llm = PromptGuard(base_llm=ChatOpenAI()) """ base_llm: BaseLanguageModel diff --git a/libs/langchain/langchain/llms/vllm.py b/libs/langchain/langchain/llms/vllm.py index bf82c8c21..9f456fde5 100644 --- a/libs/langchain/langchain/llms/vllm.py +++ b/libs/langchain/langchain/llms/vllm.py @@ -59,6 +59,9 @@ class VLLM(BaseLLM): logprobs: Optional[int] = None """Number of log probabilities to return per output token.""" + dtype: str = "auto" + """The data type for the model weights and activations.""" + client: Any #: :meta private: @root_validator() @@ -77,6 +80,7 @@ class VLLM(BaseLLM): model=values["model"], tensor_parallel_size=values["tensor_parallel_size"], trust_remote_code=values["trust_remote_code"], + dtype=values["dtype"], ) return values diff --git a/libs/langchain/langchain/memory/__init__.py b/libs/langchain/langchain/memory/__init__.py index e0ac6371f..f2a61ef2f 100644 --- a/libs/langchain/langchain/memory/__init__.py +++ b/libs/langchain/langchain/memory/__init__.py @@ -43,6 +43,7 @@ from langchain.memory.chat_message_histories import ( RedisChatMessageHistory, SQLChatMessageHistory, StreamlitChatMessageHistory, + XataChatMessageHistory, ZepChatMessageHistory, ) from langchain.memory.combined import CombinedMemory @@ -90,6 +91,7 @@ __all__ = [ "SimpleMemory", "StreamlitChatMessageHistory", "VectorStoreRetrieverMemory", + "XataChatMessageHistory", "ZepChatMessageHistory", "ZepMemory", ] diff --git a/libs/langchain/langchain/memory/chat_message_histories/__init__.py b/libs/langchain/langchain/memory/chat_message_histories/__init__.py index 02241675b..ddd23de4f 100644 --- a/libs/langchain/langchain/memory/chat_message_histories/__init__.py +++ b/libs/langchain/langchain/memory/chat_message_histories/__init__.py @@ -17,6 +17,7 @@ from langchain.memory.chat_message_histories.sql import SQLChatMessageHistory from langchain.memory.chat_message_histories.streamlit import ( StreamlitChatMessageHistory, ) +from langchain.memory.chat_message_histories.xata import XataChatMessageHistory from langchain.memory.chat_message_histories.zep import ZepChatMessageHistory __all__ = [ @@ -33,5 +34,6 @@ __all__ = [ "RocksetChatMessageHistory", "SQLChatMessageHistory", "StreamlitChatMessageHistory", + "XataChatMessageHistory", "ZepChatMessageHistory", ] diff --git a/libs/langchain/langchain/memory/chat_message_histories/in_memory.py b/libs/langchain/langchain/memory/chat_message_histories/in_memory.py index d8db3f424..53fbbb201 100644 --- a/libs/langchain/langchain/memory/chat_message_histories/in_memory.py +++ b/libs/langchain/langchain/memory/chat_message_histories/in_memory.py @@ -1,6 +1,6 @@ from typing import List -from langchain.pydantic_v1 import BaseModel +from langchain.pydantic_v1 import BaseModel, Field from langchain.schema import ( BaseChatMessageHistory, ) @@ -13,7 +13,7 @@ class ChatMessageHistory(BaseChatMessageHistory, BaseModel): Stores messages in an in memory list. """ - messages: List[BaseMessage] = [] + messages: List[BaseMessage] = Field(default_factory=list) def add_message(self, message: BaseMessage) -> None: """Add a self-created message to the store""" diff --git a/libs/langchain/langchain/memory/chat_message_histories/xata.py b/libs/langchain/langchain/memory/chat_message_histories/xata.py new file mode 100644 index 000000000..de358888a --- /dev/null +++ b/libs/langchain/langchain/memory/chat_message_histories/xata.py @@ -0,0 +1,132 @@ +import json +from typing import List + +from langchain.schema import ( + BaseChatMessageHistory, +) +from langchain.schema.messages import BaseMessage, _message_to_dict, messages_from_dict + + +class XataChatMessageHistory(BaseChatMessageHistory): + """Chat message history stored in a Xata database.""" + + def __init__( + self, + session_id: str, + db_url: str, + api_key: str, + branch_name: str = "main", + table_name: str = "messages", + create_table: bool = True, + ) -> None: + """Initialize with Xata client.""" + try: + from xata.client import XataClient # noqa: F401 + except ImportError: + raise ValueError( + "Could not import xata python package. " + "Please install it with `pip install xata`." + ) + self._client = XataClient( + api_key=api_key, db_url=db_url, branch_name=branch_name + ) + self._table_name = table_name + self._session_id = session_id + + if create_table: + self._create_table_if_not_exists() + + def _create_table_if_not_exists(self) -> None: + r = self._client.table().get_schema(self._table_name) + if r.status_code <= 299: + return + if r.status_code != 404: + raise Exception( + f"Error checking if table exists in Xata: {r.status_code} {r}" + ) + r = self._client.table().create(self._table_name) + if r.status_code > 299: + raise Exception(f"Error creating table in Xata: {r.status_code} {r}") + r = self._client.table().set_schema( + self._table_name, + payload={ + "columns": [ + {"name": "sessionId", "type": "string"}, + {"name": "type", "type": "string"}, + {"name": "role", "type": "string"}, + {"name": "content", "type": "text"}, + {"name": "name", "type": "string"}, + {"name": "additionalKwargs", "type": "text"}, + ] + }, + ) + if r.status_code > 299: + raise Exception(f"Error setting table schema in Xata: {r.status_code} {r}") + + def add_message(self, message: BaseMessage) -> None: + """Append the message to the Xata table""" + msg = _message_to_dict(message) + r = self._client.records().insert( + self._table_name, + { + "sessionId": self._session_id, + "type": msg["type"], + "content": message.content, + "additionalKwargs": json.dumps(message.additional_kwargs), + "role": msg["data"].get("role"), + "name": msg["data"].get("name"), + }, + ) + if r.status_code > 299: + raise Exception(f"Error adding message to Xata: {r.status_code} {r}") + + @property + def messages(self) -> List[BaseMessage]: # type: ignore + r = self._client.data().query( + self._table_name, + payload={ + "filter": { + "sessionId": self._session_id, + }, + "sort": {"xata.createdAt": "asc"}, + }, + ) + if r.status_code != 200: + raise Exception(f"Error running query: {r.status_code} {r}") + msgs = messages_from_dict( + [ + { + "type": m["type"], + "data": { + "content": m["content"], + "role": m.get("role"), + "name": m.get("name"), + "additionalKwargs": json.loads(m["additionalKwargs"]), + }, + } + for m in r["records"] + ] + ) + return msgs + + def clear(self) -> None: + """Delete session from Xata table.""" + while True: + r = self._client.data().query( + self._table_name, + payload={ + "columns": ["id"], + "filter": { + "sessionId": self._session_id, + }, + }, + ) + if r.status_code != 200: + raise Exception(f"Error running query: {r.status_code} {r}") + ids = [rec["id"] for rec in r["records"]] + if len(ids) == 0: + break + operations = [ + {"delete": {"table": self._table_name, "id": id}} for id in ids + ] + self._client.records().transaction(payload={"operations": operations}) diff --git a/libs/langchain/langchain/memory/utils.py b/libs/langchain/langchain/memory/utils.py index 2706f1fc7..eafb48904 100644 --- a/libs/langchain/langchain/memory/utils.py +++ b/libs/langchain/langchain/memory/utils.py @@ -1,7 +1,5 @@ from typing import Any, Dict, List -from langchain.schema.messages import get_buffer_string # noqa: 401 - def get_prompt_input_key(inputs: Dict[str, Any], memory_variables: List[str]) -> str: """ diff --git a/libs/langchain/langchain/prompts/chat.py b/libs/langchain/langchain/prompts/chat.py index 7e7e5809f..59fcb30c8 100644 --- a/libs/langchain/langchain/prompts/chat.py +++ b/libs/langchain/langchain/prompts/chat.py @@ -674,18 +674,18 @@ def _create_template_from_message_type( Returns: a message prompt template of the appropriate type. """ - if message_type == "human": + if message_type in ("human", "user"): message: BaseMessagePromptTemplate = HumanMessagePromptTemplate.from_template( template ) - elif message_type == "ai": + elif message_type in ("ai", "assistant"): message = AIMessagePromptTemplate.from_template(template) elif message_type == "system": message = SystemMessagePromptTemplate.from_template(template) else: raise ValueError( - f"Unexpected message type: {message_type}. Use one of 'human', 'ai', " - f"or 'system'." + f"Unexpected message type: {message_type}. Use one of 'human'," + f" 'user', 'ai', 'assistant', or 'system'." ) return message diff --git a/libs/langchain/langchain/retrievers/__init__.py b/libs/langchain/langchain/retrievers/__init__.py index 1e5497c93..c666d9103 100644 --- a/libs/langchain/langchain/retrievers/__init__.py +++ b/libs/langchain/langchain/retrievers/__init__.py @@ -40,6 +40,7 @@ from langchain.retrievers.merger_retriever import MergerRetriever from langchain.retrievers.metal import MetalRetriever from langchain.retrievers.milvus import MilvusRetriever from langchain.retrievers.multi_query import MultiQueryRetriever +from langchain.retrievers.multi_vector import MultiVectorRetriever from langchain.retrievers.parent_document_retriever import ParentDocumentRetriever from langchain.retrievers.pinecone_hybrid_search import PineconeHybridSearchRetriever from langchain.retrievers.pubmed import PubMedRetriever @@ -92,4 +93,5 @@ __all__ = [ "WebResearchRetriever", "EnsembleRetriever", "ParentDocumentRetriever", + "MultiVectorRetriever", ] diff --git a/libs/langchain/langchain/retrievers/google_cloud_enterprise_search.py b/libs/langchain/langchain/retrievers/google_cloud_enterprise_search.py index 51637bf32..357004750 100644 --- a/libs/langchain/langchain/retrievers/google_cloud_enterprise_search.py +++ b/libs/langchain/langchain/retrievers/google_cloud_enterprise_search.py @@ -69,6 +69,13 @@ class GoogleCloudEnterpriseSearchRetriever(BaseRetriever): when making API calls. If not provided, credentials will be ascertained from the environment.""" + # TODO: Add extra data type handling for type website + engine_data_type: int = Field(default=0, ge=0, le=1) + """ Defines the enterprise search data type + 0 - Unstructured data + 1 - Structured data + """ + _client: SearchServiceClient _serving_config: str @@ -86,10 +93,18 @@ class GoogleCloudEnterpriseSearchRetriever(BaseRetriever): from google.cloud import discoveryengine_v1beta # noqa: F401 except ImportError as exc: raise ImportError( - "google.cloud.discoveryengine is not installed. " + "google.cloud.discoveryengine is not installed." "Please install it with pip install google-cloud-discoveryengine" ) from exc + try: + from google.api_core.exceptions import InvalidArgument # noqa: F401 + except ImportError as exc: + raise ImportError( + "google.api_core.exceptions is not installed. " + "Please install it with pip install google-api-core" + ) from exc + values["project_id"] = get_from_dict_or_env(values, "project_id", "PROJECT_ID") values["search_engine_id"] = get_from_dict_or_env( values, "search_engine_id", "SEARCH_ENGINE_ID" @@ -110,7 +125,7 @@ class GoogleCloudEnterpriseSearchRetriever(BaseRetriever): serving_config=self.serving_config_id, ) - def _convert_search_response( + def _convert_unstructured_search_response( self, results: Sequence[SearchResult] ) -> List[Document]: """Converts a sequence of search results to a list of LangChain documents.""" @@ -149,6 +164,30 @@ class GoogleCloudEnterpriseSearchRetriever(BaseRetriever): return documents + def _convert_structured_search_response( + self, results: Sequence[SearchResult] + ) -> List[Document]: + """Converts a sequence of search results to a list of LangChain documents.""" + import json + + from google.protobuf.json_format import MessageToDict + + documents: List[Document] = [] + + for result in results: + document_dict = MessageToDict( + result.document._pb, preserving_proto_field_name=True + ) + + documents.append( + Document( + page_content=json.dumps(document_dict.get("struct_data", {})), + metadata={"id": document_dict["id"], "name": document_dict["name"]}, + ) + ) + + return documents + def _create_search_request(self, query: str) -> SearchRequest: """Prepares a SearchRequest object.""" from google.cloud.discoveryengine_v1beta import SearchRequest @@ -161,23 +200,32 @@ class GoogleCloudEnterpriseSearchRetriever(BaseRetriever): mode=self.spell_correction_mode ) - if self.get_extractive_answers: - extractive_content_spec = ( - SearchRequest.ContentSearchSpec.ExtractiveContentSpec( - max_extractive_answer_count=self.max_extractive_answer_count, + if self.engine_data_type == 0: + if self.get_extractive_answers: + extractive_content_spec = ( + SearchRequest.ContentSearchSpec.ExtractiveContentSpec( + max_extractive_answer_count=self.max_extractive_answer_count, + ) ) + else: + extractive_content_spec = ( + SearchRequest.ContentSearchSpec.ExtractiveContentSpec( + max_extractive_segment_count=self.max_extractive_segment_count, + ) + ) + content_search_spec = SearchRequest.ContentSearchSpec( + extractive_content_spec=extractive_content_spec ) + elif self.engine_data_type == 1: + content_search_spec = None else: - extractive_content_spec = ( - SearchRequest.ContentSearchSpec.ExtractiveContentSpec( - max_extractive_segment_count=self.max_extractive_segment_count, - ) + # TODO: Add extra data type handling for type website + raise NotImplementedError( + "Only engine data type 0 (Unstructured) or 1 (Structured)" + + " are supported currently." + + f" Got {self.engine_data_type}" ) - content_search_spec = SearchRequest.ContentSearchSpec( - extractive_content_spec=extractive_content_spec, - ) - return SearchRequest( query=query, filter=self.filter, @@ -192,8 +240,27 @@ class GoogleCloudEnterpriseSearchRetriever(BaseRetriever): self, query: str, *, run_manager: CallbackManagerForRetrieverRun ) -> List[Document]: """Get documents relevant for a query.""" + from google.api_core.exceptions import InvalidArgument + search_request = self._create_search_request(query) - response = self._client.search(search_request) - documents = self._convert_search_response(response.results) + + try: + response = self._client.search(search_request) + except InvalidArgument as e: + raise type(e)( + e.message + " This might be due to engine_data_type not set correctly." + ) + + if self.engine_data_type == 0: + documents = self._convert_unstructured_search_response(response.results) + elif self.engine_data_type == 1: + documents = self._convert_structured_search_response(response.results) + else: + # TODO: Add extra data type handling for type website + raise NotImplementedError( + "Only engine data type 0 (Unstructured) or 1 (Structured)" + + " are supported currently." + + f" Got {self.engine_data_type}" + ) return documents diff --git a/libs/langchain/langchain/retrievers/multi_vector.py b/libs/langchain/langchain/retrievers/multi_vector.py new file mode 100644 index 000000000..92d537189 --- /dev/null +++ b/libs/langchain/langchain/retrievers/multi_vector.py @@ -0,0 +1,39 @@ +from typing import List + +from pydantic import Field + +from langchain.callbacks.manager import CallbackManagerForRetrieverRun +from langchain.schema import BaseRetriever, BaseStore, Document +from langchain.vectorstores import VectorStore + + +class MultiVectorRetriever(BaseRetriever): + """Retrieve from a set of multiple embeddings for the same document.""" + + vectorstore: VectorStore + """The underlying vectorstore to use to store small chunks + and their embedding vectors""" + docstore: BaseStore[str, Document] + """The storage layer for the parent documents""" + id_key: str = "doc_id" + search_kwargs: dict = Field(default_factory=dict) + """Keyword arguments to pass to the search function.""" + + def _get_relevant_documents( + self, query: str, *, run_manager: CallbackManagerForRetrieverRun + ) -> List[Document]: + """Get documents relevant to a query. + Args: + query: String to find relevant documents for + run_manager: The callbacks handler to use + Returns: + List of relevant documents + """ + sub_docs = self.vectorstore.similarity_search(query, **self.search_kwargs) + # We do this to maintain the order of the ids that are returned + ids = [] + for d in sub_docs: + if d.metadata[self.id_key] not in ids: + ids.append(d.metadata[self.id_key]) + docs = self.docstore.mget(ids) + return [d for d in docs if d is not None] diff --git a/libs/langchain/langchain/retrievers/parent_document_retriever.py b/libs/langchain/langchain/retrievers/parent_document_retriever.py index f56b89290..dd5aa7206 100644 --- a/libs/langchain/langchain/retrievers/parent_document_retriever.py +++ b/libs/langchain/langchain/retrievers/parent_document_retriever.py @@ -1,16 +1,12 @@ import uuid from typing import List, Optional -from langchain.callbacks.manager import CallbackManagerForRetrieverRun -from langchain.pydantic_v1 import Field +from langchain.retrievers import MultiVectorRetriever from langchain.schema.document import Document -from langchain.schema.retriever import BaseRetriever -from langchain.schema.storage import BaseStore from langchain.text_splitter import TextSplitter -from langchain.vectorstores.base import VectorStore -class ParentDocumentRetriever(BaseRetriever): +class ParentDocumentRetriever(MultiVectorRetriever): """Retrieve small chunks then retrieve their parent documents. When splitting documents for retrieval, there are often conflicting desires: @@ -59,45 +55,19 @@ class ParentDocumentRetriever(BaseRetriever): ) """ - vectorstore: VectorStore - """The underlying vectorstore to use to store small chunks - and their embedding vectors""" - docstore: BaseStore[str, Document] - """The storage layer for the parent documents""" child_splitter: TextSplitter """The text splitter to use to create child documents.""" - id_key: str = "doc_id" + """The key to use to track the parent id. This will be stored in the metadata of child documents.""" parent_splitter: Optional[TextSplitter] = None """The text splitter to use to create parent documents. If none, then the parent documents will be the raw documents passed in.""" - search_kwargs: dict = Field(default_factory=dict) - """Keyword arguments to pass to the search function.""" - - def _get_relevant_documents( - self, query: str, *, run_manager: CallbackManagerForRetrieverRun - ) -> List[Document]: - """Get documents relevant to a query. - Args: - query: String to find relevant documents for - run_manager: The callbacks handler to use - Returns: - List of relevant documents - """ - sub_docs = self.vectorstore.similarity_search(query, **self.search_kwargs) - # We do this to maintain the order of the ids that are returned - ids = [] - for d in sub_docs: - if d.metadata[self.id_key] not in ids: - ids.append(d.metadata[self.id_key]) - docs = self.docstore.mget(ids) - return [d for d in docs if d is not None] def add_documents( self, documents: List[Document], - ids: Optional[List[str]], + ids: Optional[List[str]] = None, add_to_docstore: bool = True, ) -> None: """Adds documents to the docstore and vectorstores. diff --git a/libs/langchain/langchain/retrievers/self_query/myscale.py b/libs/langchain/langchain/retrievers/self_query/myscale.py index 5c11b53d4..e4c5dde4b 100644 --- a/libs/langchain/langchain/retrievers/self_query/myscale.py +++ b/libs/langchain/langchain/retrievers/self_query/myscale.py @@ -103,7 +103,7 @@ class MyScaleTranslator(Visitor): value = comparison.value comp = comparison.comparator - value = f"'{value}'" if type(value) is str else value + value = f"'{value}'" if isinstance(value, str) else value # convert timestamp for datetime objects if type(value) is datetime.date: diff --git a/libs/langchain/langchain/retrievers/web_research.py b/libs/langchain/langchain/retrievers/web_research.py index f51dbe8b8..30d9c04cb 100644 --- a/libs/langchain/langchain/retrievers/web_research.py +++ b/libs/langchain/langchain/retrievers/web_research.py @@ -61,7 +61,7 @@ class QuestionListOutputParser(PydanticOutputParser): super().__init__(pydantic_object=LineList) def parse(self, text: str) -> LineList: - lines = re.findall(r"\d+\..*?\n", text) + lines = re.findall(r"\d+\..*?(?:\n|$)", text) return LineList(lines=lines) diff --git a/libs/langchain/langchain/schema/runnable/__init__.py b/libs/langchain/langchain/schema/runnable/__init__.py index 0dbabd157..24b235d4d 100644 --- a/libs/langchain/langchain/schema/runnable/__init__.py +++ b/libs/langchain/langchain/schema/runnable/__init__.py @@ -1,3 +1,4 @@ +from langchain.schema.runnable._locals import GetLocalVar, PutLocalVar from langchain.schema.runnable.base import ( Runnable, RunnableBinding, @@ -6,11 +7,14 @@ from langchain.schema.runnable.base import ( RunnableSequence, RunnableWithFallbacks, ) -from langchain.schema.runnable.config import RunnableConfig +from langchain.schema.runnable.config import RunnableConfig, patch_config from langchain.schema.runnable.passthrough import RunnablePassthrough from langchain.schema.runnable.router import RouterInput, RouterRunnable __all__ = [ + "patch_config", + "GetLocalVar", + "PutLocalVar", "RouterInput", "RouterRunnable", "Runnable", diff --git a/libs/langchain/langchain/schema/runnable/_locals.py b/libs/langchain/langchain/schema/runnable/_locals.py new file mode 100644 index 000000000..5b2f8e758 --- /dev/null +++ b/libs/langchain/langchain/schema/runnable/_locals.py @@ -0,0 +1,167 @@ +from __future__ import annotations + +from typing import ( + TYPE_CHECKING, + Any, + AsyncIterator, + Dict, + Iterator, + Mapping, + Optional, + Union, +) + +from langchain.load.serializable import Serializable +from langchain.schema.runnable.base import Input, Output, Runnable +from langchain.schema.runnable.config import RunnableConfig +from langchain.schema.runnable.passthrough import RunnablePassthrough + +if TYPE_CHECKING: + from langchain.callbacks.manager import ( + AsyncCallbackManagerForChainRun, + CallbackManagerForChainRun, + ) + + +class PutLocalVar(RunnablePassthrough): + key: Union[str, Mapping[str, str]] + """The key(s) to use for storing the input variable(s) in local state. + + If a string is provided then the entire input is stored under that key. If a + Mapping is provided, then the map values are gotten from the input and + stored in local state under the map keys. + """ + + def __init__(self, key: Union[str, Mapping[str, str]], **kwargs: Any) -> None: + super().__init__(key=key, **kwargs) + + def _concat_put( + self, + input: Input, + *, + config: Optional[RunnableConfig] = None, + replace: bool = False, + ) -> None: + if config is None: + raise ValueError( + "PutLocalVar should only be used in a RunnableSequence, and should " + "therefore always receive a non-null config." + ) + if isinstance(self.key, str): + if self.key not in config["_locals"] or replace: + config["_locals"][self.key] = input + else: + config["_locals"][self.key] += input + elif isinstance(self.key, Mapping): + if not isinstance(input, Mapping): + raise TypeError( + f"Received key of type Mapping but input of type {type(input)}. " + f"input is expected to be of type Mapping when key is Mapping." + ) + for input_key, put_key in self.key.items(): + if put_key not in config["_locals"] or replace: + config["_locals"][put_key] = input[input_key] + else: + config["_locals"][put_key] += input[input_key] + else: + raise TypeError( + f"`key` should be a string or Mapping[str, str], received type " + f"{(type(self.key))}." + ) + + def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Input: + self._concat_put(input, config=config, replace=True) + return super().invoke(input, config=config) + + async def ainvoke( + self, + input: Input, + config: Optional[RunnableConfig] = None, + **kwargs: Optional[Any], + ) -> Input: + self._concat_put(input, config=config, replace=True) + return await super().ainvoke(input, config=config) + + def transform( + self, + input: Iterator[Input], + config: Optional[RunnableConfig] = None, + **kwargs: Optional[Any], + ) -> Iterator[Input]: + for chunk in super().transform(input, config=config): + self._concat_put(chunk, config=config) + yield chunk + + async def atransform( + self, + input: AsyncIterator[Input], + config: Optional[RunnableConfig] = None, + **kwargs: Optional[Any], + ) -> AsyncIterator[Input]: + async for chunk in super().atransform(input, config=config): + self._concat_put(chunk, config=config) + yield chunk + + +class GetLocalVar( + Serializable, Runnable[Input, Union[Output, Dict[str, Union[Input, Output]]]] +): + key: str + """The key to extract from the local state.""" + passthrough_key: Optional[str] = None + """The key to use for passing through the invocation input. + + If None, then only the value retrieved from local state is returned. Otherwise a + dictionary ``{self.key: <>, self.passthrough_key: <>}`` + is returned. + """ + + def __init__(self, key: str, **kwargs: Any) -> None: + super().__init__(key=key, **kwargs) + + def _get( + self, + input: Input, + run_manager: Union[CallbackManagerForChainRun, Any], + config: RunnableConfig, + ) -> Union[Output, Dict[str, Union[Input, Output]]]: + if self.passthrough_key: + return { + self.key: config["_locals"][self.key], + self.passthrough_key: input, + } + else: + return config["_locals"][self.key] + + async def _aget( + self, + input: Input, + run_manager: AsyncCallbackManagerForChainRun, + config: RunnableConfig, + ) -> Union[Output, Dict[str, Union[Input, Output]]]: + return self._get(input, run_manager, config) + + def invoke( + self, input: Input, config: Optional[RunnableConfig] = None + ) -> Union[Output, Dict[str, Union[Input, Output]]]: + if config is None: + raise ValueError( + "GetLocalVar should only be used in a RunnableSequence, and should " + "therefore always receive a non-null config." + ) + + return self._call_with_config(self._get, input, config) + + async def ainvoke( + self, + input: Input, + config: Optional[RunnableConfig] = None, + **kwargs: Optional[Any], + ) -> Union[Output, Dict[str, Union[Input, Output]]]: + if config is None: + raise ValueError( + "GetLocalVar should only be used in a RunnableSequence, and should " + "therefore always receive a non-null config." + ) + + return await self._acall_with_config(self._aget, input, config) diff --git a/libs/langchain/langchain/schema/runnable/base.py b/libs/langchain/langchain/schema/runnable/base.py index 87490cdd1..bdbd7fc69 100644 --- a/libs/langchain/langchain/schema/runnable/base.py +++ b/libs/langchain/langchain/schema/runnable/base.py @@ -1,10 +1,10 @@ from __future__ import annotations import asyncio -import copy +import inspect import threading from abc import ABC, abstractmethod -from concurrent.futures import FIRST_COMPLETED, ThreadPoolExecutor, wait +from concurrent.futures import FIRST_COMPLETED, wait from functools import partial from itertools import tee from typing import ( @@ -34,11 +34,17 @@ if TYPE_CHECKING: ) -from langchain.callbacks.base import BaseCallbackManager from langchain.load.dump import dumpd from langchain.load.serializable import Serializable from langchain.pydantic_v1 import Field -from langchain.schema.runnable.config import RunnableConfig +from langchain.schema.runnable.config import ( + RunnableConfig, + ensure_config, + get_async_callback_manager_for_config, + get_callback_manager_for_config, + get_executor_for_config, + patch_config, +) from langchain.schema.runnable.utils import ( accepts_run_manager, accepts_run_manager_and_config, @@ -98,8 +104,6 @@ class Runnable(Generic[Input, Output], ABC): self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, **kwargs: Optional[Any], ) -> List[Output]: """ @@ -112,15 +116,13 @@ class Runnable(Generic[Input, Output], ABC): if len(inputs) == 1: return [self.invoke(inputs[0], configs[0], **kwargs)] - with ThreadPoolExecutor(max_workers=max_concurrency) as executor: + with get_executor_for_config(configs[0]) as executor: return list(executor.map(partial(self.invoke, **kwargs), inputs, configs)) async def abatch( self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, **kwargs: Optional[Any], ) -> List[Output]: """ @@ -130,7 +132,7 @@ class Runnable(Generic[Input, Output], ABC): configs = self._get_config_list(config, len(inputs)) coros = map(partial(self.ainvoke, **kwargs), inputs, configs) - return await gather_with_concurrency(max_concurrency, *coros) + return await gather_with_concurrency(configs[0].get("max_concurrency"), *coros) def stream( self, @@ -210,6 +212,13 @@ class Runnable(Generic[Input, Output], ABC): """ return RunnableBinding(bound=self, kwargs=kwargs) + def map(self) -> Runnable[List[Input], List[Output]]: + """ + Return a new Runnable that maps a list of inputs to a list of outputs, + by calling invoke() with each input. + """ + return RunnableEach(bound=self) + def with_fallbacks( self, fallbacks: Sequence[Runnable[Input, Output]], @@ -231,6 +240,8 @@ class Runnable(Generic[Input, Output], ABC): Helper method to get a list of configs from a single config or a list of configs, useful for subclasses overriding batch() or abatch(). """ + if length < 1: + raise ValueError(f"length must be >= 1, but got {length}") if isinstance(config, list) and len(config) != length: raise ValueError( f"config must be a list of the same length as inputs, " @@ -238,9 +249,9 @@ class Runnable(Generic[Input, Output], ABC): ) return ( - config + list(map(ensure_config, config)) if isinstance(config, list) - else [config.copy() if config is not None else {} for _ in range(length)] + else [patch_config(config, deep_copy_locals=True) for _ in range(length)] ) def _call_with_config( @@ -256,14 +267,8 @@ class Runnable(Generic[Input, Output], ABC): ) -> Output: """Helper method to transform an Input value to an Output value, with callbacks. Use this method to implement invoke() in subclasses.""" - from langchain.callbacks.manager import CallbackManager - - config = config or {} - callback_manager = CallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - inheritable_tags=config.get("tags"), - inheritable_metadata=config.get("metadata"), - ) + config = ensure_config(config) + callback_manager = get_callback_manager_for_config(config) run_manager = callback_manager.on_chain_start( dumpd(self), input, @@ -303,14 +308,8 @@ class Runnable(Generic[Input, Output], ABC): ) -> Output: """Helper method to transform an Input value to an Output value, with callbacks. Use this method to implement ainvoke() in subclasses.""" - from langchain.callbacks.manager import AsyncCallbackManager - - config = config or {} - callback_manager = AsyncCallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - inheritable_tags=config.get("tags"), - inheritable_metadata=config.get("metadata"), - ) + config = ensure_config(config) + callback_manager = get_async_callback_manager_for_config(config) run_manager = await callback_manager.on_chain_start( dumpd(self), input, @@ -358,8 +357,6 @@ class Runnable(Generic[Input, Output], ABC): """Helper method to transform an Iterator of Input values into an Iterator of Output values, with callbacks. Use this to implement `stream()` or `transform()` in Runnable subclasses.""" - from langchain.callbacks.manager import CallbackManager - # tee the input so we can iterate over it twice input_for_tracing, input_for_transform = tee(input, 2) # Start the input iterator to ensure the input runnable starts before this one @@ -368,12 +365,8 @@ class Runnable(Generic[Input, Output], ABC): final_output: Optional[Output] = None final_output_supported = True - config = config or {} - callback_manager = CallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - inheritable_tags=config.get("tags"), - inheritable_metadata=config.get("metadata"), - ) + config = ensure_config(config) + callback_manager = get_callback_manager_for_config(config) run_manager = callback_manager.on_chain_start( dumpd(self), {"input": ""}, @@ -444,8 +437,6 @@ class Runnable(Generic[Input, Output], ABC): """Helper method to transform an Async Iterator of Input values into an Async Iterator of Output values, with callbacks. Use this to implement `astream()` or `atransform()` in Runnable subclasses.""" - from langchain.callbacks.manager import AsyncCallbackManager - # tee the input so we can iterate over it twice input_for_tracing, input_for_transform = atee(input, 2) # Start the input iterator to ensure the input runnable starts before this one @@ -454,12 +445,8 @@ class Runnable(Generic[Input, Output], ABC): final_output: Optional[Output] = None final_output_supported = True - config = config or {} - callback_manager = AsyncCallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - inheritable_tags=config.get("tags"), - inheritable_metadata=config.get("metadata"), - ) + config = ensure_config(config) + callback_manager = get_async_callback_manager_for_config(config) run_manager = await callback_manager.on_chain_start( dumpd(self), {"input": ""}, @@ -535,19 +522,9 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): yield from self.fallbacks def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output: - from langchain.callbacks.manager import CallbackManager - # setup callbacks - config = config or {} - callback_manager = CallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - local_callbacks=None, - verbose=False, - inheritable_tags=config.get("tags"), - local_tags=None, - inheritable_metadata=config.get("metadata"), - local_metadata=None, - ) + config = ensure_config(config) + callback_manager = get_callback_manager_for_config(config) # start the root run run_manager = callback_manager.on_chain_start(dumpd(self), input) first_error = None @@ -555,7 +532,7 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): try: output = runnable.invoke( input, - patch_config(config, run_manager.get_child()), + patch_config(config, callbacks=run_manager.get_child()), ) except self.exceptions_to_handle as e: if first_error is None: @@ -577,19 +554,9 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): config: Optional[RunnableConfig] = None, **kwargs: Optional[Any], ) -> Output: - from langchain.callbacks.manager import AsyncCallbackManager - # setup callbacks - config = config or {} - callback_manager = AsyncCallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - local_callbacks=None, - verbose=False, - inheritable_tags=config.get("tags"), - local_tags=None, - inheritable_metadata=config.get("metadata"), - local_metadata=None, - ) + config = ensure_config(config) + callback_manager = get_async_callback_manager_for_config(config) # start the root run run_manager = await callback_manager.on_chain_start(dumpd(self), input) @@ -598,7 +565,7 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): try: output = await runnable.ainvoke( input, - patch_config(config, run_manager.get_child()), + patch_config(config, callbacks=run_manager.get_child()), ) except self.exceptions_to_handle as e: if first_error is None: @@ -618,8 +585,6 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, **kwargs: Optional[Any], ) -> List[Output]: from langchain.callbacks.manager import CallbackManager @@ -653,10 +618,9 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): inputs, [ # each step a child run of the corresponding root run - patch_config(config, rm.get_child()) + patch_config(config, callbacks=rm.get_child()) for rm, config in zip(run_managers, configs) ], - max_concurrency=max_concurrency, ) except self.exceptions_to_handle as e: if first_error is None: @@ -679,14 +643,9 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, **kwargs: Optional[Any], ) -> List[Output]: - from langchain.callbacks.manager import ( - AsyncCallbackManager, - AsyncCallbackManagerForChainRun, - ) + from langchain.callbacks.manager import AsyncCallbackManager # setup callbacks configs = self._get_config_list(config, len(inputs)) @@ -717,10 +676,9 @@ class RunnableWithFallbacks(Serializable, Runnable[Input, Output]): inputs, [ # each step a child run of the corresponding root run - patch_config(config, rm.get_child()) + patch_config(config, callbacks=rm.get_child()) for rm, config in zip(run_managers, configs) ], - max_concurrency=max_concurrency, ) except self.exceptions_to_handle as e: if first_error is None: @@ -808,19 +766,9 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): ) def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output: - from langchain.callbacks.manager import CallbackManager - # setup callbacks - config = config or {} - callback_manager = CallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - local_callbacks=None, - verbose=False, - inheritable_tags=config.get("tags"), - local_tags=None, - inheritable_metadata=config.get("metadata"), - local_metadata=None, - ) + config = ensure_config(config) + callback_manager = get_callback_manager_for_config(config) # start the root run run_manager = callback_manager.on_chain_start(dumpd(self), input) @@ -830,7 +778,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): input = step.invoke( input, # mark each step as a child run - patch_config(config, run_manager.get_child()), + patch_config(config, callbacks=run_manager.get_child()), ) # finish the root run except (KeyboardInterrupt, Exception) as e: @@ -846,19 +794,9 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): config: Optional[RunnableConfig] = None, **kwargs: Optional[Any], ) -> Output: - from langchain.callbacks.manager import AsyncCallbackManager - # setup callbacks - config = config or {} - callback_manager = AsyncCallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - local_callbacks=None, - verbose=False, - inheritable_tags=config.get("tags"), - local_tags=None, - inheritable_metadata=config.get("metadata"), - local_metadata=None, - ) + config = ensure_config(config) + callback_manager = get_async_callback_manager_for_config(config) # start the root run run_manager = await callback_manager.on_chain_start(dumpd(self), input) @@ -868,7 +806,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): input = await step.ainvoke( input, # mark each step as a child run - patch_config(config, run_manager.get_child()), + patch_config(config, callbacks=run_manager.get_child()), ) # finish the root run except (KeyboardInterrupt, Exception) as e: @@ -882,8 +820,6 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, **kwargs: Optional[Any], ) -> List[Output]: from langchain.callbacks.manager import CallbackManager @@ -915,10 +851,9 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): inputs, [ # each step a child run of the corresponding root run - patch_config(config, rm.get_child()) + patch_config(config, callbacks=rm.get_child()) for rm, config in zip(run_managers, configs) ], - max_concurrency=max_concurrency, ) # finish the root runs except (KeyboardInterrupt, Exception) as e: @@ -934,8 +869,6 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, **kwargs: Optional[Any], ) -> List[Output]: from langchain.callbacks.manager import ( @@ -972,10 +905,9 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): inputs, [ # each step a child run of the corresponding root run - patch_config(config, rm.get_child()) + patch_config(config, callbacks=rm.get_child()) for rm, config in zip(run_managers, configs) ], - max_concurrency=max_concurrency, ) # finish the root runs except (KeyboardInterrupt, Exception) as e: @@ -993,19 +925,9 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): config: Optional[RunnableConfig] = None, **kwargs: Optional[Any], ) -> Iterator[Output]: - from langchain.callbacks.manager import CallbackManager - # setup callbacks - config = config or {} - callback_manager = CallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - local_callbacks=None, - verbose=False, - inheritable_tags=config.get("tags"), - local_tags=None, - inheritable_metadata=config.get("metadata"), - local_metadata=None, - ) + config = ensure_config(config) + callback_manager = get_callback_manager_for_config(config) # start the root run run_manager = callback_manager.on_chain_start(dumpd(self), input) @@ -1024,7 +946,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): input = step.invoke( input, # mark each step as a child run - patch_config(config, run_manager.get_child()), + patch_config(config, callbacks=run_manager.get_child()), ) except (KeyboardInterrupt, Exception) as e: run_manager.on_chain_error(e) @@ -1036,12 +958,13 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): try: # stream the first of the last steps with non-streaming input final_pipeline = steps[streaming_start_index].stream( - input, patch_config(config, run_manager.get_child()) + input, patch_config(config, callbacks=run_manager.get_child()) ) # stream the rest of the last steps with streaming input for step in steps[streaming_start_index + 1 :]: final_pipeline = step.transform( - final_pipeline, patch_config(config, run_manager.get_child()) + final_pipeline, + patch_config(config, callbacks=run_manager.get_child()), ) for output in final_pipeline: yield output @@ -1069,19 +992,9 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): config: Optional[RunnableConfig] = None, **kwargs: Optional[Any], ) -> AsyncIterator[Output]: - from langchain.callbacks.manager import AsyncCallbackManager - # setup callbacks - config = config or {} - callback_manager = AsyncCallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - local_callbacks=None, - verbose=False, - inheritable_tags=config.get("tags"), - local_tags=None, - inheritable_metadata=config.get("metadata"), - local_metadata=None, - ) + config = ensure_config(config) + callback_manager = get_async_callback_manager_for_config(config) # start the root run run_manager = await callback_manager.on_chain_start(dumpd(self), input) @@ -1100,7 +1013,7 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): input = await step.ainvoke( input, # mark each step as a child run - patch_config(config, run_manager.get_child()), + patch_config(config, callbacks=run_manager.get_child()), ) except (KeyboardInterrupt, Exception) as e: await run_manager.on_chain_error(e) @@ -1112,12 +1025,13 @@ class RunnableSequence(Serializable, Runnable[Input, Output]): try: # stream the first of the last steps with non-streaming input final_pipeline = steps[streaming_start_index].astream( - input, patch_config(config, run_manager.get_child()) + input, patch_config(config, callbacks=run_manager.get_child()) ) # stream the rest of the last steps with streaming input for step in steps[streaming_start_index + 1 :]: final_pipeline = step.atransform( - final_pipeline, patch_config(config, run_manager.get_child()) + final_pipeline, + patch_config(config, callbacks=run_manager.get_child()), ) async for output in final_pipeline: yield output @@ -1146,7 +1060,7 @@ class RunnableMapChunk(Dict[str, Any]): """ def __add__(self, other: RunnableMapChunk) -> RunnableMapChunk: - chunk = copy.deepcopy(self) + chunk = RunnableMapChunk(self) for key in other: if key not in chunk or chunk[key] is None: chunk[key] = other[key] @@ -1154,6 +1068,15 @@ class RunnableMapChunk(Dict[str, Any]): chunk[key] += other[key] return chunk + def __radd__(self, other: RunnableMapChunk) -> RunnableMapChunk: + chunk = RunnableMapChunk(other) + for key in self: + if key not in chunk or chunk[key] is None: + chunk[key] = self[key] + elif self[key] is not None: + chunk[key] += self[key] + return chunk + class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): """ @@ -1193,7 +1116,7 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): from langchain.callbacks.manager import CallbackManager # setup callbacks - config = config or {} + config = ensure_config(config) callback_manager = CallbackManager.configure( inheritable_callbacks=config.get("callbacks"), local_callbacks=None, @@ -1210,13 +1133,17 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): try: # copy to avoid issues from the caller mutating the steps during invoke() steps = dict(self.steps) - with ThreadPoolExecutor() as executor: + with get_executor_for_config(config) as executor: futures = [ executor.submit( step.invoke, input, # mark each step as a child run - patch_config(config, run_manager.get_child()), + patch_config( + config, + deep_copy_locals=True, + callbacks=run_manager.get_child(), + ), ) for step in steps.values() ] @@ -1235,19 +1162,9 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): config: Optional[RunnableConfig] = None, **kwargs: Optional[Any], ) -> Dict[str, Any]: - from langchain.callbacks.manager import AsyncCallbackManager - # setup callbacks - config = config or {} - callback_manager = AsyncCallbackManager.configure( - inheritable_callbacks=config.get("callbacks"), - local_callbacks=None, - verbose=False, - inheritable_tags=config.get("tags"), - local_tags=None, - inheritable_metadata=config.get("metadata"), - local_metadata=None, - ) + config = ensure_config(config) + callback_manager = get_async_callback_manager_for_config(config) # start the root run run_manager = await callback_manager.on_chain_start(dumpd(self), input) @@ -1260,7 +1177,7 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): step.ainvoke( input, # mark each step as a child run - patch_config(config, run_manager.get_child()), + patch_config(config, callbacks=run_manager.get_child()), ) for step in steps.values() ) @@ -1285,14 +1202,14 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): # Each step gets a copy of the input iterator, # which is consumed in parallel in a separate thread. input_copies = list(safetee(input, len(steps), lock=threading.Lock())) - with ThreadPoolExecutor() as executor: + with get_executor_for_config(config) as executor: # Create the transform() generator for each step named_generators = [ ( name, step.transform( input_copies.pop(), - patch_config(config, run_manager.get_child()), + patch_config(config, callbacks=run_manager.get_child()), ), ) for name, step in steps.items() @@ -1353,7 +1270,8 @@ class RunnableMap(Serializable, Runnable[Input, Dict[str, Any]]): ( name, step.atransform( - input_copies.pop(), patch_config(config, run_manager.get_child()) + input_copies.pop(), + patch_config(config, callbacks=run_manager.get_child()), ), ) for name, step in steps.items() @@ -1414,9 +1332,18 @@ class RunnableLambda(Runnable[Input, Output]): A runnable that runs a callable. """ - def __init__(self, func: Callable[[Input], Output]) -> None: - if callable(func): - self.func = func + def __init__( + self, + func: Union[Callable[[Input], Output], Callable[[Input], Awaitable[Output]]], + afunc: Optional[Callable[[Input], Awaitable[Output]]] = None, + ) -> None: + if afunc is not None: + self.afunc = afunc + + if inspect.iscoroutinefunction(func): + self.afunc = func + elif callable(func): + self.func = cast(Callable[[Input], Output], func) else: raise TypeError( "Expected a callable type for `func`." @@ -1425,17 +1352,122 @@ class RunnableLambda(Runnable[Input, Output]): def __eq__(self, other: Any) -> bool: if isinstance(other, RunnableLambda): - return self.func == other.func + if hasattr(self, "func") and hasattr(other, "func"): + return self.func == other.func + elif hasattr(self, "afunc") and hasattr(other, "afunc"): + return self.afunc == other.afunc + else: + return False else: return False + def _invoke( + self, + input: Input, + run_manager: CallbackManagerForChainRun, + config: RunnableConfig, + ) -> Output: + output = self.func(input) + # If the output is a runnable, invoke it + if isinstance(output, Runnable): + recursion_limit = config["recursion_limit"] + if recursion_limit <= 0: + raise RecursionError( + f"Recursion limit reached when invoking {self} with input {input}." + ) + output = output.invoke( + input, + patch_config( + config, + callbacks=run_manager.get_child(), + recursion_limit=recursion_limit - 1, + ), + ) + return output + + async def _ainvoke( + self, + input: Input, + run_manager: AsyncCallbackManagerForChainRun, + config: RunnableConfig, + ) -> Output: + output = await self.afunc(input) + # If the output is a runnable, invoke it + if isinstance(output, Runnable): + recursion_limit = config["recursion_limit"] + if recursion_limit <= 0: + raise RecursionError( + f"Recursion limit reached when invoking {self} with input {input}." + ) + output = await output.ainvoke( + input, + patch_config( + config, + callbacks=run_manager.get_child(), + recursion_limit=recursion_limit - 1, + ), + ) + return output + def invoke( self, input: Input, config: Optional[RunnableConfig] = None, **kwargs: Optional[Any], ) -> Output: - return self._call_with_config(self.func, input, config) + if hasattr(self, "func"): + return self._call_with_config(self._invoke, input, config) + else: + raise TypeError( + "Cannot invoke a coroutine function synchronously." + "Use `ainvoke` instead." + ) + + async def ainvoke( + self, + input: Input, + config: Optional[RunnableConfig] = None, + **kwargs: Optional[Any], + ) -> Output: + if hasattr(self, "afunc"): + return await self._acall_with_config(self._ainvoke, input, config) + else: + # Delegating to super implementation of ainvoke. + # Uses asyncio executor to run the sync version (invoke) + return await super().ainvoke(input, config) + + +class RunnableEach(Serializable, Runnable[List[Input], List[Output]]): + """ + A runnable that delegates calls to another runnable + with each element of the input sequence. + """ + + bound: Runnable[Input, Output] + + class Config: + arbitrary_types_allowed = True + + @property + def lc_serializable(self) -> bool: + return True + + @property + def lc_namespace(self) -> List[str]: + return self.__class__.__module__.split(".")[:-1] + + def bind(self, **kwargs: Any) -> RunnableEach[Input, Output]: + return RunnableEach(bound=self.bound.bind(**kwargs)) + + def invoke( + self, input: List[Input], config: Optional[RunnableConfig] = None + ) -> List[Output]: + return self.bound.batch(input, config) + + async def ainvoke( + self, input: List[Input], config: Optional[RunnableConfig] = None, **kwargs: Any + ) -> List[Output]: + return await self.bound.abatch(input, config, **kwargs) class RunnableBinding(Serializable, Runnable[Input, Output]): @@ -1481,25 +1513,17 @@ class RunnableBinding(Serializable, Runnable[Input, Output]): self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, **kwargs: Optional[Any], ) -> List[Output]: - return self.bound.batch( - inputs, config, max_concurrency=max_concurrency, **{**self.kwargs, **kwargs} - ) + return self.bound.batch(inputs, config, **{**self.kwargs, **kwargs}) async def abatch( self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None, - *, - max_concurrency: Optional[int] = None, **kwargs: Optional[Any], ) -> List[Output]: - return await self.bound.abatch( - inputs, config, max_concurrency=max_concurrency, **{**self.kwargs, **kwargs} - ) + return await self.bound.abatch(inputs, config, **{**self.kwargs, **kwargs}) def stream( self, @@ -1540,14 +1564,6 @@ class RunnableBinding(Serializable, Runnable[Input, Output]): yield item -def patch_config( - config: RunnableConfig, callback_manager: BaseCallbackManager -) -> RunnableConfig: - config = config.copy() - config["callbacks"] = callback_manager - return config - - def coerce_to_runnable( thing: Union[ Runnable[Input, Output], diff --git a/libs/langchain/langchain/schema/runnable/config.py b/libs/langchain/langchain/schema/runnable/config.py index 715b79fd9..b97d90441 100644 --- a/libs/langchain/langchain/schema/runnable/config.py +++ b/libs/langchain/langchain/schema/runnable/config.py @@ -1,8 +1,13 @@ from __future__ import annotations -from typing import Any, Dict, List, TypedDict +from concurrent.futures import Executor, ThreadPoolExecutor +from contextlib import contextmanager +from copy import deepcopy +from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional, TypedDict -from langchain.callbacks.base import Callbacks +if TYPE_CHECKING: + from langchain.callbacks.base import BaseCallbackManager, Callbacks + from langchain.callbacks.manager import AsyncCallbackManager, CallbackManager class RunnableConfig(TypedDict, total=False): @@ -25,3 +30,77 @@ class RunnableConfig(TypedDict, total=False): Callbacks for this call and any sub-calls (eg. a Chain calling an LLM). Tags are passed to all callbacks, metadata is passed to handle*Start callbacks. """ + + _locals: Dict[str, Any] + """ + Local variables + """ + + max_concurrency: Optional[int] + """ + Maximum number of parallel calls to make. If not provided, defaults to + ThreadPoolExecutor's default. This is ignored if an executor is provided. + """ + + recursion_limit: int + """ + Maximum number of times a call can recurse. If not provided, defaults to 10. + """ + + +def ensure_config(config: Optional[RunnableConfig]) -> RunnableConfig: + empty = RunnableConfig( + tags=[], + metadata={}, + callbacks=None, + _locals={}, + recursion_limit=10, + ) + if config is not None: + empty.update(config) + return empty + + +def patch_config( + config: Optional[RunnableConfig], + *, + deep_copy_locals: bool = False, + callbacks: Optional[BaseCallbackManager] = None, + recursion_limit: Optional[int] = None, +) -> RunnableConfig: + config = ensure_config(config) + if deep_copy_locals: + config["_locals"] = deepcopy(config["_locals"]) + if callbacks is not None: + config["callbacks"] = callbacks + if recursion_limit is not None: + config["recursion_limit"] = recursion_limit + return config + + +def get_callback_manager_for_config(config: RunnableConfig) -> CallbackManager: + from langchain.callbacks.manager import CallbackManager + + return CallbackManager.configure( + inheritable_callbacks=config.get("callbacks"), + inheritable_tags=config.get("tags"), + inheritable_metadata=config.get("metadata"), + ) + + +def get_async_callback_manager_for_config( + config: RunnableConfig, +) -> AsyncCallbackManager: + from langchain.callbacks.manager import AsyncCallbackManager + + return AsyncCallbackManager.configure( + inheritable_callbacks=config.get("callbacks"), + inheritable_tags=config.get("tags"), + inheritable_metadata=config.get("metadata"), + ) + + +@contextmanager +def get_executor_for_config(config: RunnableConfig) -> Generator[Executor, None, None]: + with ThreadPoolExecutor(max_workers=config.get("max_concurrency")) as executor: + yield executor diff --git a/libs/langchain/langchain/schema/runnable/passthrough.py b/libs/langchain/langchain/schema/runnable/passthrough.py index 420b13fe8..d5d7c152c 100644 --- a/libs/langchain/langchain/schema/runnable/passthrough.py +++ b/libs/langchain/langchain/schema/runnable/passthrough.py @@ -47,10 +47,11 @@ class RunnablePassthrough(Serializable, Runnable[Input, Input]): ) -> Iterator[Input]: return self._transform_stream_with_config(input, identity, config) - def atransform( + async def atransform( self, input: AsyncIterator[Input], config: Optional[RunnableConfig] = None, **kwargs: Any, ) -> AsyncIterator[Input]: - return self._atransform_stream_with_config(input, identity, config) + async for chunk in self._atransform_stream_with_config(input, identity, config): + yield chunk diff --git a/libs/langchain/langchain/tools/__init__.py b/libs/langchain/langchain/tools/__init__.py index ad4ae9635..14e34d732 100644 --- a/libs/langchain/langchain/tools/__init__.py +++ b/libs/langchain/langchain/tools/__init__.py @@ -17,6 +17,11 @@ tool for the job. CallbackManagerForToolRun, AsyncCallbackManagerForToolRun """ +from langchain.tools.ainetwork.app import AINAppOps +from langchain.tools.ainetwork.owner import AINOwnerOps +from langchain.tools.ainetwork.rule import AINRuleOps +from langchain.tools.ainetwork.transfer import AINTransfer +from langchain.tools.ainetwork.value import AINValueOps from langchain.tools.arxiv.tool import ArxivQueryRun from langchain.tools.azure_cognitive_services import ( AzureCogsFormRecognizerTool, @@ -118,6 +123,11 @@ from langchain.tools.youtube.search import YouTubeSearchTool from langchain.tools.zapier.tool import ZapierNLAListActions, ZapierNLARunAction __all__ = [ + "AINAppOps", + "AINOwnerOps", + "AINRuleOps", + "AINTransfer", + "AINValueOps", "AIPluginTool", "APIOperation", "ArxivQueryRun", diff --git a/libs/langchain/langchain/tools/ainetwork/app.py b/libs/langchain/langchain/tools/ainetwork/app.py new file mode 100644 index 000000000..26599d75d --- /dev/null +++ b/libs/langchain/langchain/tools/ainetwork/app.py @@ -0,0 +1,95 @@ +import builtins +import json +from enum import Enum +from typing import List, Optional, Type, Union + +from langchain.callbacks.manager import AsyncCallbackManagerForToolRun +from langchain.pydantic_v1 import BaseModel, Field +from langchain.tools.ainetwork.base import AINBaseTool + + +class AppOperationType(str, Enum): + SET_ADMIN = "SET_ADMIN" + GET_CONFIG = "GET_CONFIG" + + +class AppSchema(BaseModel): + type: AppOperationType = Field(...) + appName: str = Field(..., description="Name of the application on the blockchain") + address: Optional[Union[str, List[str]]] = Field( + None, + description=( + "A single address or a list of addresses. Default: current session's " + "address" + ), + ) + + +class AINAppOps(AINBaseTool): + name: str = "AINappOps" + description: str = """ +Create an app in the AINetwork Blockchain database by creating the /apps/ path. +An address set as `admin` can grant `owner` rights to other addresses (refer to `AINownerOps` for more details). +Also, `admin` is initialized to have all `owner` permissions and `rule` allowed for that path. + +## appName Rule +- [a-z_0-9]+ + +## address Rules +- 0x[0-9a-fA-F]{40} +- Defaults to the current session's address +- Multiple addresses can be specified if needed + +## SET_ADMIN Example 1 +- type: SET_ADMIN +- appName: ain_project + +### Result: +1. Path /apps/ain_project created. +2. Current session's address registered as admin. + +## SET_ADMIN Example 2 +- type: SET_ADMIN +- appName: test_project +- address: [, ] + +### Result: +1. Path /apps/test_project created. +2. and registered as admin. + +""" # noqa: E501 + args_schema: Type[BaseModel] = AppSchema + + async def _arun( + self, + type: AppOperationType, + appName: str, + address: Optional[Union[str, List[str]]] = None, + run_manager: Optional[AsyncCallbackManagerForToolRun] = None, + ) -> str: + from ain.types import ValueOnlyTransactionInput + from ain.utils import getTimestamp + + try: + if type is AppOperationType.SET_ADMIN: + if address is None: + address = self.interface.wallet.defaultAccount.address + if isinstance(address, str): + address = [address] + + res = await self.interface.db.ref( + f"/manage_app/{appName}/create/{getTimestamp()}" + ).setValue( + transactionInput=ValueOnlyTransactionInput( + value={"admin": {address: True for address in address}} + ) + ) + elif type is AppOperationType.GET_CONFIG: + res = await self.interface.db.ref( + f"/manage_app/{appName}/config" + ).getValue() + else: + raise ValueError(f"Unsupported 'type': {type}.") + return json.dumps(res, ensure_ascii=False) + except Exception as e: + return f"{builtins.type(e).__name__}: {str(e)}" diff --git a/libs/langchain/langchain/tools/ainetwork/base.py b/libs/langchain/langchain/tools/ainetwork/base.py new file mode 100644 index 000000000..789976130 --- /dev/null +++ b/libs/langchain/langchain/tools/ainetwork/base.py @@ -0,0 +1,71 @@ +"""Base class for AINetwork tools.""" +from __future__ import annotations + +import asyncio +import threading +from enum import Enum +from typing import TYPE_CHECKING, Any, Optional + +from langchain.callbacks.manager import CallbackManagerForToolRun +from langchain.pydantic_v1 import Field +from langchain.tools.ainetwork.utils import authenticate +from langchain.tools.base import BaseTool + +if TYPE_CHECKING: + from ain.ain import Ain + + +class OperationType(str, Enum): + SET = "SET" + GET = "GET" + + +class AINBaseTool(BaseTool): + """Base class for the AINetwork tools.""" + + interface: Ain = Field(default_factory=authenticate) + """The interface object for the AINetwork Blockchain.""" + + def _run( + self, + *args: Any, + run_manager: Optional[CallbackManagerForToolRun] = None, + **kwargs: Any, + ) -> str: + try: + loop = asyncio.get_event_loop() + except RuntimeError: + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + if loop.is_closed(): + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + if loop.is_running(): + result_container = [] + + def thread_target() -> None: + nonlocal result_container + new_loop = asyncio.new_event_loop() + asyncio.set_event_loop(new_loop) + try: + result_container.append( + new_loop.run_until_complete(self._arun(*args, **kwargs)) + ) + except Exception as e: + result_container.append(e) + finally: + new_loop.close() + + thread = threading.Thread(target=thread_target) + thread.start() + thread.join() + result = result_container[0] + if isinstance(result, Exception): + raise result + return result + + else: + result = loop.run_until_complete(self._arun(*args, **kwargs)) + loop.close() + return result diff --git a/libs/langchain/langchain/tools/ainetwork/owner.py b/libs/langchain/langchain/tools/ainetwork/owner.py new file mode 100644 index 000000000..42a2b18d8 --- /dev/null +++ b/libs/langchain/langchain/tools/ainetwork/owner.py @@ -0,0 +1,110 @@ +import builtins +import json +from typing import List, Optional, Type, Union + +from langchain.callbacks.manager import AsyncCallbackManagerForToolRun +from langchain.pydantic_v1 import BaseModel, Field +from langchain.tools.ainetwork.base import AINBaseTool, OperationType + + +class RuleSchema(BaseModel): + type: OperationType = Field(...) + path: str = Field(..., description="Blockchain reference path") + address: Optional[Union[str, List[str]]] = Field( + None, description="A single address or a list of addresses" + ) + write_owner: Optional[bool] = Field( + False, description="Authority to edit the `owner` property of the path" + ) + write_rule: Optional[bool] = Field( + False, description="Authority to edit `write rule` for the path" + ) + write_function: Optional[bool] = Field( + False, description="Authority to `set function` for the path" + ) + branch_owner: Optional[bool] = Field( + False, description="Authority to initialize `owner` of sub-paths" + ) + + +class AINOwnerOps(AINBaseTool): + name: str = "AINownerOps" + description: str = """ +Rules for `owner` in AINetwork Blockchain database. +An address set as `owner` can modify permissions according to its granted authorities + +## Path Rule +- (/[a-zA-Z_0-9]+)+ +- Permission checks ascend from the most specific (child) path to broader (parent) paths until an `owner` is located. + +## Address Rules +- 0x[0-9a-fA-F]{40}: 40-digit hexadecimal address +- *: All addresses permitted +- Defaults to the current session's address + +## SET +- `SET` alters permissions for specific addresses, while other addresses remain unaffected. +- When removing an address of `owner`, set all authorities for that address to false. +- message `write_owner permission evaluated false` if fail + +### Example +- type: SET +- path: /apps/langchain +- address: [
    ,
    ] +- write_owner: True +- write_rule: True +- write_function: True +- branch_owner: True + +## GET +- Provides all addresses with `owner` permissions and their authorities in the path. + +### Example +- type: GET +- path: /apps/langchain +""" # noqa: E501 + args_schema: Type[BaseModel] = RuleSchema + + async def _arun( + self, + type: OperationType, + path: str, + address: Optional[Union[str, List[str]]] = None, + write_owner: Optional[bool] = None, + write_rule: Optional[bool] = None, + write_function: Optional[bool] = None, + branch_owner: Optional[bool] = None, + run_manager: Optional[AsyncCallbackManagerForToolRun] = None, + ) -> str: + from ain.types import ValueOnlyTransactionInput + + try: + if type is OperationType.SET: + if address is None: + address = self.interface.wallet.defaultAccount.address + if isinstance(address, str): + address = [address] + res = await self.interface.db.ref(path).setOwner( + transactionInput=ValueOnlyTransactionInput( + value={ + ".owner": { + "owners": { + address: { + "write_owner": write_owner or False, + "write_rule": write_rule or False, + "write_function": write_function or False, + "branch_owner": branch_owner or False, + } + for address in address + } + } + } + ) + ) + elif type is OperationType.GET: + res = await self.interface.db.ref(path).getOwner() + else: + raise ValueError(f"Unsupported 'type': {type}.") + return json.dumps(res, ensure_ascii=False) + except Exception as e: + return f"{builtins.type(e).__name__}: {str(e)}" diff --git a/libs/langchain/langchain/tools/ainetwork/rule.py b/libs/langchain/langchain/tools/ainetwork/rule.py new file mode 100644 index 000000000..d66fd2020 --- /dev/null +++ b/libs/langchain/langchain/tools/ainetwork/rule.py @@ -0,0 +1,77 @@ +import builtins +import json +from typing import Optional, Type + +from langchain.callbacks.manager import AsyncCallbackManagerForToolRun +from langchain.pydantic_v1 import BaseModel, Field +from langchain.tools.ainetwork.base import AINBaseTool, OperationType + + +class RuleSchema(BaseModel): + type: OperationType = Field(...) + path: str = Field(..., description="Path on the blockchain where the rule applies") + eval: Optional[str] = Field(None, description="eval string to determine permission") + + +class AINRuleOps(AINBaseTool): + name: str = "AINruleOps" + description: str = """ +Covers the write `rule` for the AINetwork Blockchain database. The SET type specifies write permissions using the `eval` variable as a JavaScript eval string. +In order to AINvalueOps with SET at the path, the execution result of the `eval` string must be true. + +## Path Rules +1. Allowed characters for directory: `[a-zA-Z_0-9]` +2. Use `$` for template variables as directory. + +## Eval String Special Variables +- auth.addr: Address of the writer for the path +- newData: New data for the path +- data: Current data for the path +- currentTime: Time in seconds +- lastBlockNumber: Latest processed block number + +## Eval String Functions +- getValue() +- getRule() +- getOwner() +- getFunction() +- evalRule(, , auth, currentTime) +- evalOwner(, 'write_owner', auth) + +## SET Example +- type: SET +- path: /apps/langchain_project_1/$from/$to/$img +- eval: auth.addr===$from&&!getValue('/apps/image_db/'+$img) + +## GET Example +- type: GET +- path: /apps/langchain_project_1 +""" # noqa: E501 + args_schema: Type[BaseModel] = RuleSchema + + async def _arun( + self, + type: OperationType, + path: str, + eval: Optional[str] = None, + run_manager: Optional[AsyncCallbackManagerForToolRun] = None, + ) -> str: + from ain.types import ValueOnlyTransactionInput + + try: + if type is OperationType.SET: + if eval is None: + raise ValueError("'eval' is required for SET operation.") + + res = await self.interface.db.ref(path).setRule( + transactionInput=ValueOnlyTransactionInput( + value={".rule": {"write": eval}} + ) + ) + elif type is OperationType.GET: + res = await self.interface.db.ref(path).getRule() + else: + raise ValueError(f"Unsupported 'type': {type}.") + return json.dumps(res, ensure_ascii=False) + except Exception as e: + return f"{builtins.type(e).__name__}: {str(e)}" diff --git a/libs/langchain/langchain/tools/ainetwork/transfer.py b/libs/langchain/langchain/tools/ainetwork/transfer.py new file mode 100644 index 000000000..b267f724a --- /dev/null +++ b/libs/langchain/langchain/tools/ainetwork/transfer.py @@ -0,0 +1,29 @@ +import json +from typing import Optional, Type + +from langchain.callbacks.manager import AsyncCallbackManagerForToolRun +from langchain.pydantic_v1 import BaseModel, Field +from langchain.tools.ainetwork.base import AINBaseTool + + +class TransferSchema(BaseModel): + address: str = Field(..., description="Address to transfer AIN to") + amount: int = Field(..., description="Amount of AIN to transfer") + + +class AINTransfer(AINBaseTool): + name: str = "AINtransfer" + description: str = "Transfers AIN to a specified address" + args_schema: Type[TransferSchema] = TransferSchema + + async def _arun( + self, + address: str, + amount: int, + run_manager: Optional[AsyncCallbackManagerForToolRun] = None, + ) -> str: + try: + res = await self.interface.wallet.transfer(address, amount, nonce=-1) + return json.dumps(res, ensure_ascii=False) + except Exception as e: + return f"{type(e).__name__}: {str(e)}" diff --git a/libs/langchain/langchain/tools/ainetwork/utils.py b/libs/langchain/langchain/tools/ainetwork/utils.py new file mode 100644 index 000000000..0f8179a60 --- /dev/null +++ b/libs/langchain/langchain/tools/ainetwork/utils.py @@ -0,0 +1,62 @@ +"""AINetwork Blockchain tool utils.""" +from __future__ import annotations + +import os +from typing import TYPE_CHECKING, Literal, Optional + +if TYPE_CHECKING: + from ain.ain import Ain + + +def authenticate(network: Optional[Literal["mainnet", "testnet"]] = "testnet") -> Ain: + """Authenticate using the AIN Blockchain""" + + try: + from ain.ain import Ain + except ImportError as e: + raise ImportError( + "Cannot import ain-py related modules. Please install the package with " + "`pip install ain-py`." + ) from e + + if network == "mainnet": + provider_url = "https://mainnet-api.ainetwork.ai/" + chain_id = 1 + if "AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY" in os.environ: + private_key = os.environ["AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY"] + else: + raise EnvironmentError( + "Error: The AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY environmental variable " + "has not been set." + ) + elif network == "testnet": + provider_url = "https://testnet-api.ainetwork.ai/" + chain_id = 0 + if "AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY" in os.environ: + private_key = os.environ["AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY"] + else: + raise EnvironmentError( + "Error: The AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY environmental variable " + "has not been set." + ) + elif network is None: + if ( + "AIN_BLOCKCHAIN_PROVIDER_URL" in os.environ + and "AIN_BLOCKCHAIN_CHAIN_ID" in os.environ + and "AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY" in os.environ + ): + provider_url = os.environ["AIN_BLOCKCHAIN_PROVIDER_URL"] + chain_id = int(os.environ["AIN_BLOCKCHAIN_CHAIN_ID"]) + private_key = os.environ["AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY"] + else: + raise EnvironmentError( + "Error: The AIN_BLOCKCHAIN_PROVIDER_URL and " + "AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY and AIN_BLOCKCHAIN_CHAIN_ID " + "environmental variable has not been set." + ) + else: + raise ValueError(f"Unsupported 'network': {network}") + + ain = Ain(provider_url, chain_id) + ain.wallet.addAndSetDefaultAccount(private_key) + return ain diff --git a/libs/langchain/langchain/tools/ainetwork/value.py b/libs/langchain/langchain/tools/ainetwork/value.py new file mode 100644 index 000000000..2e6c92c68 --- /dev/null +++ b/libs/langchain/langchain/tools/ainetwork/value.py @@ -0,0 +1,80 @@ +import builtins +import json +from typing import Optional, Type, Union + +from langchain.callbacks.manager import AsyncCallbackManagerForToolRun +from langchain.pydantic_v1 import BaseModel, Field +from langchain.tools.ainetwork.base import AINBaseTool, OperationType + + +class ValueSchema(BaseModel): + type: OperationType = Field(...) + path: str = Field(..., description="Blockchain reference path") + value: Optional[Union[int, str, float, dict]] = Field( + None, description="Value to be set at the path" + ) + + +class AINValueOps(AINBaseTool): + name: str = "AINvalueOps" + description: str = """ +Covers the read and write value for the AINetwork Blockchain database. + +## SET +- Set a value at a given path + +### Example +- type: SET +- path: /apps/langchain_test_1/object +- value: {1: 2, "34": 56} + +## GET +- Retrieve a value at a given path + +### Example +- type: GET +- path: /apps/langchain_test_1/DB + +## Special paths +- `/accounts/
    /balance`: Account balance +- `/accounts/
    /nonce`: Account nonce +- `/apps`: Applications +- `/consensus`: Consensus +- `/checkin`: Check-in +- `/deposit//
    /`: Deposit +- `/deposit_accounts//
    /`: Deposit accounts +- `/escrow`: Escrow +- `/payments`: Payment +- `/sharding`: Sharding +- `/token/name`: Token name +- `/token/symbol`: Token symbol +- `/token/total_supply`: Token total supply +- `/transfer/
    /
    //value`: Transfer +- `/withdraw//
    /`: Withdraw +""" + args_schema: Type[BaseModel] = ValueSchema + + async def _arun( + self, + type: OperationType, + path: str, + value: Optional[Union[int, str, float, dict]] = None, + run_manager: Optional[AsyncCallbackManagerForToolRun] = None, + ) -> str: + from ain.types import ValueOnlyTransactionInput + + try: + if type is OperationType.SET: + if value is None: + raise ValueError("'value' is required for SET operation.") + + res = await self.interface.db.ref(path).setValue( + transactionInput=ValueOnlyTransactionInput(value=value) + ) + elif type is OperationType.GET: + res = await self.interface.db.ref(path).getValue() + else: + raise ValueError(f"Unsupported 'type': {type}.") + return json.dumps(res, ensure_ascii=False) + except Exception as e: + return f"{builtins.type(e).__name__}: {str(e)}" diff --git a/libs/langchain/langchain/tools/python/tool.py b/libs/langchain/langchain/tools/python/tool.py index 402a115ce..81f917455 100644 --- a/libs/langchain/langchain/tools/python/tool.py +++ b/libs/langchain/langchain/tools/python/tool.py @@ -6,13 +6,13 @@ import re import sys from contextlib import redirect_stdout from io import StringIO -from typing import Any, Dict, Optional +from typing import Any, Dict, Optional, Type from langchain.callbacks.manager import ( AsyncCallbackManagerForToolRun, CallbackManagerForToolRun, ) -from langchain.pydantic_v1 import Field, root_validator +from langchain.pydantic_v1 import BaseModel, Field, root_validator from langchain.tools.base import BaseTool from langchain.utilities import PythonREPL @@ -77,6 +77,10 @@ class PythonREPLTool(BaseTool): return result +class PythonInputs(BaseModel): + query: str = Field(description="code snippet to run") + + class PythonAstREPLTool(BaseTool): """A tool for running python code in a REPL.""" @@ -90,6 +94,7 @@ class PythonAstREPLTool(BaseTool): globals: Optional[Dict] = Field(default_factory=dict) locals: Optional[Dict] = Field(default_factory=dict) sanitize_input: bool = True + args_schema: Type[BaseModel] = PythonInputs @root_validator(pre=True) def validate_python_version(cls, values: Dict) -> Dict: diff --git a/libs/langchain/langchain/utilities/openapi.py b/libs/langchain/langchain/utilities/openapi.py index 34224a2bb..16dd5b680 100644 --- a/libs/langchain/langchain/utilities/openapi.py +++ b/libs/langchain/langchain/utilities/openapi.py @@ -54,7 +54,7 @@ if _PYDANTIC_MAJOR_VERSION == 1: try: from openapi_schema_pydantic import OpenAPI except ImportError: - OpenAPI = object + OpenAPI = object # type: ignore class OpenAPISpec(OpenAPI): """OpenAPI Model that removes mis-formatted parts of the spec.""" diff --git a/libs/langchain/langchain/utilities/redis.py b/libs/langchain/langchain/utilities/redis.py index a9535c442..e6c5cb138 100644 --- a/libs/langchain/langchain/utilities/redis.py +++ b/libs/langchain/langchain/utilities/redis.py @@ -1,16 +1,64 @@ from __future__ import annotations import logging -from typing import ( - TYPE_CHECKING, - Any, -) +import re +from typing import TYPE_CHECKING, Any, List, Optional, Pattern from urllib.parse import urlparse +import numpy as np + +logger = logging.getLogger(__name__) + if TYPE_CHECKING: from redis.client import Redis as RedisType -logger = logging.getLogger(__name__) + +def _array_to_buffer(array: List[float], dtype: Any = np.float32) -> bytes: + return np.array(array).astype(dtype).tobytes() + + +class TokenEscaper: + """ + Escape punctuation within an input string. + """ + + # Characters that RediSearch requires us to escape during queries. + # Source: https://redis.io/docs/stack/search/reference/escaping/#the-rules-of-text-field-tokenization + DEFAULT_ESCAPED_CHARS = r"[,.<>{}\[\]\\\"\':;!@#$%^&*()\-+=~\/]" + + def __init__(self, escape_chars_re: Optional[Pattern] = None): + if escape_chars_re: + self.escaped_chars_re = escape_chars_re + else: + self.escaped_chars_re = re.compile(self.DEFAULT_ESCAPED_CHARS) + + def escape(self, value: str) -> str: + def escape_symbol(match: re.Match) -> str: + value = match.group(0) + return f"\\{value}" + + return self.escaped_chars_re.sub(escape_symbol, value) + + +def check_redis_module_exist(client: RedisType, required_modules: List[dict]) -> None: + """Check if the correct Redis modules are installed.""" + installed_modules = client.module_list() + installed_modules = { + module[b"name"].decode("utf-8"): module for module in installed_modules + } + for module in required_modules: + if module["name"] in installed_modules and int( + installed_modules[module["name"]][b"ver"] + ) >= int(module["ver"]): + return + # otherwise raise error + error_message = ( + "Redis cannot be used as a vector database without RediSearch >=2.4" + "Please head to https://redis.io/docs/stack/search/quick_start/" + "to know more about installing the RediSearch module within Redis Stack." + ) + logger.error(error_message) + raise ValueError(error_message) def get_client(redis_url: str, **kwargs: Any) -> RedisType: diff --git a/libs/langchain/langchain/utilities/serpapi.py b/libs/langchain/langchain/utilities/serpapi.py index ab132b53a..4d5af0997 100644 --- a/libs/langchain/langchain/utilities/serpapi.py +++ b/libs/langchain/langchain/utilities/serpapi.py @@ -129,7 +129,7 @@ class SerpAPIWrapper(BaseModel): """Process response from SerpAPI.""" if "error" in res.keys(): raise ValueError(f"Got error from SerpAPI: {res['error']}") - if "answer_box" in res.keys() and type(res["answer_box"]) == list: + if "answer_box" in res.keys() and isinstance(res["answer_box"], list): res["answer_box"] = res["answer_box"][0] if "answer_box" in res.keys() and "answer" in res["answer_box"].keys(): toret = res["answer_box"]["answer"] diff --git a/libs/langchain/langchain/utilities/spark_sql.py b/libs/langchain/langchain/utilities/spark_sql.py index ffecbe511..20c1e8e5b 100644 --- a/libs/langchain/langchain/utilities/spark_sql.py +++ b/libs/langchain/langchain/utilities/spark_sql.py @@ -179,14 +179,8 @@ class SparkSQL: If the statement throws an error, the error message is returned. """ - try: - from pyspark.errors import PySparkException - except ImportError: - raise ValueError( - "pyspark is not installed. Please install it with `pip install pyspark`" - ) try: return self.run(command, fetch) - except PySparkException as e: + except Exception as e: """Format the error message""" return f"Error: {e}" diff --git a/libs/langchain/langchain/utils/iter.py b/libs/langchain/langchain/utils/iter.py index 1b95f180e..60834163c 100644 --- a/libs/langchain/langchain/utils/iter.py +++ b/libs/langchain/langchain/utils/iter.py @@ -1,10 +1,12 @@ from collections import deque +from itertools import islice from typing import ( Any, ContextManager, Deque, Generator, Generic, + Iterable, Iterator, List, Optional, @@ -161,3 +163,13 @@ class Tee(Generic[T]): # Why this is needed https://stackoverflow.com/a/44638570 safetee = Tee + + +def batch_iterate(size: int, iterable: Iterable[T]) -> Iterator[List[T]]: + """Utility batching function.""" + it = iter(iterable) + while True: + chunk = list(islice(it, size)) + if not chunk: + return + yield chunk diff --git a/libs/langchain/langchain/vectorstores/__init__.py b/libs/langchain/langchain/vectorstores/__init__.py index d815c5a65..d8e3664e0 100644 --- a/libs/langchain/langchain/vectorstores/__init__.py +++ b/libs/langchain/langchain/vectorstores/__init__.py @@ -78,60 +78,60 @@ __all__ = [ "AlibabaCloudOpenSearchSettings", "AnalyticDB", "Annoy", + "Annoy", + "AtlasDB", "AtlasDB", "AwaDB", "AzureSearch", "Bagel", "Cassandra", "Chroma", + "Chroma", + "Clarifai", "Clickhouse", "ClickhouseSettings", "DashVector", "DeepLake", + "DeepLake", "Dingo", "DocArrayHnswSearch", "DocArrayInMemorySearch", - "ElasticVectorSearch", "ElasticKnnSearch", + "ElasticVectorSearch", "ElasticsearchStore", "Epsilla", "FAISS", - "PGEmbedding", "Hologres", "LanceDB", - "MatchingEngine", "Marqo", + "MatchingEngine", "Meilisearch", "Milvus", - "Zilliz", - "SingleStoreDB", - "Chroma", - "Clarifai", - "OpenSearchVectorSearch", - "AtlasDB", - "DeepLake", - "Annoy", "MongoDBAtlasVectorSearch", "MyScale", "MyScaleSettings", "OpenSearchVectorSearch", + "OpenSearchVectorSearch", + "PGEmbedding", + "PGVector", "Pinecone", "Qdrant", "Redis", "Rockset", - "ScaNN", "SKLearnVectorStore", + "ScaNN", + "SingleStoreDB", "SingleStoreDB", "StarRocks", "SupabaseVectorStore", "Tair", "Tigris", "Typesense", + "USearch", "Vectara", "VectorStore", "Weaviate", "ZepVectorStore", "Zilliz", - "PGVector", - "USearch", + "Zilliz", ] diff --git a/libs/langchain/langchain/vectorstores/_pgvector_data_models.py b/libs/langchain/langchain/vectorstores/_pgvector_data_models.py index f44bd2e35..1a4b60776 100644 --- a/libs/langchain/langchain/vectorstores/_pgvector_data_models.py +++ b/libs/langchain/langchain/vectorstores/_pgvector_data_models.py @@ -9,6 +9,8 @@ from langchain.vectorstores.pgvector import BaseModel class CollectionStore(BaseModel): + """Collection store.""" + __tablename__ = "langchain_pg_collection" name = sqlalchemy.Column(sqlalchemy.String) @@ -48,6 +50,8 @@ class CollectionStore(BaseModel): class EmbeddingStore(BaseModel): + """Embedding store.""" + __tablename__ = "langchain_pg_embedding" collection_id = sqlalchemy.Column( diff --git a/libs/langchain/langchain/vectorstores/alibabacloud_opensearch.py b/libs/langchain/langchain/vectorstores/alibabacloud_opensearch.py index f8cf664cc..672994bc3 100644 --- a/libs/langchain/langchain/vectorstores/alibabacloud_opensearch.py +++ b/libs/langchain/langchain/vectorstores/alibabacloud_opensearch.py @@ -12,7 +12,7 @@ logger = logging.getLogger() class AlibabaCloudOpenSearchSettings: - """Alibaba Cloud Opensearch Client Configuration. + """`Alibaba Cloud Opensearch` client configuration. Attribute: endpoint (str) : The endpoint of opensearch instance, You can find it @@ -90,7 +90,7 @@ def create_metadata(fields: Dict[str, Any]) -> Dict[str, Any]: class AlibabaCloudOpenSearch(VectorStore): - """Alibaba Cloud OpenSearch Vector Store""" + """`Alibaba Cloud OpenSearch` vector store.""" def __init__( self, @@ -102,7 +102,7 @@ class AlibabaCloudOpenSearch(VectorStore): from alibabacloud_ha3engine import client, models from alibabacloud_tea_util import models as util_models except ImportError: - raise ValueError( + raise ImportError( "Could not import alibaba cloud opensearch python package. " "Please install it with `pip install alibabacloud-ha3engine`." ) diff --git a/libs/langchain/langchain/vectorstores/analyticdb.py b/libs/langchain/langchain/vectorstores/analyticdb.py index b565a65a2..22e8dd18a 100644 --- a/libs/langchain/langchain/vectorstores/analyticdb.py +++ b/libs/langchain/langchain/vectorstores/analyticdb.py @@ -1,4 +1,3 @@ -"""VectorStore wrapper around a Postgres/PGVector database.""" from __future__ import annotations import logging @@ -25,7 +24,7 @@ Base = declarative_base() # type: Any class AnalyticDB(VectorStore): - """VectorStore implementation using AnalyticDB. + """`AnalyticDB` (distributed PostgreSQL) vector store. AnalyticDB is a distributed full postgresql syntax cloud-native database. - `connection_string` is a postgres connection string. diff --git a/libs/langchain/langchain/vectorstores/annoy.py b/libs/langchain/langchain/vectorstores/annoy.py index f4b7cecf0..22c569781 100644 --- a/libs/langchain/langchain/vectorstores/annoy.py +++ b/libs/langchain/langchain/vectorstores/annoy.py @@ -1,4 +1,3 @@ -"""Wrapper around Annoy vector database.""" from __future__ import annotations import os @@ -26,7 +25,7 @@ def dependable_annoy_import() -> Any: try: import annoy except ImportError: - raise ValueError( + raise ImportError( "Could not import annoy python package. " "Please install it with `pip install --user annoy` " ) @@ -34,7 +33,7 @@ def dependable_annoy_import() -> Any: class Annoy(VectorStore): - """Wrapper around Annoy vector database. + """`Annoy` vector store. To use, you should have the ``annoy`` python package installed. diff --git a/libs/langchain/langchain/vectorstores/atlas.py b/libs/langchain/langchain/vectorstores/atlas.py index 31bccb6b4..bdc86e17e 100644 --- a/libs/langchain/langchain/vectorstores/atlas.py +++ b/libs/langchain/langchain/vectorstores/atlas.py @@ -1,4 +1,3 @@ -"""Wrapper around Atlas by Nomic.""" from __future__ import annotations import logging @@ -15,7 +14,9 @@ logger = logging.getLogger(__name__) class AtlasDB(VectorStore): - """Wrapper around Atlas: Nomic's neural database and rhizomatic instrument. + """`Atlas` vector store. + + Atlas is the `Nomic's` neural database and `rhizomatic` instrument. To use, you should have the ``nomic`` python package installed. @@ -61,7 +62,7 @@ class AtlasDB(VectorStore): import nomic from nomic import AtlasProject except ImportError: - raise ValueError( + raise ImportError( "Could not import nomic python package. " "Please install it with `pip install nomic`." ) diff --git a/libs/langchain/langchain/vectorstores/awadb.py b/libs/langchain/langchain/vectorstores/awadb.py index 44317b937..7f5daf171 100644 --- a/libs/langchain/langchain/vectorstores/awadb.py +++ b/libs/langchain/langchain/vectorstores/awadb.py @@ -1,4 +1,3 @@ -"""Wrapper around AwaDB for embedding vectors""" from __future__ import annotations import logging @@ -20,7 +19,7 @@ DEFAULT_TOPN = 4 class AwaDB(VectorStore): - """Interface implemented by AwaDB vector stores.""" + """`AwaDB` vector store.""" _DEFAULT_TABLE_NAME = "langchain_awadb" @@ -50,7 +49,7 @@ class AwaDB(VectorStore): try: import awadb except ImportError: - raise ValueError( + raise ImportError( "Could not import awadb python package. " "Please install it with `pip install awadb`." ) diff --git a/libs/langchain/langchain/vectorstores/azuresearch.py b/libs/langchain/langchain/vectorstores/azuresearch.py index 5f2a45e93..2fad466ad 100644 --- a/libs/langchain/langchain/vectorstores/azuresearch.py +++ b/libs/langchain/langchain/vectorstores/azuresearch.py @@ -1,4 +1,3 @@ -"""Wrapper around Azure Cognitive Search.""" from __future__ import annotations import base64 @@ -74,6 +73,7 @@ def _get_search_client( scoring_profiles: Optional[List[ScoringProfile]] = None, default_scoring_profile: Optional[str] = None, default_fields: Optional[List[SearchField]] = None, + user_agent: Optional[str] = "langchain", ) -> SearchClient: from azure.core.credentials import AzureKeyCredential from azure.core.exceptions import ResourceNotFoundError @@ -81,13 +81,13 @@ def _get_search_client( from azure.search.documents import SearchClient from azure.search.documents.indexes import SearchIndexClient from azure.search.documents.indexes.models import ( + HnswVectorSearchAlgorithmConfiguration, PrioritizedFields, SearchIndex, SemanticConfiguration, SemanticField, SemanticSettings, VectorSearch, - VectorSearchAlgorithmConfiguration, ) default_fields = default_fields or [] @@ -96,7 +96,7 @@ def _get_search_client( else: credential = AzureKeyCredential(key) index_client: SearchIndexClient = SearchIndexClient( - endpoint=endpoint, credential=credential, user_agent="langchain" + endpoint=endpoint, credential=credential, user_agent=user_agent ) try: index_client.get_index(name=index_name) @@ -131,10 +131,10 @@ def _get_search_client( if vector_search is None: vector_search = VectorSearch( algorithm_configurations=[ - VectorSearchAlgorithmConfiguration( + HnswVectorSearchAlgorithmConfiguration( name="default", kind="hnsw", - hnsw_parameters={ # type: ignore + parameters={ # type: ignore "m": 4, "efConstruction": 400, "efSearch": 500, @@ -172,12 +172,12 @@ def _get_search_client( endpoint=endpoint, index_name=index_name, credential=credential, - user_agent="langchain", + user_agent=user_agent, ) class AzureSearch(VectorStore): - """Azure Cognitive Search vector store.""" + """`Azure Cognitive Search` vector store.""" def __init__( self, @@ -228,6 +228,9 @@ class AzureSearch(VectorStore): type=SearchFieldDataType.String, ), ] + user_agent = "langchain" + if "user_agent" in kwargs and kwargs["user_agent"]: + user_agent += " " + kwargs["user_agent"] self.client = _get_search_client( azure_search_endpoint, azure_search_key, @@ -239,6 +242,7 @@ class AzureSearch(VectorStore): scoring_profiles=scoring_profiles, default_scoring_profile=default_scoring_profile, default_fields=default_fields, + user_agent=user_agent, ) self.search_type = search_type self.semantic_configuration_name = semantic_configuration_name @@ -322,6 +326,17 @@ class AzureSearch(VectorStore): raise ValueError(f"search_type of {search_type} not allowed.") return docs + def similarity_search_with_relevance_scores( + self, query: str, k: int = 4, **kwargs: Any + ) -> List[Tuple[Document, float]]: + score_threshold = kwargs.pop("score_threshold", None) + result = self.vector_search_with_score(query, k=k, **kwargs) + return ( + result + if score_threshold is None + else [r for r in result if r[1] >= score_threshold] + ) + def vector_search(self, query: str, k: int = 4, **kwargs: Any) -> List[Document]: """ Returns the most similar indexed documents to the query text. @@ -350,12 +365,19 @@ class AzureSearch(VectorStore): Returns: List of Documents most similar to the query and score for each """ + from azure.search.documents.models import Vector results = self.client.search( search_text="", - vector=np.array(self.embedding_function(query), dtype=np.float32).tolist(), - top_k=k, - vector_fields=FIELDS_CONTENT_VECTOR, + vectors=[ + Vector( + value=np.array( + self.embedding_function(query), dtype=np.float32 + ).tolist(), + k=k, + fields=FIELDS_CONTENT_VECTOR, + ) + ], select=[FIELDS_ID, FIELDS_CONTENT, FIELDS_METADATA], filter=filters, ) @@ -400,12 +422,19 @@ class AzureSearch(VectorStore): Returns: List of Documents most similar to the query and score for each """ + from azure.search.documents.models import Vector results = self.client.search( search_text=query, - vector=np.array(self.embedding_function(query), dtype=np.float32).tolist(), - top_k=k, - vector_fields=FIELDS_CONTENT_VECTOR, + vectors=[ + Vector( + value=np.array( + self.embedding_function(query), dtype=np.float32 + ).tolist(), + k=k, + fields=FIELDS_CONTENT_VECTOR, + ) + ], select=[FIELDS_ID, FIELDS_CONTENT, FIELDS_METADATA], filter=filters, top=k, @@ -453,11 +482,19 @@ class AzureSearch(VectorStore): Returns: List of Documents most similar to the query and score for each """ + from azure.search.documents.models import Vector + results = self.client.search( search_text=query, - vector=np.array(self.embedding_function(query), dtype=np.float32).tolist(), - top_k=50, # Hardcoded value to maximize L2 retrieval - vector_fields=FIELDS_CONTENT_VECTOR, + vectors=[ + Vector( + value=np.array( + self.embedding_function(query), dtype=np.float32 + ).tolist(), + k=50, + fields=FIELDS_CONTENT_VECTOR, + ) + ], select=[FIELDS_ID, FIELDS_CONTENT, FIELDS_METADATA], filter=filters, query_type="semantic", @@ -526,7 +563,7 @@ class AzureSearch(VectorStore): class AzureSearchVectorStoreRetriever(BaseRetriever): - """Retriever that uses Azure Search to find similar documents.""" + """Retriever that uses `Azure Cognitive Search`.""" vectorstore: AzureSearch """Azure Search instance used to find similar documents.""" diff --git a/libs/langchain/langchain/vectorstores/bageldb.py b/libs/langchain/langchain/vectorstores/bageldb.py index ab0e7868c..5b4590933 100644 --- a/libs/langchain/langchain/vectorstores/bageldb.py +++ b/libs/langchain/langchain/vectorstores/bageldb.py @@ -1,4 +1,3 @@ -"""BagelDB integration""" from __future__ import annotations import uuid @@ -43,7 +42,7 @@ def _results_to_docs_and_scores(results: Any) -> List[Tuple[Document, float]]: class Bagel(VectorStore): - """Wrapper around BagelDB.ai vector store. + """``BagelDB.ai`` vector store. To use, you should have the ``betabageldb`` python package installed. @@ -70,7 +69,7 @@ class Bagel(VectorStore): import bagel import bagel.config except ImportError: - raise ValueError("Please install bagel `pip install betabageldb`.") + raise ImportError("Please install bagel `pip install betabageldb`.") if client is not None: self._client_settings = client_settings self._client = client diff --git a/libs/langchain/langchain/vectorstores/base.py b/libs/langchain/langchain/vectorstores/base.py index 5bc624add..2c9ce74ee 100644 --- a/libs/langchain/langchain/vectorstores/base.py +++ b/libs/langchain/langchain/vectorstores/base.py @@ -1,5 +1,3 @@ -"""Interface for vector stores.""" - from __future__ import annotations import asyncio @@ -37,7 +35,7 @@ VST = TypeVar("VST", bound="VectorStore") class VectorStore(ABC): - """Interface for vector stores.""" + """Interface for vector store.""" @abstractmethod def add_texts( @@ -520,7 +518,7 @@ class VectorStore(ABC): class VectorStoreRetriever(BaseRetriever): - """Retriever class for VectorStore.""" + """Base Retriever class for VectorStore.""" vectorstore: VectorStore """VectorStore to use for retrieval.""" diff --git a/libs/langchain/langchain/vectorstores/cassandra.py b/libs/langchain/langchain/vectorstores/cassandra.py index d844a89e1..cc6541b5f 100644 --- a/libs/langchain/langchain/vectorstores/cassandra.py +++ b/libs/langchain/langchain/vectorstores/cassandra.py @@ -1,4 +1,3 @@ -"""Wrapper around Cassandra vector-store capabilities, based on cassIO.""" from __future__ import annotations import typing @@ -19,8 +18,9 @@ CVST = TypeVar("CVST", bound="Cassandra") class Cassandra(VectorStore): - """Wrapper around Cassandra embeddings platform. + """`Cassandra` vector store. + It based on the Cassandra vector-store capabilities, based on cassIO. There is no notion of a default table name, since each embedding function implies its own vector dimension, which is part of the schema. diff --git a/libs/langchain/langchain/vectorstores/chroma.py b/libs/langchain/langchain/vectorstores/chroma.py index 9457419c5..76469357a 100644 --- a/libs/langchain/langchain/vectorstores/chroma.py +++ b/libs/langchain/langchain/vectorstores/chroma.py @@ -1,4 +1,3 @@ -"""Wrapper around ChromaDB embeddings platform.""" from __future__ import annotations import logging @@ -50,7 +49,7 @@ def _results_to_docs_and_scores(results: Any) -> List[Tuple[Document, float]]: class Chroma(VectorStore): - """Wrapper around ChromaDB embeddings platform. + """`ChromaDB` vector store. To use, you should have the ``chromadb`` python package installed. @@ -76,12 +75,12 @@ class Chroma(VectorStore): client: Optional[chromadb.Client] = None, relevance_score_fn: Optional[Callable[[float], float]] = None, ) -> None: - """Initialize with Chroma client.""" + """Initialize with a Chroma client.""" try: import chromadb import chromadb.config except ImportError: - raise ValueError( + raise ImportError( "Could not import chromadb python package. " "Please install it with `pip install chromadb`." ) diff --git a/libs/langchain/langchain/vectorstores/clarifai.py b/libs/langchain/langchain/vectorstores/clarifai.py index 9db4408b2..51d01118f 100644 --- a/libs/langchain/langchain/vectorstores/clarifai.py +++ b/libs/langchain/langchain/vectorstores/clarifai.py @@ -16,7 +16,7 @@ logger = logging.getLogger(__name__) class Clarifai(VectorStore): - """Wrapper around Clarifai AI platform's vector store. + """`Clarifai AI` vector store. To use, you should have the ``clarifai`` python package installed. @@ -55,7 +55,7 @@ class Clarifai(VectorStore): from clarifai.auth.helper import DEFAULT_BASE, ClarifaiAuthHelper from clarifai.client import create_stub except ImportError: - raise ValueError( + raise ImportError( "Could not import clarifai python package. " "Please install it with `pip install clarifai`." ) diff --git a/libs/langchain/langchain/vectorstores/clickhouse.py b/libs/langchain/langchain/vectorstores/clickhouse.py index c0916ec44..68de42963 100644 --- a/libs/langchain/langchain/vectorstores/clickhouse.py +++ b/libs/langchain/langchain/vectorstores/clickhouse.py @@ -1,5 +1,3 @@ -"""Wrapper around open source ClickHouse VectorSearch capability.""" - from __future__ import annotations import json @@ -33,7 +31,7 @@ def has_mul_sub_str(s: str, *args: Any) -> bool: class ClickhouseSettings(BaseSettings): - """ClickHouse Client Configuration + """`ClickHouse` client configuration. Attribute: clickhouse_host (str) : An URL to connect to MyScale backend. @@ -101,7 +99,7 @@ class ClickhouseSettings(BaseSettings): class Clickhouse(VectorStore): - """Wrapper around ClickHouse vector database + """`ClickHouse VectorSearch` vector store. You need a `clickhouse-connect` python package, and a valid account to connect to ClickHouse. @@ -130,7 +128,7 @@ class Clickhouse(VectorStore): try: from clickhouse_connect import get_client except ImportError: - raise ValueError( + raise ImportError( "Could not import clickhouse connect python package. " "Please install it with `pip install clickhouse-connect`." ) diff --git a/libs/langchain/langchain/vectorstores/dashvector.py b/libs/langchain/langchain/vectorstores/dashvector.py index 714c76c00..f3559384a 100644 --- a/libs/langchain/langchain/vectorstores/dashvector.py +++ b/libs/langchain/langchain/vectorstores/dashvector.py @@ -1,4 +1,3 @@ -"""Wrapper around DashVector vector database.""" from __future__ import annotations import logging @@ -23,7 +22,7 @@ logger = logging.getLogger(__name__) class DashVector(VectorStore): - """Wrapper around DashVector vector database. + """`DashVector` vector store. To use, you should have the ``dashvector`` python package installed. diff --git a/libs/langchain/langchain/vectorstores/deeplake.py b/libs/langchain/langchain/vectorstores/deeplake.py index c04d71ace..ed7601832 100644 --- a/libs/langchain/langchain/vectorstores/deeplake.py +++ b/libs/langchain/langchain/vectorstores/deeplake.py @@ -1,4 +1,3 @@ -"""Wrapper around Activeloop Deep Lake.""" from __future__ import annotations import logging @@ -24,9 +23,9 @@ logger = logging.getLogger(__name__) class DeepLake(VectorStore): - """Wrapper around Deep Lake, a data lake for deep learning applications. + """`Activeloop Deep Lake` vector store. - We integrated deeplake's similarity search and filtering for fast prototyping, + We integrated deeplake's similarity search and filtering for fast prototyping. Now, it supports Tensor Query Language (TQL) for production use cases over billion rows. @@ -126,7 +125,7 @@ class DeepLake(VectorStore): self.verbose = verbose if _DEEPLAKE_INSTALLED is False: - raise ValueError( + raise ImportError( "Could not import deeplake python package. " "Please install it with `pip install deeplake[enterprise]`." ) @@ -135,7 +134,7 @@ class DeepLake(VectorStore): kwargs.get("runtime") == {"tensor_db": True} and version_compare(deeplake.__version__, "3.6.7") == -1 ): - raise ValueError( + raise ImportError( "To use tensor_db option you need to update deeplake to `3.6.7`. " f"Currently installed deeplake version is {deeplake.__version__}. " ) diff --git a/libs/langchain/langchain/vectorstores/dingo.py b/libs/langchain/langchain/vectorstores/dingo.py index 44765cdd3..e6d3419c7 100644 --- a/libs/langchain/langchain/vectorstores/dingo.py +++ b/libs/langchain/langchain/vectorstores/dingo.py @@ -1,4 +1,3 @@ -"""Wrapper around the Dingo vector database.""" from __future__ import annotations import logging @@ -16,7 +15,7 @@ logger = logging.getLogger(__name__) class Dingo(VectorStore): - """Wrapper around Dingo vector database. + """`Dingo` vector store. To use, you should have the ``dingodb`` python package installed. diff --git a/libs/langchain/langchain/vectorstores/docarray/base.py b/libs/langchain/langchain/vectorstores/docarray/base.py index 2e693bcde..d3b048610 100644 --- a/libs/langchain/langchain/vectorstores/docarray/base.py +++ b/libs/langchain/langchain/vectorstores/docarray/base.py @@ -33,6 +33,8 @@ def _check_docarray_import() -> None: class DocArrayIndex(VectorStore, ABC): + """Base class for `DocArray` based vector stores.""" + def __init__( self, doc_index: "BaseDocIndex", @@ -67,7 +69,7 @@ class DocArrayIndex(VectorStore, ABC): metadatas: Optional[List[dict]] = None, **kwargs: Any, ) -> List[str]: - """Run more texts through the embeddings and add to the vectorstore. + """Embed texts and add to the vector store. Args: texts: Iterable of strings to add to the vectorstore. diff --git a/libs/langchain/langchain/vectorstores/docarray/hnsw.py b/libs/langchain/langchain/vectorstores/docarray/hnsw.py index 26ed4afac..e1fdc6f07 100644 --- a/libs/langchain/langchain/vectorstores/docarray/hnsw.py +++ b/libs/langchain/langchain/vectorstores/docarray/hnsw.py @@ -1,4 +1,3 @@ -"""Wrapper around Hnswlib store.""" from __future__ import annotations from typing import Any, List, Literal, Optional @@ -11,7 +10,7 @@ from langchain.vectorstores.docarray.base import ( class DocArrayHnswSearch(DocArrayIndex): - """Wrapper around HnswLib storage. + """`HnswLib` storage using `DocArray` package. To use it, you should have the ``docarray`` package with version >=0.32.0 installed. You can install it with `pip install "langchain[docarray]"`. diff --git a/libs/langchain/langchain/vectorstores/docarray/in_memory.py b/libs/langchain/langchain/vectorstores/docarray/in_memory.py index 77570c0b0..9c3b3dcf3 100644 --- a/libs/langchain/langchain/vectorstores/docarray/in_memory.py +++ b/libs/langchain/langchain/vectorstores/docarray/in_memory.py @@ -11,7 +11,7 @@ from langchain.vectorstores.docarray.base import ( class DocArrayInMemorySearch(DocArrayIndex): - """Wrapper around in-memory storage for exact search. + """In-memory `DocArray` storage for exact search. To use it, you should have the ``docarray`` package with version >=0.32.0 installed. You can install it with `pip install "langchain[docarray]"`. diff --git a/libs/langchain/langchain/vectorstores/elastic_vector_search.py b/libs/langchain/langchain/vectorstores/elastic_vector_search.py index f3b8c37e0..978da1d5c 100644 --- a/libs/langchain/langchain/vectorstores/elastic_vector_search.py +++ b/libs/langchain/langchain/vectorstores/elastic_vector_search.py @@ -53,9 +53,9 @@ def _default_script_query(query_vector: List[float], filter: Optional[dict]) -> @deprecated("0.0.265", alternative="ElasticsearchStore class.", pending=True) class ElasticVectorSearch(VectorStore): - """Wrapper around Elasticsearch as a vector database. + """[DEPRECATED] `Elasticsearch` vector store. - To connect to an Elasticsearch instance that does not require + To connect to an `Elasticsearch` instance that does not require login credentials, pass the Elasticsearch URL and index name along with the embedding object to the constructor. @@ -340,11 +340,10 @@ class ElasticVectorSearch(VectorStore): class ElasticKnnSearch(VectorStore): - """ - ElasticKnnSearch is a class for performing k-nearest neighbor - (k-NN) searches on text data using Elasticsearch. + """[DEPRECATED] `Elasticsearch` with k-nearest neighbor search + (`k-NN`) vector store. - This class is used to create an Elasticsearch index of text data that + It creates an Elasticsearch index of text data that can be searched using k-NN search. The text data is transformed into vector embeddings using a provided embedding model, and these embeddings are stored in the Elasticsearch index. diff --git a/libs/langchain/langchain/vectorstores/elasticsearch.py b/libs/langchain/langchain/vectorstores/elasticsearch.py index c8dd59901..d2dd7f768 100644 --- a/libs/langchain/langchain/vectorstores/elasticsearch.py +++ b/libs/langchain/langchain/vectorstores/elasticsearch.py @@ -1,5 +1,3 @@ -"""Wrapper around Elasticsearch vector database.""" - import logging import uuid from abc import ABC, abstractmethod @@ -28,6 +26,8 @@ logger = logging.getLogger(__name__) class BaseRetrievalStrategy(ABC): + """Base class for `Elasticsearch` retrieval strategies.""" + @abstractmethod def query( self, @@ -109,6 +109,8 @@ class BaseRetrievalStrategy(ABC): class ApproxRetrievalStrategy(BaseRetrievalStrategy): + """Approximate retrieval strategy using the `HNSW` algorithm.""" + def __init__( self, query_model_id: Optional[str] = None, @@ -211,6 +213,8 @@ class ApproxRetrievalStrategy(BaseRetrievalStrategy): class ExactRetrievalStrategy(BaseRetrievalStrategy): + """Exact retrieval strategy using the `script_score` query.""" + def query( self, query_vector: Union[List[float], None], @@ -276,6 +280,8 @@ class ExactRetrievalStrategy(BaseRetrievalStrategy): class SparseRetrievalStrategy(BaseRetrievalStrategy): + """Sparse retrieval strategy using the `text_expansion` processor.""" + def __init__(self, model_id: Optional[str] = None): self.model_id = model_id or ".elser_model_1" @@ -355,8 +361,7 @@ class SparseRetrievalStrategy(BaseRetrievalStrategy): class ElasticsearchStore(VectorStore): - - """Wrapper around Elasticsearch search database. + """`Elasticsearch` vector store. Example: .. code-block:: python @@ -710,7 +715,7 @@ class ElasticsearchStore(VectorStore): after deleting documents. Defaults to True. """ try: - from elasticsearch.helpers import bulk + from elasticsearch.helpers import BulkIndexError, bulk except ImportError: raise ImportError( "Could not import elasticsearch python package. " @@ -731,8 +736,10 @@ class ElasticsearchStore(VectorStore): logger.debug(f"Deleted {len(body)} texts from index") return True - except Exception as e: + except BulkIndexError as e: logger.error(f"Error deleting texts: {e}") + firstError = e.errors[0].get("index", {}).get("error", {}) + logger.error(f"First error reason: {firstError.get('reason')}") raise e else: @@ -801,7 +808,7 @@ class ElasticsearchStore(VectorStore): List of ids from adding the texts into the vectorstore. """ try: - from elasticsearch.helpers import bulk + from elasticsearch.helpers import BulkIndexError, bulk except ImportError: raise ImportError( "Could not import elasticsearch python package. " @@ -867,8 +874,10 @@ class ElasticsearchStore(VectorStore): logger.debug(f"added texts {ids} to index") return ids - except Exception as e: + except BulkIndexError as e: logger.error(f"Error adding texts: {e}") + firstError = e.errors[0].get("index", {}).get("error", {}) + logger.error(f"First error reason: {firstError.get('reason')}") raise e else: diff --git a/libs/langchain/langchain/vectorstores/faiss.py b/libs/langchain/langchain/vectorstores/faiss.py index 7e9cb109e..a8c835e5c 100644 --- a/libs/langchain/langchain/vectorstores/faiss.py +++ b/libs/langchain/langchain/vectorstores/faiss.py @@ -1,4 +1,3 @@ -"""Wrapper around FAISS vector database.""" from __future__ import annotations import operator @@ -65,7 +64,7 @@ def _len_check_if_sized(x: Any, y: Any, x_name: str, y_name: str) -> None: class FAISS(VectorStore): - """Wrapper around FAISS vector database. + """`Meta Faiss` vector store. To use, you must have the ``faiss`` python package installed. diff --git a/libs/langchain/langchain/vectorstores/hologres.py b/libs/langchain/langchain/vectorstores/hologres.py index 092dc24c3..ce816e8f9 100644 --- a/libs/langchain/langchain/vectorstores/hologres.py +++ b/libs/langchain/langchain/vectorstores/hologres.py @@ -1,4 +1,3 @@ -"""VectorStore wrapper around a Hologres database.""" from __future__ import annotations import json @@ -16,7 +15,7 @@ _LANGCHAIN_DEFAULT_TABLE_NAME = "langchain_pg_embedding" class HologresWrapper: - """Wrapper around Hologres service.""" + """`Hologres API` wrapper.""" def __init__(self, connection_string: str, ndims: int, table_name: str) -> None: """Initialize the wrapper. @@ -114,7 +113,7 @@ document text);""" class Hologres(VectorStore): - """VectorStore implementation using Hologres. + """`Hologres API` vector store. - `connection_string` is a hologres connection string. - `embedding_function` any embedding function implementing diff --git a/libs/langchain/langchain/vectorstores/lancedb.py b/libs/langchain/langchain/vectorstores/lancedb.py index 2b29f92c7..1a166d4e1 100644 --- a/libs/langchain/langchain/vectorstores/lancedb.py +++ b/libs/langchain/langchain/vectorstores/lancedb.py @@ -1,4 +1,3 @@ -"""Wrapper around LanceDB vector database""" from __future__ import annotations import uuid @@ -10,7 +9,7 @@ from langchain.vectorstores.base import VectorStore class LanceDB(VectorStore): - """Wrapper around LanceDB vector database. + """`LanceDB` vector store. To use, you should have ``lancedb`` python package installed. @@ -36,7 +35,7 @@ class LanceDB(VectorStore): try: import lancedb except ImportError: - raise ValueError( + raise ImportError( "Could not import lancedb python package. " "Please install it with `pip install lancedb`." ) diff --git a/libs/langchain/langchain/vectorstores/marqo.py b/libs/langchain/langchain/vectorstores/marqo.py index 0d1dfe048..b18731e08 100644 --- a/libs/langchain/langchain/vectorstores/marqo.py +++ b/libs/langchain/langchain/vectorstores/marqo.py @@ -1,4 +1,3 @@ -"""Wrapper around weaviate vector database.""" from __future__ import annotations import json @@ -25,7 +24,7 @@ if TYPE_CHECKING: class Marqo(VectorStore): - """Wrapper around Marqo database. + """`Marqo` vector store. Marqo indexes have their own models associated with them to generate your embeddings. This means that you can selected from a range of different models diff --git a/libs/langchain/langchain/vectorstores/matching_engine.py b/libs/langchain/langchain/vectorstores/matching_engine.py index 9d8c55ed4..2bf27af64 100644 --- a/libs/langchain/langchain/vectorstores/matching_engine.py +++ b/libs/langchain/langchain/vectorstores/matching_engine.py @@ -1,4 +1,3 @@ -"""Vertex Matching Engine implementation of the vector store.""" from __future__ import annotations import json @@ -21,7 +20,7 @@ logger = logging.getLogger() class MatchingEngine(VectorStore): - """Vertex Matching Engine implementation of the vector store. + """`Google Vertex AI Matching Engine` vector store. While the embeddings are stored in the Matching Engine, the embedded documents will be stored in GCS. diff --git a/libs/langchain/langchain/vectorstores/meilisearch.py b/libs/langchain/langchain/vectorstores/meilisearch.py index cb9f5d984..05ffb9700 100644 --- a/libs/langchain/langchain/vectorstores/meilisearch.py +++ b/libs/langchain/langchain/vectorstores/meilisearch.py @@ -1,4 +1,3 @@ -"""Wrapper around Meilisearch vector database.""" from __future__ import annotations import uuid @@ -21,7 +20,7 @@ def _create_client( try: import meilisearch except ImportError: - raise ValueError( + raise ImportError( "Could not import meilisearch python package. " "Please install it with `pip install meilisearch`." ) @@ -45,7 +44,7 @@ def _create_client( class Meilisearch(VectorStore): - """Initialize wrapper around Meilisearch vector database. + """`Meilisearch` vector store. To use this, you need to have `meilisearch` python package installed, and a running Meilisearch instance. diff --git a/libs/langchain/langchain/vectorstores/milvus.py b/libs/langchain/langchain/vectorstores/milvus.py index 05ce1b085..e5ee2a015 100644 --- a/libs/langchain/langchain/vectorstores/milvus.py +++ b/libs/langchain/langchain/vectorstores/milvus.py @@ -1,4 +1,3 @@ -"""Wrapper around the Milvus vector database.""" from __future__ import annotations import logging @@ -24,19 +23,18 @@ DEFAULT_MILVUS_CONNECTION = { class Milvus(VectorStore): - """Initialize wrapper around the milvus vector database. + """`Milvus` vector store. - In order to use this you need to have `pymilvus` installed and a - running Milvus + You need to install `pymilvus` and run Milvus. See the following documentation for how to run a Milvus instance: https://milvus.io/docs/install_standalone-docker.md If looking for a hosted Milvus, take a look at this documentation: https://zilliz.com/cloud and make use of the Zilliz vectorstore found in - this project, + this project. - IF USING L2/IP metric IT IS HIGHLY SUGGESTED TO NORMALIZE YOUR DATA. + IF USING L2/IP metric, IT IS HIGHLY SUGGESTED TO NORMALIZE YOUR DATA. Args: embedding_function (Embeddings): Function used to embed the text. @@ -52,6 +50,9 @@ class Milvus(VectorStore): default of index. drop_old (Optional[bool]): Whether to drop the current collection. Defaults to False. + primary_field (str): Name of the primary key field. Defaults to "pk". + text_field (str): Name of the text field. Defaults to "text". + vector_field (str): Name of the vector field. Defaults to "vector". The connection args used for this class comes in the form of a dict, here are a few of the options: @@ -107,6 +108,10 @@ class Milvus(VectorStore): index_params: Optional[dict] = None, search_params: Optional[dict] = None, drop_old: Optional[bool] = False, + *, + primary_field: str = "pk", + text_field: str = "text", + vector_field: str = "vector", ): """Initialize the Milvus vector store.""" try: @@ -138,11 +143,11 @@ class Milvus(VectorStore): self.consistency_level = consistency_level # In order for a collection to be compatible, pk needs to be auto'id and int - self._primary_field = "pk" - # In order for compatiblility, the text field will need to be called "text" - self._text_field = "text" + self._primary_field = primary_field + # In order for compatibility, the text field will need to be called "text" + self._text_field = text_field # In order for compatibility, the vector field needs to be called "vector" - self._vector_field = "vector" + self._vector_field = vector_field self.fields: list[str] = [] # Create the connection to the server if connection_args is None: diff --git a/libs/langchain/langchain/vectorstores/mongodb_atlas.py b/libs/langchain/langchain/vectorstores/mongodb_atlas.py index b7cd5136d..3476c0eb5 100644 --- a/libs/langchain/langchain/vectorstores/mongodb_atlas.py +++ b/libs/langchain/langchain/vectorstores/mongodb_atlas.py @@ -32,7 +32,7 @@ DEFAULT_INSERT_BATCH_SIZE = 100 class MongoDBAtlasVectorSearch(VectorStore): - """Wrapper around MongoDB Atlas Vector Search. + """`MongoDB Atlas Vector Search` vector store. To use, you should have both: - the ``pymongo`` python package installed diff --git a/libs/langchain/langchain/vectorstores/myscale.py b/libs/langchain/langchain/vectorstores/myscale.py index 7bbb20dcf..3c4361fcd 100644 --- a/libs/langchain/langchain/vectorstores/myscale.py +++ b/libs/langchain/langchain/vectorstores/myscale.py @@ -1,4 +1,3 @@ -"""Wrapper around MyScale vector database.""" from __future__ import annotations import json @@ -32,7 +31,7 @@ def has_mul_sub_str(s: str, *args: Any) -> bool: class MyScaleSettings(BaseSettings): - """MyScale Client Configuration + """MyScale client configuration. Attribute: myscale_host (str) : An URL to connect to MyScale backend. @@ -46,7 +45,7 @@ class MyScaleSettings(BaseSettings): table (str) : Table name to operate on. Defaults to 'vector_table'. metric (str) : Metric to compute distance, - supported are ('l2', 'cosine', 'ip'). Defaults to 'cosine'. + supported are ('L2', 'Cosine', 'IP'). Defaults to 'Cosine'. column_map (Dict) : Column type map to project column name onto langchain semantics. Must have keys: `text`, `id`, `vector`, must be same size to number of columns. For example: @@ -69,7 +68,7 @@ class MyScaleSettings(BaseSettings): username: Optional[str] = None password: Optional[str] = None - index_type: str = "IVFFLAT" + index_type: str = "MSTG" index_param: Optional[Dict[str, str]] = None column_map: Dict[str, str] = { @@ -81,7 +80,7 @@ class MyScaleSettings(BaseSettings): database: str = "default" table: str = "langchain" - metric: str = "cosine" + metric: str = "Cosine" def __getitem__(self, item: str) -> Any: return getattr(self, item) @@ -93,13 +92,13 @@ class MyScaleSettings(BaseSettings): class MyScale(VectorStore): - """Wrapper around MyScale vector database + """`MyScale` vector store. You need a `clickhouse-connect` python package, and a valid account to connect to MyScale. - MyScale can not only search with simple vector indexes, - it also supports complex query with multiple conditions, + MyScale can not only search with simple vector indexes. + It also supports a complex query with multiple conditions, constraints and even sub-queries. For more information, please visit @@ -122,7 +121,7 @@ class MyScale(VectorStore): try: from clickhouse_connect import get_client except ImportError: - raise ValueError( + raise ImportError( "Could not import clickhouse connect python package. " "Please install it with `pip install clickhouse-connect`." ) diff --git a/libs/langchain/langchain/vectorstores/opensearch_vector_search.py b/libs/langchain/langchain/vectorstores/opensearch_vector_search.py index 8e84835df..ddc2e72ac 100644 --- a/libs/langchain/langchain/vectorstores/opensearch_vector_search.py +++ b/libs/langchain/langchain/vectorstores/opensearch_vector_search.py @@ -1,4 +1,3 @@ -"""Wrapper around OpenSearch vector database.""" from __future__ import annotations import uuid @@ -26,7 +25,7 @@ def _import_opensearch() -> Any: try: from opensearchpy import OpenSearch except ImportError: - raise ValueError(IMPORT_OPENSEARCH_PY_ERROR) + raise ImportError(IMPORT_OPENSEARCH_PY_ERROR) return OpenSearch @@ -35,7 +34,7 @@ def _import_bulk() -> Any: try: from opensearchpy.helpers import bulk except ImportError: - raise ValueError(IMPORT_OPENSEARCH_PY_ERROR) + raise ImportError(IMPORT_OPENSEARCH_PY_ERROR) return bulk @@ -44,7 +43,7 @@ def _import_not_found_error() -> Any: try: from opensearchpy.exceptions import NotFoundError except ImportError: - raise ValueError(IMPORT_OPENSEARCH_PY_ERROR) + raise ImportError(IMPORT_OPENSEARCH_PY_ERROR) return NotFoundError @@ -54,7 +53,7 @@ def _get_opensearch_client(opensearch_url: str, **kwargs: Any) -> Any: opensearch = _import_opensearch() client = opensearch(opensearch_url, **kwargs) except ValueError as e: - raise ValueError( + raise ImportError( f"OpenSearch client string provided is not in proper format. " f"Got error: {e} " ) @@ -315,7 +314,7 @@ def _get_kwargs_value(kwargs: Any, key: str, default_value: Any) -> Any: class OpenSearchVectorSearch(VectorStore): - """Wrapper around OpenSearch as a vector database. + """`Amazon OpenSearch Vector Engine` vector store. Example: .. code-block:: python diff --git a/libs/langchain/langchain/vectorstores/pgembedding.py b/libs/langchain/langchain/vectorstores/pgembedding.py index 4c820636c..ecdb20a8f 100644 --- a/libs/langchain/langchain/vectorstores/pgembedding.py +++ b/libs/langchain/langchain/vectorstores/pgembedding.py @@ -1,4 +1,3 @@ -"""VectorStore wrapper around a Postgres database.""" from __future__ import annotations import logging @@ -23,11 +22,15 @@ _LANGCHAIN_DEFAULT_COLLECTION_NAME = "langchain" class BaseModel(Base): + """Base model for all SQL stores.""" + __abstract__ = True uuid = sqlalchemy.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) class CollectionStore(BaseModel): + """Collection store.""" + __tablename__ = "langchain_pg_collection" name = sqlalchemy.Column(sqlalchemy.String) @@ -67,6 +70,8 @@ class CollectionStore(BaseModel): class EmbeddingStore(BaseModel): + """Embedding store.""" + __tablename__ = "langchain_pg_embedding" collection_id = sqlalchemy.Column( @@ -87,15 +92,14 @@ class EmbeddingStore(BaseModel): class QueryResult: - """QueryResult is a result from a query.""" + """Result from a query.""" EmbeddingStore: EmbeddingStore distance: float class PGEmbedding(VectorStore): - """ - VectorStore implementation using Postgres and the pg_embedding extension. + """`Postgres` with the `pg_embedding` extension as a vector store. pg_embedding uses sequential scan by default. but you can create a HNSW index using the create_hnsw_index method. diff --git a/libs/langchain/langchain/vectorstores/pgvector.py b/libs/langchain/langchain/vectorstores/pgvector.py index 9581bdc3b..6b02fc19c 100644 --- a/libs/langchain/langchain/vectorstores/pgvector.py +++ b/libs/langchain/langchain/vectorstores/pgvector.py @@ -1,6 +1,6 @@ -"""VectorStore wrapper around a Postgres/PGVector database.""" from __future__ import annotations +import contextlib import enum import logging import uuid @@ -9,6 +9,7 @@ from typing import ( Any, Callable, Dict, + Generator, Iterable, List, Optional, @@ -17,6 +18,7 @@ from typing import ( ) import sqlalchemy +from sqlalchemy import delete from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Session, declarative_base @@ -46,12 +48,14 @@ _LANGCHAIN_DEFAULT_COLLECTION_NAME = "langchain" class BaseModel(Base): + """Base model for the SQL stores.""" + __abstract__ = True uuid = sqlalchemy.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) class PGVector(VectorStore): - """VectorStore implementation using Postgres and pgvector. + """`Postgres`/`PGVector` vector store. To use, you should have the ``pgvector`` python package installed. @@ -169,6 +173,33 @@ class PGVector(VectorStore): session.delete(collection) session.commit() + @contextlib.contextmanager + def _make_session(self) -> Generator[Session, None, None]: + """Create a context manager for the session, bind to _conn string.""" + yield Session(self._conn) + + def delete( + self, + ids: Optional[List[str]] = None, + **kwargs: Any, + ) -> None: + """Delete vectors by ids or uuids. + + Args: + ids: List of ids to delete. + """ + with Session(self._conn) as session: + if ids is not None: + self.logger.debug( + "Trying to delete vectors by ids (represented by the model " + "using the custom ids field)" + ) + stmt = delete(self.EmbeddingStore).where( + self.EmbeddingStore.custom_id.in_(ids) + ) + session.execute(stmt) + session.commit() + def get_collection(self, session: Session) -> Optional["CollectionStore"]: return self.CollectionStore.get_by_name(session, self.collection_name) diff --git a/libs/langchain/langchain/vectorstores/pinecone.py b/libs/langchain/langchain/vectorstores/pinecone.py index 6ecf0b291..c6793b4de 100644 --- a/libs/langchain/langchain/vectorstores/pinecone.py +++ b/libs/langchain/langchain/vectorstores/pinecone.py @@ -1,4 +1,3 @@ -"""Wrapper around Pinecone vector database.""" from __future__ import annotations import logging @@ -17,7 +16,7 @@ logger = logging.getLogger(__name__) class Pinecone(VectorStore): - """Wrapper around Pinecone vector database. + """`Pinecone` vector store. To use, you should have the ``pinecone-client`` python package installed. diff --git a/libs/langchain/langchain/vectorstores/qdrant.py b/libs/langchain/langchain/vectorstores/qdrant.py index f18b2cc91..cdc5bea8e 100644 --- a/libs/langchain/langchain/vectorstores/qdrant.py +++ b/libs/langchain/langchain/vectorstores/qdrant.py @@ -1,4 +1,3 @@ -"""Wrapper around Qdrant vector database.""" from __future__ import annotations import asyncio @@ -40,7 +39,7 @@ if TYPE_CHECKING: class QdrantException(Exception): - """Base class for all the Qdrant related exceptions""" + """`Qdrant` related exceptions.""" def sync_call_fallback(method: Callable) -> Callable: @@ -68,7 +67,7 @@ def sync_call_fallback(method: Callable) -> Callable: class Qdrant(VectorStore): - """Wrapper around Qdrant vector database. + """`Qdrant` vector store. To use you should have the ``qdrant-client`` package installed. @@ -102,7 +101,7 @@ class Qdrant(VectorStore): try: import qdrant_client except ImportError: - raise ValueError( + raise ImportError( "Could not import qdrant-client python package. " "Please install it with `pip install qdrant-client`." ) @@ -266,6 +265,8 @@ class Qdrant(VectorStore): - 'quorum' - query the majority of replicas, return values present in all of them - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to QdrantClient.search() Returns: List of Documents most similar to the query. @@ -340,6 +341,8 @@ class Qdrant(VectorStore): - 'quorum' - query the majority of replicas, return values present in all of them - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to QdrantClient.search() Returns: List of documents most similar to the query text and distance for each. @@ -395,6 +398,9 @@ class Qdrant(VectorStore): - 'quorum' - query the majority of replicas, return values present in all of them - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to + QdrantClient.async_grpc_points.Search(). Returns: List of documents most similar to the query text and distance for each. @@ -449,6 +455,8 @@ class Qdrant(VectorStore): - 'quorum' - query the majority of replicas, return values present in all of them - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to QdrantClient.search() Returns: List of Documents most similar to the query. @@ -505,6 +513,9 @@ class Qdrant(VectorStore): - 'quorum' - query the majority of replicas, return values present in all of them - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to + QdrantClient.async_grpc_points.Search(). Returns: List of Documents most similar to the query. @@ -560,6 +571,8 @@ class Qdrant(VectorStore): - 'quorum' - query the majority of replicas, return values present in all of them - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to QdrantClient.search() Returns: List of documents most similar to the query text and distance for each. @@ -602,6 +615,56 @@ class Qdrant(VectorStore): for result in results ] + async def _asearch_with_score_by_vector( + self, + embedding: List[float], + *, + k: int = 4, + filter: Optional[MetadataFilter] = None, + search_params: Optional[common_types.SearchParams] = None, + offset: int = 0, + score_threshold: Optional[float] = None, + consistency: Optional[common_types.ReadConsistency] = None, + with_vectors: bool = False, + **kwargs: Any, + ) -> Any: + """Return results most similar to embedding vector.""" + from qdrant_client import grpc # noqa + from qdrant_client.conversions.conversion import RestToGrpc + from qdrant_client.http import models as rest + + if filter is not None and isinstance(filter, dict): + warnings.warn( + "Using dict as a `filter` is deprecated. Please use qdrant-client " + "filters directly: " + "https://qdrant.tech/documentation/concepts/filtering/", + DeprecationWarning, + ) + qdrant_filter = self._qdrant_filter_from_dict(filter) + else: + qdrant_filter = filter + + if qdrant_filter is not None and isinstance(qdrant_filter, rest.Filter): + qdrant_filter = RestToGrpc.convert_filter(qdrant_filter) + + response = await self.client.async_grpc_points.Search( + grpc.SearchPoints( + collection_name=self.collection_name, + vector_name=self.vector_name, + vector=embedding, + filter=qdrant_filter, + params=search_params, + limit=k, + offset=offset, + with_payload=grpc.WithPayloadSelector(enable=True), + with_vectors=grpc.WithVectorsSelector(enable=with_vectors), + score_threshold=score_threshold, + read_consistency=consistency, + **kwargs, + ) + ) + return response + @sync_call_fallback async def asimilarity_search_with_score_by_vector( self, @@ -642,43 +705,22 @@ class Qdrant(VectorStore): - 'quorum' - query the majority of replicas, return values present in all of them - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to + QdrantClient.async_grpc_points.Search(). Returns: List of documents most similar to the query text and distance for each. """ - from qdrant_client import grpc # noqa - from qdrant_client.conversions.conversion import RestToGrpc - from qdrant_client.http import models as rest - - if filter is not None and isinstance(filter, dict): - warnings.warn( - "Using dict as a `filter` is deprecated. Please use qdrant-client " - "filters directly: " - "https://qdrant.tech/documentation/concepts/filtering/", - DeprecationWarning, - ) - qdrant_filter = self._qdrant_filter_from_dict(filter) - else: - qdrant_filter = filter - - if qdrant_filter is not None and isinstance(qdrant_filter, rest.Filter): - qdrant_filter = RestToGrpc.convert_filter(qdrant_filter) - - response = await self.client.async_grpc_points.Search( - grpc.SearchPoints( - collection_name=self.collection_name, - vector_name=self.vector_name, - vector=embedding, - filter=qdrant_filter, - params=search_params, - limit=k, - offset=offset, - with_payload=grpc.WithPayloadSelector(enable=True), - with_vectors=grpc.WithVectorsSelector(enable=False), - score_threshold=score_threshold, - read_consistency=consistency, - **kwargs, - ) + response = await self._asearch_with_score_by_vector( + embedding, + k=k, + filter=filter, + search_params=search_params, + offset=offset, + score_threshold=score_threshold, + consistency=consistency, + **kwargs, ) return [ @@ -697,6 +739,10 @@ class Qdrant(VectorStore): k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, + filter: Optional[MetadataFilter] = None, + search_params: Optional[common_types.SearchParams] = None, + score_threshold: Optional[float] = None, + consistency: Optional[common_types.ReadConsistency] = None, **kwargs: Any, ) -> List[Document]: """Return docs selected using the maximal marginal relevance. @@ -713,12 +759,41 @@ class Qdrant(VectorStore): of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5. + filter: Filter by metadata. Defaults to None. + search_params: Additional search params + score_threshold: + Define a minimal score threshold for the result. + If defined, less similar results will not be returned. + Score of the returned result might be higher or smaller than the + threshold depending on the Distance function used. + E.g. for cosine similarity only higher scores will be returned. + consistency: + Read consistency of the search. Defines how many replicas should be + queried before returning the result. + Values: + - int - number of replicas to query, values should present in all + queried replicas + - 'majority' - query all replicas, but return values present in the + majority of replicas + - 'quorum' - query the majority of replicas, return values present in + all of them + - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to QdrantClient.search() Returns: List of Documents selected by maximal marginal relevance. """ query_embedding = self._embed_query(query) return self.max_marginal_relevance_search_by_vector( - query_embedding, k, fetch_k, lambda_mult, **kwargs + query_embedding, + k=k, + fetch_k=fetch_k, + lambda_mult=lambda_mult, + filter=filter, + search_params=search_params, + score_threshold=score_threshold, + consistency=consistency, + **kwargs, ) @sync_call_fallback @@ -728,6 +803,10 @@ class Qdrant(VectorStore): k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, + filter: Optional[MetadataFilter] = None, + search_params: Optional[common_types.SearchParams] = None, + score_threshold: Optional[float] = None, + consistency: Optional[common_types.ReadConsistency] = None, **kwargs: Any, ) -> List[Document]: """Return docs selected using the maximal marginal relevance. @@ -744,12 +823,42 @@ class Qdrant(VectorStore): of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5. + filter: Filter by metadata. Defaults to None. + search_params: Additional search params + score_threshold: + Define a minimal score threshold for the result. + If defined, less similar results will not be returned. + Score of the returned result might be higher or smaller than the + threshold depending on the Distance function used. + E.g. for cosine similarity only higher scores will be returned. + consistency: + Read consistency of the search. Defines how many replicas should be + queried before returning the result. + Values: + - int - number of replicas to query, values should present in all + queried replicas + - 'majority' - query all replicas, but return values present in the + majority of replicas + - 'quorum' - query the majority of replicas, return values present in + all of them + - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to + QdrantClient.async_grpc_points.Search(). Returns: List of Documents selected by maximal marginal relevance. """ query_embedding = self._embed_query(query) return await self.amax_marginal_relevance_search_by_vector( - query_embedding, k, fetch_k, lambda_mult, **kwargs + query_embedding, + k=k, + fetch_k=fetch_k, + lambda_mult=lambda_mult, + filter=filter, + search_params=search_params, + score_threshold=score_threshold, + consistency=consistency, + **kwargs, ) def max_marginal_relevance_search_by_vector( @@ -758,6 +867,10 @@ class Qdrant(VectorStore): k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, + filter: Optional[MetadataFilter] = None, + search_params: Optional[common_types.SearchParams] = None, + score_threshold: Optional[float] = None, + consistency: Optional[common_types.ReadConsistency] = None, **kwargs: Any, ) -> List[Document]: """Return docs selected using the maximal marginal relevance. @@ -773,11 +886,40 @@ class Qdrant(VectorStore): of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5. + filter: Filter by metadata. Defaults to None. + search_params: Additional search params + score_threshold: + Define a minimal score threshold for the result. + If defined, less similar results will not be returned. + Score of the returned result might be higher or smaller than the + threshold depending on the Distance function used. + E.g. for cosine similarity only higher scores will be returned. + consistency: + Read consistency of the search. Defines how many replicas should be + queried before returning the result. + Values: + - int - number of replicas to query, values should present in all + queried replicas + - 'majority' - query all replicas, but return values present in the + majority of replicas + - 'quorum' - query the majority of replicas, return values present in + all of them + - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to QdrantClient.search() Returns: List of Documents selected by maximal marginal relevance. """ results = self.max_marginal_relevance_search_with_score_by_vector( - embedding=embedding, k=k, fetch_k=fetch_k, lambda_mult=lambda_mult, **kwargs + embedding, + k=k, + fetch_k=fetch_k, + lambda_mult=lambda_mult, + filter=filter, + search_params=search_params, + score_threshold=score_threshold, + consistency=consistency, + **kwargs, ) return list(map(itemgetter(0), results)) @@ -788,6 +930,10 @@ class Qdrant(VectorStore): k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, + filter: Optional[MetadataFilter] = None, + search_params: Optional[common_types.SearchParams] = None, + score_threshold: Optional[float] = None, + consistency: Optional[common_types.ReadConsistency] = None, **kwargs: Any, ) -> List[Document]: """Return docs selected using the maximal marginal relevance. @@ -802,12 +948,42 @@ class Qdrant(VectorStore): of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5. + filter: Filter by metadata. Defaults to None. + search_params: Additional search params + score_threshold: + Define a minimal score threshold for the result. + If defined, less similar results will not be returned. + Score of the returned result might be higher or smaller than the + threshold depending on the Distance function used. + E.g. for cosine similarity only higher scores will be returned. + consistency: + Read consistency of the search. Defines how many replicas should be + queried before returning the result. + Values: + - int - number of replicas to query, values should present in all + queried replicas + - 'majority' - query all replicas, but return values present in the + majority of replicas + - 'quorum' - query the majority of replicas, return values present in + all of them + - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to + QdrantClient.async_grpc_points.Search(). Returns: List of Documents selected by maximal marginal relevance and distance for each. """ results = await self.amax_marginal_relevance_search_with_score_by_vector( - embedding, k, fetch_k, lambda_mult, **kwargs + embedding, + k=k, + fetch_k=fetch_k, + lambda_mult=lambda_mult, + filter=filter, + search_params=search_params, + score_threshold=score_threshold, + consistency=consistency, + **kwargs, ) return list(map(itemgetter(0), results)) @@ -817,6 +993,10 @@ class Qdrant(VectorStore): k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, + filter: Optional[MetadataFilter] = None, + search_params: Optional[common_types.SearchParams] = None, + score_threshold: Optional[float] = None, + consistency: Optional[common_types.ReadConsistency] = None, **kwargs: Any, ) -> List[Tuple[Document, float]]: """Return docs selected using the maximal marginal relevance. @@ -831,6 +1011,27 @@ class Qdrant(VectorStore): of diversity among the results with 0 corresponding to maximum diversity and 1 to minimum diversity. Defaults to 0.5. + filter: Filter by metadata. Defaults to None. + search_params: Additional search params + score_threshold: + Define a minimal score threshold for the result. + If defined, less similar results will not be returned. + Score of the returned result might be higher or smaller than the + threshold depending on the Distance function used. + E.g. for cosine similarity only higher scores will be returned. + consistency: + Read consistency of the search. Defines how many replicas should be + queried before returning the result. + Values: + - int - number of replicas to query, values should present in all + queried replicas + - 'majority' - query all replicas, but return values present in the + majority of replicas + - 'quorum' - query the majority of replicas, return values present in + all of them + - 'all' - query all replicas, and return values present in all replicas + **kwargs: + Any other named arguments to pass through to QdrantClient.search() Returns: List of Documents selected by maximal marginal relevance and distance for each. @@ -842,9 +1043,14 @@ class Qdrant(VectorStore): results = self.client.search( collection_name=self.collection_name, query_vector=query_vector, + query_filter=filter, + search_params=search_params, + limit=fetch_k, with_payload=True, with_vectors=True, - limit=fetch_k, + score_threshold=score_threshold, + consistency=consistency, + **kwargs, ) embeddings = [ result.vector.get(self.vector_name) # type: ignore[index, union-attr] @@ -872,6 +1078,10 @@ class Qdrant(VectorStore): k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, + filter: Optional[MetadataFilter] = None, + search_params: Optional[common_types.SearchParams] = None, + score_threshold: Optional[float] = None, + consistency: Optional[common_types.ReadConsistency] = None, **kwargs: Any, ) -> List[Tuple[Document, float]]: """Return docs selected using the maximal marginal relevance. @@ -890,18 +1100,17 @@ class Qdrant(VectorStore): List of Documents selected by maximal marginal relevance and distance for each. """ - from qdrant_client import grpc # noqa from qdrant_client.conversions.conversion import GrpcToRest - response = await self.client.async_grpc_points.Search( - grpc.SearchPoints( - collection_name=self.collection_name, - vector_name=self.vector_name, - vector=embedding, - with_payload=grpc.WithPayloadSelector(enable=True), - with_vectors=grpc.WithVectorsSelector(enable=True), - limit=fetch_k, - ) + response = await self._asearch_with_score_by_vector( + embedding, + k=fetch_k, + filter=filter, + search_params=search_params, + score_threshold=score_threshold, + consistency=consistency, + with_vectors=True, + **kwargs, ) results = [ GrpcToRest.convert_vectors(result.vectors) for result in response.result diff --git a/libs/langchain/langchain/vectorstores/redis.py b/libs/langchain/langchain/vectorstores/redis.py deleted file mode 100644 index 198e5d706..000000000 --- a/libs/langchain/langchain/vectorstores/redis.py +++ /dev/null @@ -1,666 +0,0 @@ -"""Wrapper around Redis vector database.""" - -from __future__ import annotations - -import json -import logging -import uuid -from typing import ( - TYPE_CHECKING, - Any, - Callable, - Dict, - Iterable, - List, - Literal, - Mapping, - Optional, - Tuple, - Type, -) - -import numpy as np - -from langchain.callbacks.manager import ( - AsyncCallbackManagerForRetrieverRun, - CallbackManagerForRetrieverRun, -) -from langchain.docstore.document import Document -from langchain.embeddings.base import Embeddings -from langchain.pydantic_v1 import root_validator -from langchain.utilities.redis import get_client -from langchain.utils import get_from_dict_or_env -from langchain.vectorstores.base import VectorStore, VectorStoreRetriever - -logger = logging.getLogger(__name__) - -if TYPE_CHECKING: - from redis.client import Redis as RedisType - from redis.commands.search.query import Query - - -# required modules -REDIS_REQUIRED_MODULES = [ - {"name": "search", "ver": 20400}, - {"name": "searchlight", "ver": 20400}, -] - -# distance mmetrics -REDIS_DISTANCE_METRICS = Literal["COSINE", "IP", "L2"] - - -def _check_redis_module_exist(client: RedisType, required_modules: List[dict]) -> None: - """Check if the correct Redis modules are installed.""" - installed_modules = client.module_list() - installed_modules = { - module[b"name"].decode("utf-8"): module for module in installed_modules - } - for module in required_modules: - if module["name"] in installed_modules and int( - installed_modules[module["name"]][b"ver"] - ) >= int(module["ver"]): - return - # otherwise raise error - error_message = ( - "Redis cannot be used as a vector database without RediSearch >=2.4" - "Please head to https://redis.io/docs/stack/search/quick_start/" - "to know more about installing the RediSearch module within Redis Stack." - ) - logger.error(error_message) - raise ValueError(error_message) - - -def _check_index_exists(client: RedisType, index_name: str) -> bool: - """Check if Redis index exists.""" - try: - client.ft(index_name).info() - except: # noqa: E722 - logger.info("Index does not exist") - return False - logger.info("Index already exists") - return True - - -def _redis_key(prefix: str) -> str: - """Redis key schema for a given prefix.""" - return f"{prefix}:{uuid.uuid4().hex}" - - -def _redis_prefix(index_name: str) -> str: - """Redis key prefix for a given index.""" - return f"doc:{index_name}" - - -def _default_relevance_score(val: float) -> float: - return 1 - val - - -class Redis(VectorStore): - """Wrapper around Redis vector database. - - To use, you should have the ``redis`` python package installed. - - Example: - .. code-block:: python - - from langchain.vectorstores import Redis - from langchain.embeddings import OpenAIEmbeddings - - embeddings = OpenAIEmbeddings() - vectorstore = Redis( - redis_url="redis://username:password@localhost:6379" - index_name="my-index", - embedding_function=embeddings.embed_query, - ) - - To use a redis replication setup with multiple redis server and redis sentinels - set "redis_url" to "redis+sentinel://" scheme. With this url format a path is - needed holding the name of the redis service within the sentinels to get the - correct redis server connection. The default service name is "mymaster". - - An optional username or password is used for booth connections to the rediserver - and the sentinel, different passwords for server and sentinel are not supported. - And as another constraint only one sentinel instance can be given: - - Example: - .. code-block:: python - - vectorstore = Redis( - redis_url="redis+sentinel://username:password@sentinelhost:26379/mymaster/0" - index_name="my-index", - embedding_function=embeddings.embed_query, - ) - """ - - def __init__( - self, - redis_url: str, - index_name: str, - embedding_function: Callable, - content_key: str = "content", - metadata_key: str = "metadata", - vector_key: str = "content_vector", - relevance_score_fn: Optional[Callable[[float], float]] = None, - distance_metric: REDIS_DISTANCE_METRICS = "COSINE", - **kwargs: Any, - ): - """Initialize with necessary components.""" - self.embedding_function = embedding_function - self.index_name = index_name - try: - redis_client = get_client(redis_url=redis_url, **kwargs) - # check if redis has redisearch module installed - _check_redis_module_exist(redis_client, REDIS_REQUIRED_MODULES) - except ValueError as e: - raise ValueError(f"Redis failed to connect: {e}") - - self.client = redis_client - self.content_key = content_key - self.metadata_key = metadata_key - self.vector_key = vector_key - self.distance_metric = distance_metric - self.relevance_score_fn = relevance_score_fn - - @property - def embeddings(self) -> Optional[Embeddings]: - # TODO: Accept embedding object directly - return None - - def _select_relevance_score_fn(self) -> Callable[[float], float]: - if self.relevance_score_fn: - return self.relevance_score_fn - - if self.distance_metric == "COSINE": - return self._cosine_relevance_score_fn - elif self.distance_metric == "IP": - return self._max_inner_product_relevance_score_fn - elif self.distance_metric == "L2": - return self._euclidean_relevance_score_fn - else: - return _default_relevance_score - - def _create_index(self, dim: int = 1536) -> None: - try: - from redis.commands.search.field import TextField, VectorField - from redis.commands.search.indexDefinition import IndexDefinition, IndexType - except ImportError: - raise ValueError( - "Could not import redis python package. " - "Please install it with `pip install redis`." - ) - - # Check if index exists - if not _check_index_exists(self.client, self.index_name): - # Define schema - schema = ( - TextField(name=self.content_key), - TextField(name=self.metadata_key), - VectorField( - self.vector_key, - "FLAT", - { - "TYPE": "FLOAT32", - "DIM": dim, - "DISTANCE_METRIC": self.distance_metric, - }, - ), - ) - prefix = _redis_prefix(self.index_name) - - # Create Redis Index - self.client.ft(self.index_name).create_index( - fields=schema, - definition=IndexDefinition(prefix=[prefix], index_type=IndexType.HASH), - ) - - def add_texts( - self, - texts: Iterable[str], - metadatas: Optional[List[dict]] = None, - embeddings: Optional[List[List[float]]] = None, - batch_size: int = 1000, - **kwargs: Any, - ) -> List[str]: - """Add more texts to the vectorstore. - - Args: - texts (Iterable[str]): Iterable of strings/text to add to the vectorstore. - metadatas (Optional[List[dict]], optional): Optional list of metadatas. - Defaults to None. - embeddings (Optional[List[List[float]]], optional): Optional pre-generated - embeddings. Defaults to None. - keys (List[str]) or ids (List[str]): Identifiers of entries. - Defaults to None. - batch_size (int, optional): Batch size to use for writes. Defaults to 1000. - - Returns: - List[str]: List of ids added to the vectorstore - """ - ids = [] - prefix = _redis_prefix(self.index_name) - - # Get keys or ids from kwargs - # Other vectorstores use ids - keys_or_ids = kwargs.get("keys", kwargs.get("ids")) - - # Write data to redis - pipeline = self.client.pipeline(transaction=False) - for i, text in enumerate(texts): - # Use provided values by default or fallback - key = keys_or_ids[i] if keys_or_ids else _redis_key(prefix) - metadata = metadatas[i] if metadatas else {} - embedding = embeddings[i] if embeddings else self.embedding_function(text) - pipeline.hset( - key, - mapping={ - self.content_key: text, - self.vector_key: np.array(embedding, dtype=np.float32).tobytes(), - self.metadata_key: json.dumps(metadata), - }, - ) - ids.append(key) - - # Write batch - if i % batch_size == 0: - pipeline.execute() - - # Cleanup final batch - pipeline.execute() - return ids - - def similarity_search( - self, query: str, k: int = 4, **kwargs: Any - ) -> List[Document]: - """ - Returns the most similar indexed documents to the query text. - - Args: - query (str): The query text for which to find similar documents. - k (int): The number of documents to return. Default is 4. - - Returns: - List[Document]: A list of documents that are most similar to the query text. - """ - docs_and_scores = self.similarity_search_with_score(query, k=k) - return [doc for doc, _ in docs_and_scores] - - def similarity_search_limit_score( - self, query: str, k: int = 4, score_threshold: float = 0.2, **kwargs: Any - ) -> List[Document]: - """ - Returns the most similar indexed documents to the query text within the - score_threshold range. - - Args: - query (str): The query text for which to find similar documents. - k (int): The number of documents to return. Default is 4. - score_threshold (float): The minimum matching score required for a document - to be considered a match. Defaults to 0.2. - Because the similarity calculation algorithm is based on cosine - similarity, the smaller the angle, the higher the similarity. - - Returns: - List[Document]: A list of documents that are most similar to the query text, - including the match score for each document. - - Note: - If there are no documents that satisfy the score_threshold value, - an empty list is returned. - - """ - docs_and_scores = self.similarity_search_with_score(query, k=k) - return [doc for doc, score in docs_and_scores if score < score_threshold] - - def _prepare_query(self, k: int) -> Query: - try: - from redis.commands.search.query import Query - except ImportError: - raise ValueError( - "Could not import redis python package. " - "Please install it with `pip install redis`." - ) - # Prepare the Query - hybrid_fields = "*" - base_query = ( - f"{hybrid_fields}=>[KNN {k} @{self.vector_key} $vector AS vector_score]" - ) - return_fields = [self.metadata_key, self.content_key, "vector_score", "id"] - return ( - Query(base_query) - .return_fields(*return_fields) - .sort_by("vector_score") - .paging(0, k) - .dialect(2) - ) - - def similarity_search_with_score( - self, query: str, k: int = 4 - ) -> List[Tuple[Document, float]]: - """Return docs most similar to query. - - Args: - query: Text to look up documents similar to. - k: Number of Documents to return. Defaults to 4. - - Returns: - List of Documents most similar to the query and score for each - """ - # Creates embedding vector from user query - embedding = self.embedding_function(query) - - # Creates Redis query - redis_query = self._prepare_query(k) - - params_dict: Mapping[str, str] = { - "vector": np.array(embedding) # type: ignore - .astype(dtype=np.float32) - .tobytes() - } - - # Perform vector search - results = self.client.ft(self.index_name).search(redis_query, params_dict) - - # Prepare document results - docs_and_scores: List[Tuple[Document, float]] = [] - for result in results.docs: - metadata = {**json.loads(result.metadata), "id": result.id} - doc = Document(page_content=result.content, metadata=metadata) - docs_and_scores.append((doc, float(result.vector_score))) - return docs_and_scores - - @classmethod - def from_texts_return_keys( - cls, - texts: List[str], - embedding: Embeddings, - metadatas: Optional[List[dict]] = None, - index_name: Optional[str] = None, - content_key: str = "content", - metadata_key: str = "metadata", - vector_key: str = "content_vector", - distance_metric: REDIS_DISTANCE_METRICS = "COSINE", - **kwargs: Any, - ) -> Tuple[Redis, List[str]]: - """Create a Redis vectorstore from raw documents. - This is a user-friendly interface that: - 1. Embeds documents. - 2. Creates a new index for the embeddings in Redis. - 3. Adds the documents to the newly created Redis index. - 4. Returns the keys of the newly created documents. - - This is intended to be a quick way to get started. - - Example: - .. code-block:: python - - from langchain.vectorstores import Redis - from langchain.embeddings import OpenAIEmbeddings - embeddings = OpenAIEmbeddings() - redisearch, keys = RediSearch.from_texts_return_keys( - texts, - embeddings, - redis_url="redis://username:password@localhost:6379" - ) - """ - redis_url = get_from_dict_or_env(kwargs, "redis_url", "REDIS_URL") - - if "redis_url" in kwargs: - kwargs.pop("redis_url") - - # Name of the search index if not given - if not index_name: - index_name = uuid.uuid4().hex - - # Create instance - instance = cls( - redis_url, - index_name, - embedding.embed_query, - content_key=content_key, - metadata_key=metadata_key, - vector_key=vector_key, - distance_metric=distance_metric, - **kwargs, - ) - - # Create embeddings over documents - embeddings = embedding.embed_documents(texts) - - # Create the search index - instance._create_index(dim=len(embeddings[0])) - - # Add data to Redis - keys = instance.add_texts(texts, metadatas, embeddings) - return instance, keys - - @classmethod - def from_texts( - cls: Type[Redis], - texts: List[str], - embedding: Embeddings, - metadatas: Optional[List[dict]] = None, - index_name: Optional[str] = None, - content_key: str = "content", - metadata_key: str = "metadata", - vector_key: str = "content_vector", - **kwargs: Any, - ) -> Redis: - """Create a Redis vectorstore from raw documents. - This is a user-friendly interface that: - 1. Embeds documents. - 2. Creates a new index for the embeddings in Redis. - 3. Adds the documents to the newly created Redis index. - - This is intended to be a quick way to get started. - - Example: - .. code-block:: python - - from langchain.vectorstores import Redis - from langchain.embeddings import OpenAIEmbeddings - embeddings = OpenAIEmbeddings() - redisearch = RediSearch.from_texts( - texts, - embeddings, - redis_url="redis://username:password@localhost:6379" - ) - """ - instance, _ = cls.from_texts_return_keys( - texts, - embedding, - metadatas=metadatas, - index_name=index_name, - content_key=content_key, - metadata_key=metadata_key, - vector_key=vector_key, - **kwargs, - ) - return instance - - @staticmethod - def delete( - ids: Optional[List[str]] = None, - **kwargs: Any, - ) -> bool: - """ - Delete a Redis entry. - - Args: - ids: List of ids (keys) to delete. - - Returns: - bool: Whether or not the deletions were successful. - """ - redis_url = get_from_dict_or_env(kwargs, "redis_url", "REDIS_URL") - - if ids is None: - raise ValueError("'ids' (keys)() were not provided.") - - try: - import redis # noqa: F401 - except ImportError: - raise ValueError( - "Could not import redis python package. " - "Please install it with `pip install redis`." - ) - try: - # We need to first remove redis_url from kwargs, - # otherwise passing it to Redis will result in an error. - if "redis_url" in kwargs: - kwargs.pop("redis_url") - client = get_client(redis_url=redis_url, **kwargs) - except ValueError as e: - raise ValueError(f"Your redis connected error: {e}") - # Check if index exists - try: - client.delete(*ids) - logger.info("Entries deleted") - return True - except: # noqa: E722 - # ids does not exist - return False - - @staticmethod - def drop_index( - index_name: str, - delete_documents: bool, - **kwargs: Any, - ) -> bool: - """ - Drop a Redis search index. - - Args: - index_name (str): Name of the index to drop. - delete_documents (bool): Whether to drop the associated documents. - - Returns: - bool: Whether or not the drop was successful. - """ - redis_url = get_from_dict_or_env(kwargs, "redis_url", "REDIS_URL") - try: - import redis # noqa: F401 - except ImportError: - raise ValueError( - "Could not import redis python package. " - "Please install it with `pip install redis`." - ) - try: - # We need to first remove redis_url from kwargs, - # otherwise passing it to Redis will result in an error. - if "redis_url" in kwargs: - kwargs.pop("redis_url") - client = get_client(redis_url=redis_url, **kwargs) - except ValueError as e: - raise ValueError(f"Your redis connected error: {e}") - # Check if index exists - try: - client.ft(index_name).dropindex(delete_documents) - logger.info("Drop index") - return True - except: # noqa: E722 - # Index not exist - return False - - @classmethod - def from_existing_index( - cls, - embedding: Embeddings, - index_name: str, - content_key: str = "content", - metadata_key: str = "metadata", - vector_key: str = "content_vector", - **kwargs: Any, - ) -> Redis: - """Connect to an existing Redis index.""" - redis_url = get_from_dict_or_env(kwargs, "redis_url", "REDIS_URL") - try: - import redis # noqa: F401 - except ImportError: - raise ValueError( - "Could not import redis python package. " - "Please install it with `pip install redis`." - ) - try: - # We need to first remove redis_url from kwargs, - # otherwise passing it to Redis will result in an error. - if "redis_url" in kwargs: - kwargs.pop("redis_url") - client = get_client(redis_url=redis_url, **kwargs) - # check if redis has redisearch module installed - _check_redis_module_exist(client, REDIS_REQUIRED_MODULES) - # ensure that the index already exists - assert _check_index_exists( - client, index_name - ), f"Index {index_name} does not exist" - except Exception as e: - raise ValueError(f"Redis failed to connect: {e}") - - return cls( - redis_url, - index_name, - embedding.embed_query, - content_key=content_key, - metadata_key=metadata_key, - vector_key=vector_key, - **kwargs, - ) - - def as_retriever(self, **kwargs: Any) -> RedisVectorStoreRetriever: - tags = kwargs.pop("tags", None) or [] - tags.extend(self._get_retriever_tags()) - return RedisVectorStoreRetriever(vectorstore=self, **kwargs, tags=tags) - - -class RedisVectorStoreRetriever(VectorStoreRetriever): - """Retriever for Redis VectorStore.""" - - vectorstore: Redis - """Redis VectorStore.""" - search_type: str = "similarity" - """Type of search to perform. Can be either 'similarity' or 'similarity_limit'.""" - k: int = 4 - """Number of documents to return.""" - score_threshold: float = 0.4 - """Score threshold for similarity_limit search.""" - - class Config: - """Configuration for this pydantic object.""" - - arbitrary_types_allowed = True - - @root_validator() - def validate_search_type(cls, values: Dict) -> Dict: - """Validate search type.""" - if "search_type" in values: - search_type = values["search_type"] - if search_type not in ("similarity", "similarity_limit"): - raise ValueError(f"search_type of {search_type} not allowed.") - return values - - def _get_relevant_documents( - self, query: str, *, run_manager: CallbackManagerForRetrieverRun - ) -> List[Document]: - if self.search_type == "similarity": - docs = self.vectorstore.similarity_search(query, k=self.k) - elif self.search_type == "similarity_limit": - docs = self.vectorstore.similarity_search_limit_score( - query, k=self.k, score_threshold=self.score_threshold - ) - else: - raise ValueError(f"search_type of {self.search_type} not allowed.") - return docs - - async def _aget_relevant_documents( - self, query: str, *, run_manager: AsyncCallbackManagerForRetrieverRun - ) -> List[Document]: - raise NotImplementedError("RedisVectorStoreRetriever does not support async") - - def add_documents(self, documents: List[Document], **kwargs: Any) -> List[str]: - """Add documents to vectorstore.""" - return self.vectorstore.add_documents(documents, **kwargs) - - async def aadd_documents( - self, documents: List[Document], **kwargs: Any - ) -> List[str]: - """Add documents to vectorstore.""" - return await self.vectorstore.aadd_documents(documents, **kwargs) diff --git a/libs/langchain/langchain/vectorstores/redis/__init__.py b/libs/langchain/langchain/vectorstores/redis/__init__.py new file mode 100644 index 000000000..6f05acb4a --- /dev/null +++ b/libs/langchain/langchain/vectorstores/redis/__init__.py @@ -0,0 +1,9 @@ +from .base import Redis +from .filters import ( + RedisFilter, + RedisNum, + RedisTag, + RedisText, +) + +__all__ = ["Redis", "RedisFilter", "RedisTag", "RedisText", "RedisNum"] diff --git a/libs/langchain/langchain/vectorstores/redis/base.py b/libs/langchain/langchain/vectorstores/redis/base.py new file mode 100644 index 000000000..f3e966d3c --- /dev/null +++ b/libs/langchain/langchain/vectorstores/redis/base.py @@ -0,0 +1,1361 @@ +"""Wrapper around Redis vector database.""" + +from __future__ import annotations + +import logging +import os +import uuid +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + List, + Mapping, + Optional, + Tuple, + Type, + Union, +) + +import yaml + +from langchain._api import deprecated +from langchain.callbacks.manager import ( + AsyncCallbackManagerForRetrieverRun, + CallbackManagerForRetrieverRun, +) +from langchain.docstore.document import Document +from langchain.embeddings.base import Embeddings +from langchain.utilities.redis import ( + _array_to_buffer, + check_redis_module_exist, + get_client, +) +from langchain.utils import get_from_dict_or_env +from langchain.vectorstores.base import VectorStore, VectorStoreRetriever +from langchain.vectorstores.redis.constants import ( + REDIS_REQUIRED_MODULES, + REDIS_TAG_SEPARATOR, +) + +logger = logging.getLogger(__name__) + +if TYPE_CHECKING: + from redis.client import Redis as RedisType + from redis.commands.search.query import Query + + from langchain.vectorstores.redis.filters import RedisFilterExpression + from langchain.vectorstores.redis.schema import RedisModel + + +def _redis_key(prefix: str) -> str: + """Redis key schema for a given prefix.""" + return f"{prefix}:{uuid.uuid4().hex}" + + +def _redis_prefix(index_name: str) -> str: + """Redis key prefix for a given index.""" + return f"doc:{index_name}" + + +def _default_relevance_score(val: float) -> float: + return 1 - val + + +def check_index_exists(client: RedisType, index_name: str) -> bool: + """Check if Redis index exists.""" + try: + client.ft(index_name).info() + except: # noqa: E722 + logger.info("Index does not exist") + return False + logger.info("Index already exists") + return True + + +class Redis(VectorStore): + """Wrapper around Redis vector database. + + To use, you should have the ``redis`` python package installed + and have a running Redis Enterprise or Redis-Stack server + + For production use cases, it is recommended to use Redis Enterprise + as the scaling, performance, stability and availability is much + better than Redis-Stack. + + For testing and prototyping, however, this is not required. + Redis-Stack is available as a docker container the full vector + search API available. + + .. code-block:: bash + # to run redis stack in docker locally + docker run -d -p 6379:6379 -p 8001:8001 redis/redis-stack:latest + + Once running, you can connect to the redis server with the following url schemas: + - redis://: # simple connection + - redis://:@: # connection with authentication + - rediss://: # connection with SSL + - rediss://:@: # connection with SSL and auth + + + Examples: + + The following examples show various ways to use the Redis VectorStore with + LangChain. + + For all the following examples assume we have the following imports: + + .. code-block:: python + + from langchain.vectorstores import Redis + from langchain.embeddings import OpenAIEmbeddings + + Initialize, create index, and load Documents + .. code-block:: python + + from langchain.vectorstores import Redis + from langchain.embeddings import OpenAIEmbeddings + + rds = Redis.from_documents( + documents, # a list of Document objects from loaders or created + embeddings, # an Embeddings object + redis_url="redis://localhost:6379", + ) + + Initialize, create index, and load Documents with metadata + .. code-block:: python + + + rds = Redis.from_texts( + texts, # a list of strings + metadata, # a list of metadata dicts + embeddings, # an Embeddings object + redis_url="redis://localhost:6379", + ) + + Initialize, create index, and load Documents with metadata and return keys + + .. code-block:: python + + rds, keys = Redis.from_texts_return_keys( + texts, # a list of strings + metadata, # a list of metadata dicts + embeddings, # an Embeddings object + redis_url="redis://localhost:6379", + ) + + For use cases where the index needs to stay alive, you can initialize + with an index name such that it's easier to reference later + + .. code-block:: python + + rds = Redis.from_texts( + texts, # a list of strings + metadata, # a list of metadata dicts + embeddings, # an Embeddings object + index_name="my-index", + redis_url="redis://localhost:6379", + ) + + Initialize and connect to an existing index (from above) + + .. code-block:: python + + rds = Redis.from_existing_index( + embeddings, # an Embeddings object + index_name="my-index", + redis_url="redis://localhost:6379", + ) + + + Advanced examples: + + Custom vector schema can be supplied to change the way that + Redis creates the underlying vector schema. This is useful + for production use cases where you want to optimize the + vector schema for your use case. ex. using HNSW instead of + FLAT (knn) which is the default + + .. code-block:: python + + vector_schema = { + "algorithm": "HNSW" + } + + rds = Redis.from_texts( + texts, # a list of strings + metadata, # a list of metadata dicts + embeddings, # an Embeddings object + vector_schema=vector_schema, + redis_url="redis://localhost:6379", + ) + + Custom index schema can be supplied to change the way that the + metadata is indexed. This is useful for you would like to use the + hybrid querying (filtering) capability of Redis. + + By default, this implementation will automatically generate the index + schema according to the following rules: + - All strings are indexed as text fields + - All numbers are indexed as numeric fields + - All lists of strings are indexed as tag fields (joined by + langchain.vectorstores.redis.constants.REDIS_TAG_SEPARATOR) + - All None values are not indexed but still stored in Redis these are + not retrievable through the interface here, but the raw Redis client + can be used to retrieve them. + - All other types are not indexed + + To override these rules, you can pass in a custom index schema like the following + + .. code-block:: yaml + + tag: + - name: credit_score + text: + - name: user + - name: job + + Typically, the ``credit_score`` field would be a text field since it's a string, + however, we can override this behavior by specifying the field type as shown with + the yaml config (can also be a dictionary) above and the code below. + + .. code-block:: python + + rds = Redis.from_texts( + texts, # a list of strings + metadata, # a list of metadata dicts + embeddings, # an Embeddings object + index_schema="path/to/index_schema.yaml", # can also be a dictionary + redis_url="redis://localhost:6379", + ) + + When connecting to an existing index where a custom schema has been applied, it's + important to pass in the same schema to the ``from_existing_index`` method. + Otherwise, the schema for newly added samples will be incorrect and metadata + will not be returned. + + """ + + DEFAULT_VECTOR_SCHEMA = { + "name": "content_vector", + "algorithm": "FLAT", + "dims": 1536, + "distance_metric": "COSINE", + "datatype": "FLOAT32", + } + + def __init__( + self, + redis_url: str, + index_name: str, + embedding: Embeddings, + index_schema: Optional[Union[Dict[str, str], str, os.PathLike]] = None, + vector_schema: Optional[Dict[str, Union[str, int]]] = None, + relevance_score_fn: Optional[Callable[[float], float]] = None, + **kwargs: Any, + ): + """Initialize with necessary components.""" + self._check_deprecated_kwargs(kwargs) + try: + # TODO use importlib to check if redis is installed + import redis # noqa: F401 + + except ImportError as e: + raise ImportError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) from e + + self.index_name = index_name + self._embeddings = embedding + try: + redis_client = get_client(redis_url=redis_url, **kwargs) + # check if redis has redisearch module installed + check_redis_module_exist(redis_client, REDIS_REQUIRED_MODULES) + except ValueError as e: + raise ValueError(f"Redis failed to connect: {e}") + + self.client = redis_client + self.relevance_score_fn = relevance_score_fn + self._schema = self._get_schema_with_defaults(index_schema, vector_schema) + + @property + def embeddings(self) -> Optional[Embeddings]: + """Access the query embedding object if available.""" + return self._embeddings + + @classmethod + def from_texts_return_keys( + cls, + texts: List[str], + embedding: Embeddings, + metadatas: Optional[List[dict]] = None, + index_name: Optional[str] = None, + index_schema: Optional[Union[Dict[str, str], str, os.PathLike]] = None, + vector_schema: Optional[Dict[str, Union[str, int]]] = None, + **kwargs: Any, + ) -> Tuple[Redis, List[str]]: + """Create a Redis vectorstore from raw documents. + + This is a user-friendly interface that: + 1. Embeds documents. + 2. Creates a new Redis index if it doesn't already exist + 3. Adds the documents to the newly created Redis index. + 4. Returns the keys of the newly created documents once stored. + + This method will generate schema based on the metadata passed in + if the `index_schema` is not defined. If the `index_schema` is defined, + it will compare against the generated schema and warn if there are + differences. If you are purposefully defining the schema for the + metadata, then you can ignore that warning. + + To examine the schema options, initialize an instance of this class + and print out the schema using the `Redis.schema`` property. This + will include the content and content_vector classes which are + always present in the langchain schema. + + Example: + .. code-block:: python + + from langchain.vectorstores import Redis + from langchain.embeddings import OpenAIEmbeddings + embeddings = OpenAIEmbeddings() + redis, keys = Redis.from_texts_return_keys( + texts, + embeddings, + redis_url="redis://localhost:6379" + ) + + Args: + texts (List[str]): List of texts to add to the vectorstore. + embedding (Embeddings): Embeddings to use for the vectorstore. + metadatas (Optional[List[dict]], optional): Optional list of metadata + dicts to add to the vectorstore. Defaults to None. + index_name (Optional[str], optional): Optional name of the index to + create or add to. Defaults to None. + index_schema (Optional[Union[Dict[str, str], str, os.PathLike]], optional): + Optional fields to index within the metadata. Overrides generated + schema. Defaults to None. + vector_schema (Optional[Dict[str, Union[str, int]]], optional): Optional + vector schema to use. Defaults to None. + **kwargs (Any): Additional keyword arguments to pass to the Redis client. + + Returns: + Tuple[Redis, List[str]]: Tuple of the Redis instance and the keys of + the newly created documents. + + Raises: + ValueError: If the number of metadatas does not match the number of texts. + """ + try: + # TODO use importlib to check if redis is installed + import redis # noqa: F401 + + from langchain.vectorstores.redis.schema import read_schema + + except ImportError as e: + raise ImportError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) from e + + redis_url = get_from_dict_or_env(kwargs, "redis_url", "REDIS_URL") + + if "redis_url" in kwargs: + kwargs.pop("redis_url") + + # flag to use generated schema + if "generate" in kwargs: + kwargs.pop("generate") + + # Name of the search index if not given + if not index_name: + index_name = uuid.uuid4().hex + + # type check for metadata + if metadatas: + if isinstance(metadatas, list) and len(metadatas) != len(texts): # type: ignore # noqa: E501 + raise ValueError("Number of metadatas must match number of texts") + if not (isinstance(metadatas, list) and isinstance(metadatas[0], dict)): + raise ValueError("Metadatas must be a list of dicts") + + generated_schema = _generate_field_schema(metadatas[0]) + if index_schema: + # read in the schema solely to compare to the generated schema + user_schema = read_schema(index_schema) + + # the very rare case where a super user decides to pass the index + # schema and a document loader is used that has metadata which + # we need to map into fields. + if user_schema != generated_schema: + logger.warning( + "`index_schema` does not match generated metadata schema.\n" + + "If you meant to manually override the schema, please " + + "ignore this message.\n" + + f"index_schema: {user_schema}\n" + + f"generated_schema: {generated_schema}\n" + ) + else: + # use the generated schema + index_schema = generated_schema + + # Create instance + instance = cls( + redis_url, + index_name, + embedding, + index_schema=index_schema, + vector_schema=vector_schema, + **kwargs, + ) + + # Create embeddings over documents + embeddings = embedding.embed_documents(texts) + + # Create the search index + instance._create_index(dim=len(embeddings[0])) + + # Add data to Redis + keys = instance.add_texts(texts, metadatas, embeddings) + return instance, keys + + @classmethod + def from_texts( + cls: Type[Redis], + texts: List[str], + embedding: Embeddings, + metadatas: Optional[List[dict]] = None, + index_name: Optional[str] = None, + index_schema: Optional[Union[Dict[str, str], str, os.PathLike]] = None, + vector_schema: Optional[Dict[str, Union[str, int]]] = None, + **kwargs: Any, + ) -> Redis: + """Create a Redis vectorstore from a list of texts. + + This is a user-friendly interface that: + 1. Embeds documents. + 2. Creates a new Redis index if it doesn't already exist + 3. Adds the documents to the newly created Redis index. + + This method will generate schema based on the metadata passed in + if the `index_schema` is not defined. If the `index_schema` is defined, + it will compare against the generated schema and warn if there are + differences. If you are purposefully defining the schema for the + metadata, then you can ignore that warning. + + To examine the schema options, initialize an instance of this class + and print out the schema using the `Redis.schema`` property. This + will include the content and content_vector classes which are + always present in the langchain schema. + + + Example: + .. code-block:: python + + from langchain.vectorstores import Redis + from langchain.embeddings import OpenAIEmbeddings + embeddings = OpenAIEmbeddings() + redisearch = RediSearch.from_texts( + texts, + embeddings, + redis_url="redis://username:password@localhost:6379" + ) + + Args: + texts (List[str]): List of texts to add to the vectorstore. + embedding (Embeddings): Embedding model class (i.e. OpenAIEmbeddings) + for embedding queries. + metadatas (Optional[List[dict]], optional): Optional list of metadata dicts + to add to the vectorstore. Defaults to None. + index_name (Optional[str], optional): Optional name of the index to create + or add to. Defaults to None. + index_schema (Optional[Union[Dict[str, str], str, os.PathLike]], optional): + Optional fields to index within the metadata. Overrides generated + schema. Defaults to None. + vector_schema (Optional[Dict[str, Union[str, int]]], optional): Optional + vector schema to use. Defaults to None. + **kwargs (Any): Additional keyword arguments to pass to the Redis client. + + Returns: + Redis: Redis VectorStore instance. + + Raises: + ValueError: If the number of metadatas does not match the number of texts. + ImportError: If the redis python package is not installed. + """ + instance, _ = cls.from_texts_return_keys( + texts, + embedding, + metadatas=metadatas, + index_name=index_name, + index_schema=index_schema, + vector_schema=vector_schema, + **kwargs, + ) + return instance + + @classmethod + def from_existing_index( + cls, + embedding: Embeddings, + index_name: str, + schema: Union[Dict[str, str], str, os.PathLike], + **kwargs: Any, + ) -> Redis: + """Connect to an existing Redis index. + + Example: + .. code-block:: python + + from langchain.vectorstores import Redis + from langchain.embeddings import OpenAIEmbeddings + embeddings = OpenAIEmbeddings() + redisearch = Redis.from_existing_index( + embeddings, + index_name="my-index", + redis_url="redis://username:password@localhost:6379" + ) + + Args: + embedding (Embeddings): Embedding model class (i.e. OpenAIEmbeddings) + for embedding queries. + index_name (str): Name of the index to connect to. + schema (Union[Dict[str, str], str, os.PathLike]): Schema of the index + and the vector schema. Can be a dict, or path to yaml file + + **kwargs (Any): Additional keyword arguments to pass to the Redis client. + + Returns: + Redis: Redis VectorStore instance. + + Raises: + ValueError: If the index does not exist. + ImportError: If the redis python package is not installed. + """ + redis_url = get_from_dict_or_env(kwargs, "redis_url", "REDIS_URL") + try: + # We need to first remove redis_url from kwargs, + # otherwise passing it to Redis will result in an error. + if "redis_url" in kwargs: + kwargs.pop("redis_url") + client = get_client(redis_url=redis_url, **kwargs) + # check if redis has redisearch module installed + check_redis_module_exist(client, REDIS_REQUIRED_MODULES) + # ensure that the index already exists + assert check_index_exists( + client, index_name + ), f"Index {index_name} does not exist" + except Exception as e: + raise ValueError(f"Redis failed to connect: {e}") + + return cls( + redis_url, + index_name, + embedding, + index_schema=schema, + **kwargs, + ) + + @property + def schema(self) -> Dict[str, List[Any]]: + """Return the schema of the index.""" + return self._schema.as_dict() + + def write_schema(self, path: Union[str, os.PathLike]) -> None: + """Write the schema to a yaml file.""" + with open(path, "w+") as f: + yaml.dump(self.schema, f) + + @staticmethod + def delete( + ids: Optional[List[str]] = None, + **kwargs: Any, + ) -> bool: + """ + Delete a Redis entry. + + Args: + ids: List of ids (keys in redis) to delete. + redis_url: Redis connection url. This should be passed in the kwargs + or set as an environment variable: REDIS_URL. + + Returns: + bool: Whether or not the deletions were successful. + + Raises: + ValueError: If the redis python package is not installed. + ValueError: If the ids (keys in redis) are not provided + """ + redis_url = get_from_dict_or_env(kwargs, "redis_url", "REDIS_URL") + + if ids is None: + raise ValueError("'ids' (keys)() were not provided.") + + try: + import redis # noqa: F401 + except ImportError: + raise ValueError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) + try: + # We need to first remove redis_url from kwargs, + # otherwise passing it to Redis will result in an error. + if "redis_url" in kwargs: + kwargs.pop("redis_url") + client = get_client(redis_url=redis_url, **kwargs) + except ValueError as e: + raise ValueError(f"Your redis connected error: {e}") + # Check if index exists + try: + client.delete(*ids) + logger.info("Entries deleted") + return True + except: # noqa: E722 + # ids does not exist + return False + + @staticmethod + def drop_index( + index_name: str, + delete_documents: bool, + **kwargs: Any, + ) -> bool: + """ + Drop a Redis search index. + + Args: + index_name (str): Name of the index to drop. + delete_documents (bool): Whether to drop the associated documents. + + Returns: + bool: Whether or not the drop was successful. + """ + redis_url = get_from_dict_or_env(kwargs, "redis_url", "REDIS_URL") + try: + import redis # noqa: F401 + except ImportError: + raise ValueError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) + try: + # We need to first remove redis_url from kwargs, + # otherwise passing it to Redis will result in an error. + if "redis_url" in kwargs: + kwargs.pop("redis_url") + client = get_client(redis_url=redis_url, **kwargs) + except ValueError as e: + raise ValueError(f"Your redis connected error: {e}") + # Check if index exists + try: + client.ft(index_name).dropindex(delete_documents) + logger.info("Drop index") + return True + except: # noqa: E722 + # Index not exist + return False + + def add_texts( + self, + texts: Iterable[str], + metadatas: Optional[List[dict]] = None, + embeddings: Optional[List[List[float]]] = None, + batch_size: int = 1000, + clean_metadata: bool = True, + **kwargs: Any, + ) -> List[str]: + """Add more texts to the vectorstore. + + Args: + texts (Iterable[str]): Iterable of strings/text to add to the vectorstore. + metadatas (Optional[List[dict]], optional): Optional list of metadatas. + Defaults to None. + embeddings (Optional[List[List[float]]], optional): Optional pre-generated + embeddings. Defaults to None. + keys (List[str]) or ids (List[str]): Identifiers of entries. + Defaults to None. + batch_size (int, optional): Batch size to use for writes. Defaults to 1000. + + Returns: + List[str]: List of ids added to the vectorstore + """ + ids = [] + prefix = _redis_prefix(self.index_name) + + # Get keys or ids from kwargs + # Other vectorstores use ids + keys_or_ids = kwargs.get("keys", kwargs.get("ids")) + + # type check for metadata + if metadatas: + if isinstance(metadatas, list) and len(metadatas) != len(texts): # type: ignore # noqa: E501 + raise ValueError("Number of metadatas must match number of texts") + if not (isinstance(metadatas, list) and isinstance(metadatas[0], dict)): + raise ValueError("Metadatas must be a list of dicts") + + # Write data to redis + pipeline = self.client.pipeline(transaction=False) + for i, text in enumerate(texts): + # Use provided values by default or fallback + key = keys_or_ids[i] if keys_or_ids else _redis_key(prefix) + metadata = metadatas[i] if metadatas else {} + metadata = _prepare_metadata(metadata) if clean_metadata else metadata + embedding = ( + embeddings[i] if embeddings else self._embeddings.embed_query(text) + ) + pipeline.hset( + key, + mapping={ + self._schema.content_key: text, + self._schema.content_vector_key: _array_to_buffer( + embedding, self._schema.vector_dtype + ), + **metadata, + }, + ) + ids.append(key) + + # Write batch + if i % batch_size == 0: + pipeline.execute() + + # Cleanup final batch + pipeline.execute() + return ids + + def as_retriever(self, **kwargs: Any) -> RedisVectorStoreRetriever: + tags = kwargs.pop("tags", None) or [] + tags.extend(self._get_retriever_tags()) + return RedisVectorStoreRetriever(vectorstore=self, **kwargs, tags=tags) + + @deprecated("0.0.272", alternative="similarity_search(distance_threshold=0.1)") + def similarity_search_limit_score( + self, query: str, k: int = 4, score_threshold: float = 0.2, **kwargs: Any + ) -> List[Document]: + """ + Returns the most similar indexed documents to the query text within the + score_threshold range. + + Deprecated: Use similarity_search with distance_threshold instead. + + Args: + query (str): The query text for which to find similar documents. + k (int): The number of documents to return. Default is 4. + score_threshold (float): The minimum matching *distance* required + for a document to be considered a match. Defaults to 0.2. + + Returns: + List[Document]: A list of documents that are most similar to the query text + including the match score for each document. + + Note: + If there are no documents that satisfy the score_threshold value, + an empty list is returned. + + """ + return self.similarity_search( + query, k=k, distance_threshold=score_threshold, **kwargs + ) + + def similarity_search_with_score( + self, + query: str, + k: int = 4, + filter: Optional[RedisFilterExpression] = None, + return_metadata: bool = True, + **kwargs: Any, + ) -> List[Tuple[Document, float]]: + """Run similarity search with **vector distance**. + + The "scores" returned from this function are the raw vector + distances from the query vector. For similarity scores, use + ``similarity_search_with_relevance_scores``. + + Args: + query (str): The query text for which to find similar documents. + k (int): The number of documents to return. Default is 4. + filter (RedisFilterExpression, optional): Optional metadata filter. + Defaults to None. + return_metadata (bool, optional): Whether to return metadata. + Defaults to True. + + Returns: + List[Tuple[Document, float]]: A list of documents that are + most similar to the query with the distance for each document. + """ + try: + import redis + + except ImportError as e: + raise ImportError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) from e + + if "score_threshold" in kwargs: + logger.warning( + "score_threshold is deprecated. Use distance_threshold instead." + + "score_threshold should only be used in " + + "similarity_search_with_relevance_scores." + + "score_threshold will be removed in a future release.", + ) + + redis_query, params_dict = self._prepare_query( + query, + k=k, + filter=filter, + with_metadata=return_metadata, + with_distance=True, + **kwargs, + ) + + # Perform vector search + # ignore type because redis-py is wrong about bytes + try: + results = self.client.ft(self.index_name).search(redis_query, params_dict) # type: ignore # noqa: E501 + except redis.exceptions.ResponseError as e: + # split error message and see if it starts with "Syntax" + if str(e).split(" ")[0] == "Syntax": + raise ValueError( + "Query failed with syntax error. " + + "This is likely due to malformation of " + + "filter, vector, or query argument" + ) from e + raise e + + # Prepare document results + docs_with_scores: List[Tuple[Document, float]] = [] + for result in results.docs: + metadata = {} + if return_metadata: + metadata = {"id": result.id} + metadata.update(self._collect_metadata(result)) + + doc = Document(page_content=result.content, metadata=metadata) + distance = self._calculate_fp_distance(result.distance) + docs_with_scores.append((doc, distance)) + + return docs_with_scores + + def similarity_search( + self, + query: str, + k: int = 4, + filter: Optional[RedisFilterExpression] = None, + return_metadata: bool = True, + distance_threshold: Optional[float] = None, + **kwargs: Any, + ) -> List[Document]: + """Run similarity search + + Args: + query (str): The query text for which to find similar documents. + k (int): The number of documents to return. Default is 4. + filter (RedisFilterExpression, optional): Optional metadata filter. + Defaults to None. + return_metadata (bool, optional): Whether to return metadata. + Defaults to True. + distance_threshold (Optional[float], optional): Distance threshold + for vector distance from query vector. Defaults to None. + + Returns: + List[Document]: A list of documents that are most similar to the query + text. + + """ + try: + import redis + + except ImportError as e: + raise ImportError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) from e + + if "score_threshold" in kwargs: + logger.warning( + "score_threshold is deprecated. Use distance_threshold instead." + + "score_threshold should only be used in " + + "similarity_search_with_relevance_scores." + + "score_threshold will be removed in a future release.", + ) + + redis_query, params_dict = self._prepare_query( + query, + k=k, + filter=filter, + distance_threshold=distance_threshold, + with_metadata=return_metadata, + with_distance=False, + ) + + # Perform vector search + # ignore type because redis-py is wrong about bytes + try: + results = self.client.ft(self.index_name).search(redis_query, params_dict) # type: ignore # noqa: E501 + except redis.exceptions.ResponseError as e: + # split error message and see if it starts with "Syntax" + if str(e).split(" ")[0] == "Syntax": + raise ValueError( + "Query failed with syntax error. " + + "This is likely due to malformation of " + + "filter, vector, or query argument" + ) from e + raise e + + # Prepare document results + docs = [] + for result in results.docs: + metadata = {} + if return_metadata: + metadata = {"id": result.id} + metadata.update(self._collect_metadata(result)) + + content_key = self._schema.content_key + docs.append( + Document(page_content=getattr(result, content_key), metadata=metadata) + ) + return docs + + def _collect_metadata(self, result: "Document") -> Dict[str, Any]: + """Collect metadata from Redis. + + Method ensures that there isn't a mismatch between the metadata + and the index schema passed to this class by the user or generated + by this class. + + Args: + result (Document): redis.commands.search.Document object returned + from Redis. + + Returns: + Dict[str, Any]: Collected metadata. + """ + # new metadata dict as modified by this method + meta = {} + for key in self._schema.metadata_keys: + try: + meta[key] = getattr(result, key) + except AttributeError: + # warning about attribute missing + logger.warning( + f"Metadata key {key} not found in metadata. " + + "Setting to None. \n" + + "Metadata fields defined for this instance: " + + f"{self._schema.metadata_keys}" + ) + meta[key] = None + return meta + + def _prepare_query( + self, + query: str, + k: int = 4, + filter: Optional[RedisFilterExpression] = None, + distance_threshold: Optional[float] = None, + with_metadata: bool = True, + with_distance: bool = False, + ) -> Tuple["Query", Dict[str, Any]]: + # Creates embedding vector from user query + embedding = self._embeddings.embed_query(query) + + # Creates Redis query + params_dict: Dict[str, Union[str, bytes, float]] = { + "vector": _array_to_buffer(embedding, self._schema.vector_dtype), + } + + # prepare return fields including score + return_fields = [self._schema.content_key] + if with_distance: + return_fields.append("distance") + if with_metadata: + return_fields.extend(self._schema.metadata_keys) + + if distance_threshold: + params_dict["distance_threshold"] = distance_threshold + return ( + self._prepare_range_query( + k, filter=filter, return_fields=return_fields + ), + params_dict, + ) + return ( + self._prepare_vector_query(k, filter=filter, return_fields=return_fields), + params_dict, + ) + + def _prepare_range_query( + self, + k: int, + filter: Optional[RedisFilterExpression] = None, + return_fields: List[str] = [], + ) -> "Query": + try: + from redis.commands.search.query import Query + except ImportError as e: + raise ImportError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) from e + vector_key = self._schema.content_vector_key + base_query = f"@{vector_key}:[VECTOR_RANGE $distance_threshold $vector]" + + if filter: + base_query = "(" + base_query + " " + str(filter) + ")" + + query_string = base_query + "=>{$yield_distance_as: distance}" + + return ( + Query(query_string) + .return_fields(*return_fields) + .sort_by("distance") + .paging(0, k) + .dialect(2) + ) + + def _prepare_vector_query( + self, + k: int, + filter: Optional[RedisFilterExpression] = None, + return_fields: List[str] = [], + ) -> "Query": + """Prepare query for vector search. + + Args: + k: Number of results to return. + filter: Optional metadata filter. + + Returns: + query: Query object. + """ + try: + from redis.commands.search.query import Query + except ImportError as e: + raise ImportError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) from e + query_prefix = "*" + if filter: + query_prefix = f"{str(filter)}" + vector_key = self._schema.content_vector_key + base_query = f"({query_prefix})=>[KNN {k} @{vector_key} $vector AS distance]" + + query = ( + Query(base_query) + .return_fields(*return_fields) + .sort_by("distance") + .paging(0, k) + .dialect(2) + ) + return query + + def _get_schema_with_defaults( + self, + index_schema: Optional[Union[Dict[str, str], str, os.PathLike]] = None, + vector_schema: Optional[Dict[str, Union[str, int]]] = None, + ) -> "RedisModel": + # should only be called after init of Redis (so Import handled) + from langchain.vectorstores.redis.schema import RedisModel, read_schema + + schema = RedisModel() + # read in schema (yaml file or dict) and + # pass to the Pydantic validators + if index_schema: + schema_values = read_schema(index_schema) + schema = RedisModel(**schema_values) + + # ensure user did not exclude the content field + # no modifications if content field found + schema.add_content_field() + + # if no content_vector field, add vector field to schema + # this makes adding a vector field to the schema optional when + # the user just wants additional metadata + try: + # see if user overrode the content vector + schema.content_vector + # if user overrode the content vector, check if they + # also passed vector schema. This won't be used since + # the index schema overrode the content vector + if vector_schema: + logger.warning( + "`vector_schema` is ignored since content_vector is " + + "overridden in `index_schema`." + ) + + # user did not override content vector + except ValueError: + # set default vector schema and update with user provided schema + # if the user provided any + vector_field = self.DEFAULT_VECTOR_SCHEMA.copy() + if vector_schema: + vector_field.update(vector_schema) + + # add the vector field either way + schema.add_vector_field(vector_field) + return schema + + def _create_index(self, dim: int = 1536) -> None: + try: + from redis.commands.search.indexDefinition import ( # type: ignore + IndexDefinition, + IndexType, + ) + + except ImportError: + raise ValueError( + "Could not import redis python package. " + "Please install it with `pip install redis`." + ) + + # Set vector dimension + # can't obtain beforehand because we don't + # know which embedding model is being used. + self._schema.content_vector.dims = dim + + # Check if index exists + if not check_index_exists(self.client, self.index_name): + prefix = _redis_prefix(self.index_name) + + # Create Redis Index + self.client.ft(self.index_name).create_index( + fields=self._schema.get_fields(), + definition=IndexDefinition(prefix=[prefix], index_type=IndexType.HASH), + ) + + def _calculate_fp_distance(self, distance: str) -> float: + """Calculate the distance based on the vector datatype + + Two datatypes supported: + - FLOAT32 + - FLOAT64 + + if it's FLOAT32, we need to round the distance to 4 decimal places + otherwise, round to 7 decimal places. + """ + if self._schema.content_vector.datatype == "FLOAT32": + return round(float(distance), 4) + return round(float(distance), 7) + + def _check_deprecated_kwargs(self, kwargs: Mapping[str, Any]) -> None: + """Check for deprecated kwargs.""" + + deprecated_kwargs = { + "redis_host": "redis_url", + "redis_port": "redis_url", + "redis_password": "redis_url", + "content_key": "index_schema", + "vector_key": "vector_schema", + "distance_metric": "vector_schema", + } + for key, value in kwargs.items(): + if key in deprecated_kwargs: + raise ValueError( + f"Keyword argument '{key}' is deprecated. " + f"Please use '{deprecated_kwargs[key]}' instead." + ) + + def _select_relevance_score_fn(self) -> Callable[[float], float]: + if self.relevance_score_fn: + return self.relevance_score_fn + + metric_map = { + "COSINE": self._cosine_relevance_score_fn, + "IP": self._max_inner_product_relevance_score_fn, + "L2": self._euclidean_relevance_score_fn, + } + try: + return metric_map[self._schema.content_vector.distance_metric] + except KeyError: + return _default_relevance_score + + +def _generate_field_schema(data: Dict[str, Any]) -> Dict[str, Any]: + """ + Generate a schema for the search index in Redis based on the input metadata. + + Given a dictionary of metadata, this function categorizes each metadata + field into one of the three categories: + - text: The field contains textual data. + - numeric: The field contains numeric data (either integer or float). + - tag: The field contains list of tags (strings). + + Args + data (Dict[str, Any]): A dictionary where keys are metadata field names + and values are the metadata values. + + Returns: + Dict[str, Any]: A dictionary with three keys "text", "numeric", and "tag". + Each key maps to a list of fields that belong to that category. + + Raises: + ValueError: If a metadata field cannot be categorized into any of + the three known types. + """ + result: Dict[str, Any] = { + "text": [], + "numeric": [], + "tag": [], + } + + for key, value in data.items(): + # Numeric fields + try: + int(value) + result["numeric"].append({"name": key}) + continue + except (ValueError, TypeError): + pass + + # None values are not indexed as of now + if value is None: + continue + + # if it's a list of strings, we assume it's a tag + if isinstance(value, (list, tuple)): + if not value or isinstance(value[0], str): + result["tag"].append({"name": key}) + else: + name = type(value[0]).__name__ + raise ValueError( + f"List/tuple values should contain strings: '{key}': {name}" + ) + continue + + # Check if value is string before processing further + if isinstance(value, str): + result["text"].append({"name": key}) + continue + + # Unable to classify the field value + name = type(value).__name__ + raise ValueError( + "Could not generate Redis index field type mapping " + + f"for metadata: '{key}': {name}" + ) + + return result + + +def _prepare_metadata(metadata: Dict[str, Any]) -> Dict[str, Any]: + """ + Prepare metadata for indexing in Redis by sanitizing its values. + + - String, integer, and float values remain unchanged. + - None or empty values are replaced with empty strings. + - Lists/tuples of strings are joined into a single string with a comma separator. + + Args: + metadata (Dict[str, Any]): A dictionary where keys are metadata + field names and values are the metadata values. + + Returns: + Dict[str, Any]: A sanitized dictionary ready for indexing in Redis. + + Raises: + ValueError: If any metadata value is not one of the known + types (string, int, float, or list of strings). + """ + + def raise_error(key: str, value: Any) -> None: + raise ValueError( + f"Metadata value for key '{key}' must be a string, int, " + + f"float, or list of strings. Got {type(value).__name__}" + ) + + clean_meta: Dict[str, Union[str, float, int]] = {} + for key, value in metadata.items(): + if not value: + clean_meta[key] = "" + continue + + # No transformation needed + if isinstance(value, (str, int, float)): + clean_meta[key] = value + + # if it's a list/tuple of strings, we join it + elif isinstance(value, (list, tuple)): + if not value or isinstance(value[0], str): + clean_meta[key] = REDIS_TAG_SEPARATOR.join(value) + else: + raise_error(key, value) + else: + raise_error(key, value) + return clean_meta + + +class RedisVectorStoreRetriever(VectorStoreRetriever): + """Retriever for Redis VectorStore.""" + + vectorstore: Redis + """Redis VectorStore.""" + search_type: str = "similarity" + """Type of search to perform. Can be either + 'similarity', + 'similarity_distance_threshold', + 'similarity_score_threshold' + """ + + search_kwargs: Dict[str, Any] = { + "k": 4, + "score_threshold": 0.9, + # set to None to avoid distance used in score_threshold search + "distance_threshold": None, + } + """Default search kwargs.""" + + allowed_search_types = [ + "similarity", + "similarity_distance_threshold", + "similarity_score_threshold", + ] + """Allowed search types.""" + + class Config: + """Configuration for this pydantic object.""" + + arbitrary_types_allowed = True + + def _get_relevant_documents( + self, query: str, *, run_manager: CallbackManagerForRetrieverRun + ) -> List[Document]: + if self.search_type == "similarity": + docs = self.vectorstore.similarity_search(query, **self.search_kwargs) + + elif self.search_type == "similarity_distance_threshold": + if self.search_kwargs["distance_threshold"] is None: + raise ValueError( + "distance_threshold must be provided for " + + "similarity_distance_threshold retriever" + ) + docs = self.vectorstore.similarity_search(query, **self.search_kwargs) + + elif self.search_type == "similarity_score_threshold": + docs_and_similarities = ( + self.vectorstore.similarity_search_with_relevance_scores( + query, **self.search_kwargs + ) + ) + docs = [doc for doc, _ in docs_and_similarities] + else: + raise ValueError(f"search_type of {self.search_type} not allowed.") + return docs + + async def _aget_relevant_documents( + self, query: str, *, run_manager: AsyncCallbackManagerForRetrieverRun + ) -> List[Document]: + raise NotImplementedError("RedisVectorStoreRetriever does not support async") + + def add_documents(self, documents: List[Document], **kwargs: Any) -> List[str]: + """Add documents to vectorstore.""" + return self.vectorstore.add_documents(documents, **kwargs) + + async def aadd_documents( + self, documents: List[Document], **kwargs: Any + ) -> List[str]: + """Add documents to vectorstore.""" + return await self.vectorstore.aadd_documents(documents, **kwargs) diff --git a/libs/langchain/langchain/vectorstores/redis/constants.py b/libs/langchain/langchain/vectorstores/redis/constants.py new file mode 100644 index 000000000..ddbfe4c58 --- /dev/null +++ b/libs/langchain/langchain/vectorstores/redis/constants.py @@ -0,0 +1,20 @@ +from typing import Any, Dict, List + +import numpy as np + +# required modules +REDIS_REQUIRED_MODULES = [ + {"name": "search", "ver": 20600}, + {"name": "searchlight", "ver": 20600}, +] + +# distance metrics +REDIS_DISTANCE_METRICS: List[str] = ["COSINE", "IP", "L2"] + +# supported vector datatypes +REDIS_VECTOR_DTYPE_MAP: Dict[str, Any] = { + "FLOAT32": np.float32, + "FLOAT64": np.float64, +} + +REDIS_TAG_SEPARATOR = "," diff --git a/libs/langchain/langchain/vectorstores/redis/filters.py b/libs/langchain/langchain/vectorstores/redis/filters.py new file mode 100644 index 000000000..0f6608bae --- /dev/null +++ b/libs/langchain/langchain/vectorstores/redis/filters.py @@ -0,0 +1,420 @@ +from enum import Enum +from functools import wraps +from typing import Any, Callable, Dict, List, Optional, Union + +from langchain.utilities.redis import TokenEscaper + +# disable mypy error for dunder method overrides +# mypy: disable-error-code="override" + + +class RedisFilterOperator(Enum): + EQ = 1 + NE = 2 + LT = 3 + GT = 4 + LE = 5 + GE = 6 + OR = 7 + AND = 8 + LIKE = 9 + IN = 10 + + +class RedisFilter: + @staticmethod + def text(field: str) -> "RedisText": + return RedisText(field) + + @staticmethod + def num(field: str) -> "RedisNum": + return RedisNum(field) + + @staticmethod + def tag(field: str) -> "RedisTag": + return RedisTag(field) + + +class RedisFilterField: + escaper: "TokenEscaper" = TokenEscaper() + OPERATORS: Dict[RedisFilterOperator, str] = {} + + def __init__(self, field: str): + self._field = field + self._value: Any = None + self._operator: RedisFilterOperator = RedisFilterOperator.EQ + + def equals(self, other: "RedisFilterField") -> bool: + if not isinstance(other, type(self)): + return False + return self._field == other._field and self._value == other._value + + def _set_value( + self, val: Any, val_type: type, operator: RedisFilterOperator + ) -> None: + # check that the operator is supported by this class + if operator not in self.OPERATORS: + raise ValueError( + f"Operator {operator} not supported by {self.__class__.__name__}. " + + f"Supported operators are {self.OPERATORS.values()}" + ) + + if not isinstance(val, val_type): + raise TypeError( + f"Right side argument passed to operator {self.OPERATORS[operator]} " + f"with left side " + f"argument {self.__class__.__name__} must be of type {val_type}" + ) + self._value = val + self._operator = operator + + +def check_operator_misuse(func: Callable) -> Callable: + @wraps(func) + def wrapper(instance: Any, *args: List[Any], **kwargs: Dict[str, Any]) -> Any: + # Extracting 'other' from positional arguments or keyword arguments + other = kwargs.get("other") if "other" in kwargs else None + if not other: + for arg in args: + if isinstance(arg, type(instance)): + other = arg + break + + if isinstance(other, type(instance)): + raise ValueError( + "Equality operators are overridden for FilterExpression creation. Use " + ".equals() for equality checks" + ) + return func(instance, *args, **kwargs) + + return wrapper + + +class RedisTag(RedisFilterField): + """A RedisTag is a RedisFilterField representing a tag in a Redis index.""" + + OPERATORS: Dict[RedisFilterOperator, str] = { + RedisFilterOperator.EQ: "==", + RedisFilterOperator.NE: "!=", + RedisFilterOperator.IN: "==", + } + + OPERATOR_MAP: Dict[RedisFilterOperator, str] = { + RedisFilterOperator.EQ: "@%s:{%s}", + RedisFilterOperator.NE: "(-@%s:{%s})", + RedisFilterOperator.IN: "@%s:{%s}", + } + + def __init__(self, field: str): + """Create a RedisTag FilterField + + Args: + field (str): The name of the RedisTag field in the index to be queried + against. + """ + super().__init__(field) + + def _set_tag_value( + self, other: Union[List[str], str], operator: RedisFilterOperator + ) -> None: + if isinstance(other, list): + if not all(isinstance(tag, str) for tag in other): + raise ValueError("All tags must be strings") + else: + other = [other] + self._set_value(other, list, operator) + + @check_operator_misuse + def __eq__(self, other: Union[List[str], str]) -> "RedisFilterExpression": + """Create a RedisTag equality filter expression + + Args: + other (Union[List[str], str]): The tag(s) to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisTag + >>> filter = RedisTag("brand") == "nike" + """ + self._set_tag_value(other, RedisFilterOperator.EQ) + return RedisFilterExpression(str(self)) + + @check_operator_misuse + def __ne__(self, other: Union[List[str], str]) -> "RedisFilterExpression": + """Create a RedisTag inequality filter expression + + Args: + other (Union[List[str], str]): The tag(s) to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisTag + >>> filter = RedisTag("brand") != "nike" + """ + self._set_tag_value(other, RedisFilterOperator.NE) + return RedisFilterExpression(str(self)) + + @property + def _formatted_tag_value(self) -> str: + return "|".join([self.escaper.escape(tag) for tag in self._value]) + + def __str__(self) -> str: + if not self._value: + raise ValueError( + f"Operator must be used before calling __str__. Operators are " + f"{self.OPERATORS.values()}" + ) + """Return the Redis Query syntax for a RedisTag filter expression""" + return self.OPERATOR_MAP[self._operator] % ( + self._field, + self._formatted_tag_value, + ) + + +class RedisNum(RedisFilterField): + """A RedisFilterField representing a numeric field in a Redis index.""" + + OPERATORS: Dict[RedisFilterOperator, str] = { + RedisFilterOperator.EQ: "==", + RedisFilterOperator.NE: "!=", + RedisFilterOperator.LT: "<", + RedisFilterOperator.GT: ">", + RedisFilterOperator.LE: "<=", + RedisFilterOperator.GE: ">=", + } + OPERATOR_MAP: Dict[RedisFilterOperator, str] = { + RedisFilterOperator.EQ: "@%s:[%i %i]", + RedisFilterOperator.NE: "(-@%s:[%i %i])", + RedisFilterOperator.GT: "@%s:[(%i +inf]", + RedisFilterOperator.LT: "@%s:[-inf (%i]", + RedisFilterOperator.GE: "@%s:[%i +inf]", + RedisFilterOperator.LE: "@%s:[-inf %i]", + } + + def __str__(self) -> str: + """Return the Redis Query syntax for a Numeric filter expression""" + if not self._value: + raise ValueError( + f"Operator must be used before calling __str__. Operators are " + f"{self.OPERATORS.values()}" + ) + + if ( + self._operator == RedisFilterOperator.EQ + or self._operator == RedisFilterOperator.NE + ): + return self.OPERATOR_MAP[self._operator] % ( + self._field, + self._value, + self._value, + ) + else: + return self.OPERATOR_MAP[self._operator] % (self._field, self._value) + + @check_operator_misuse + def __eq__(self, other: int) -> "RedisFilterExpression": + """Create a Numeric equality filter expression + + Args: + other (int): The value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisNum + >>> filter = RedisNum("zipcode") == 90210 + """ + self._set_value(other, int, RedisFilterOperator.EQ) + return RedisFilterExpression(str(self)) + + @check_operator_misuse + def __ne__(self, other: int) -> "RedisFilterExpression": + """Create a Numeric inequality filter expression + + Args: + other (int): The value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisNum + >>> filter = RedisNum("zipcode") != 90210 + """ + self._set_value(other, int, RedisFilterOperator.NE) + return RedisFilterExpression(str(self)) + + def __gt__(self, other: int) -> "RedisFilterExpression": + """Create a RedisNumeric greater than filter expression + + Args: + other (int): The value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisNum + >>> filter = RedisNum("age") > 18 + """ + self._set_value(other, int, RedisFilterOperator.GT) + return RedisFilterExpression(str(self)) + + def __lt__(self, other: int) -> "RedisFilterExpression": + """Create a Numeric less than filter expression + + Args: + other (int): The value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisNum + >>> filter = RedisNum("age") < 18 + """ + self._set_value(other, int, RedisFilterOperator.LT) + return RedisFilterExpression(str(self)) + + def __ge__(self, other: int) -> "RedisFilterExpression": + """Create a Numeric greater than or equal to filter expression + + Args: + other (int): The value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisNum + >>> filter = RedisNum("age") >= 18 + """ + self._set_value(other, int, RedisFilterOperator.GE) + return RedisFilterExpression(str(self)) + + def __le__(self, other: int) -> "RedisFilterExpression": + """Create a Numeric less than or equal to filter expression + + Args: + other (int): The value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisNum + >>> filter = RedisNum("age") <= 18 + """ + self._set_value(other, int, RedisFilterOperator.LE) + return RedisFilterExpression(str(self)) + + +class RedisText(RedisFilterField): + """A RedisText is a RedisFilterField representing a text field in a Redis index.""" + + OPERATORS = { + RedisFilterOperator.EQ: "==", + RedisFilterOperator.NE: "!=", + RedisFilterOperator.LIKE: "%", + } + OPERATOR_MAP = { + RedisFilterOperator.EQ: '@%s:"%s"', + RedisFilterOperator.NE: '(-@%s:"%s")', + RedisFilterOperator.LIKE: "@%s:%s", + } + + @check_operator_misuse + def __eq__(self, other: str) -> "RedisFilterExpression": + """Create a RedisText equality filter expression + + Args: + other (str): The text value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisText + >>> filter = RedisText("job") == "engineer" + """ + self._set_value(other, str, RedisFilterOperator.EQ) + return RedisFilterExpression(str(self)) + + @check_operator_misuse + def __ne__(self, other: str) -> "RedisFilterExpression": + """Create a RedisText inequality filter expression + + Args: + other (str): The text value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisText + >>> filter = RedisText("job") != "engineer" + """ + self._set_value(other, str, RedisFilterOperator.NE) + return RedisFilterExpression(str(self)) + + def __mod__(self, other: str) -> "RedisFilterExpression": + """Create a RedisText like filter expression + + Args: + other (str): The text value to filter on. + + Example: + >>> from langchain.vectorstores.redis import RedisText + >>> filter = RedisText("job") % "engineer" + """ + self._set_value(other, str, RedisFilterOperator.LIKE) + return RedisFilterExpression(str(self)) + + def __str__(self) -> str: + if not self._value: + raise ValueError( + f"Operator must be used before calling __str__. Operators are " + f"{self.OPERATORS.values()}" + ) + + try: + return self.OPERATOR_MAP[self._operator] % (self._field, self._value) + except KeyError: + raise Exception("Invalid operator") + + +class RedisFilterExpression: + """A RedisFilterExpression is a logical expression of RedisFilterFields. + + RedisFilterExpressions can be combined using the & and | operators to create + complex logical expressions that evaluate to the Redis Query language. + + This presents an interface by which users can create complex queries + without having to know the Redis Query language. + + Filter expressions are not initialized directly. Instead they are built + by combining RedisFilterFields using the & and | operators. + + Examples: + + >>> from langchain.vectorstores.redis import RedisTag, RedisNum + >>> brand_is_nike = RedisTag("brand") == "nike" + >>> price_is_under_100 = RedisNum("price") < 100 + >>> filter = brand_is_nike & price_is_under_100 + >>> print(str(filter)) + (@brand:{nike} @price:[-inf (100)]) + + """ + + def __init__( + self, + _filter: Optional[str] = None, + operator: Optional[RedisFilterOperator] = None, + left: Optional["RedisFilterExpression"] = None, + right: Optional["RedisFilterExpression"] = None, + ): + self._filter = _filter + self._operator = operator + self._left = left + self._right = right + + def __and__(self, other: "RedisFilterExpression") -> "RedisFilterExpression": + return RedisFilterExpression( + operator=RedisFilterOperator.AND, left=self, right=other + ) + + def __or__(self, other: "RedisFilterExpression") -> "RedisFilterExpression": + return RedisFilterExpression( + operator=RedisFilterOperator.OR, left=self, right=other + ) + + def __str__(self) -> str: + # top level check that allows recursive calls to __str__ + if not self._filter and not self._operator: + raise ValueError("Improperly initialized RedisFilterExpression") + + # allow for single filter expression without operators as last + # expression in the chain might not have an operator + if self._operator: + operator_str = " | " if self._operator == RedisFilterOperator.OR else " " + return f"({str(self._left)}{operator_str}{str(self._right)})" + + # check that base case, the filter is set + if not self._filter: + raise ValueError("Improperly initialized RedisFilterExpression") + return self._filter diff --git a/libs/langchain/langchain/vectorstores/redis/schema.py b/libs/langchain/langchain/vectorstores/redis/schema.py new file mode 100644 index 000000000..1ecd92192 --- /dev/null +++ b/libs/langchain/langchain/vectorstores/redis/schema.py @@ -0,0 +1,276 @@ +import os +from enum import Enum +from pathlib import Path +from typing import Any, Dict, List, Optional, Union + +import numpy as np +import yaml + +# ignore type error here as it's a redis-py type problem +from redis.commands.search.field import ( # type: ignore + NumericField, + TagField, + TextField, + VectorField, +) +from typing_extensions import Literal + +from langchain.pydantic_v1 import BaseModel, Field, validator +from langchain.vectorstores.redis.constants import REDIS_VECTOR_DTYPE_MAP + + +class RedisDistanceMetric(str, Enum): + l2 = "L2" + cosine = "COSINE" + ip = "IP" + + +class RedisField(BaseModel): + name: str = Field(...) + + +class TextFieldSchema(RedisField): + weight: float = 1 + no_stem: bool = False + phonetic_matcher: Optional[str] = None + withsuffixtrie: bool = False + no_index: bool = False + sortable: Optional[bool] = False + + def as_field(self) -> TextField: + return TextField( + self.name, + weight=self.weight, + no_stem=self.no_stem, + phonetic_matcher=self.phonetic_matcher, + sortable=self.sortable, + no_index=self.no_index, + ) + + +class TagFieldSchema(RedisField): + separator: str = "," + case_sensitive: bool = False + no_index: bool = False + sortable: Optional[bool] = False + + def as_field(self) -> TagField: + return TagField( + self.name, + separator=self.separator, + case_sensitive=self.case_sensitive, + sortable=self.sortable, + no_index=self.no_index, + ) + + +class NumericFieldSchema(RedisField): + no_index: bool = False + sortable: Optional[bool] = False + + def as_field(self) -> NumericField: + return NumericField(self.name, sortable=self.sortable, no_index=self.no_index) + + +class RedisVectorField(RedisField): + dims: int = Field(...) + algorithm: object = Field(...) + datatype: str = Field(default="FLOAT32") + distance_metric: RedisDistanceMetric = Field(default="COSINE") + initial_cap: int = Field(default=20000) + + @validator("distance_metric", pre=True) + def uppercase_strings(cls, v: str) -> str: + return v.upper() + + @validator("datatype", pre=True) + def uppercase_and_check_dtype(cls, v: str) -> str: + if v.upper() not in REDIS_VECTOR_DTYPE_MAP: + raise ValueError( + f"datatype must be one of {REDIS_VECTOR_DTYPE_MAP.keys()}. Got {v}" + ) + return v.upper() + + +class FlatVectorField(RedisVectorField): + algorithm: Literal["FLAT"] = "FLAT" + block_size: int = Field(default=1000) + + def as_field(self) -> VectorField: + return VectorField( + self.name, + self.algorithm, + { + "TYPE": self.datatype, + "DIM": self.dims, + "DISTANCE_METRIC": self.distance_metric, + "INITIAL_CAP": self.initial_cap, + "BLOCK_SIZE": self.block_size, + }, + ) + + +class HNSWVectorField(RedisVectorField): + algorithm: Literal["HNSW"] = "HNSW" + m: int = Field(default=16) + ef_construction: int = Field(default=200) + ef_runtime: int = Field(default=10) + epsilon: float = Field(default=0.8) + + def as_field(self) -> VectorField: + return VectorField( + self.name, + self.algorithm, + { + "TYPE": self.datatype, + "DIM": self.dims, + "DISTANCE_METRIC": self.distance_metric, + "INITIAL_CAP": self.initial_cap, + "M": self.m, + "EF_CONSTRUCTION": self.ef_construction, + "EF_RUNTIME": self.ef_runtime, + "EPSILON": self.epsilon, + }, + ) + + +class RedisModel(BaseModel): + # always have a content field for text + text: List[TextFieldSchema] = [TextFieldSchema(name="content")] + tag: Optional[List[TagFieldSchema]] = None + numeric: Optional[List[NumericFieldSchema]] = None + extra: Optional[List[RedisField]] = None + + # filled by default_vector_schema + vector: Optional[List[Union[FlatVectorField, HNSWVectorField]]] = None + content_key: str = "content" + content_vector_key: str = "content_vector" + + def add_content_field(self) -> None: + if self.text is None: + self.text = [] + for field in self.text: + if field.name == self.content_key: + return + self.text.append(TextFieldSchema(name=self.content_key)) + + def add_vector_field(self, vector_field: Dict[str, Any]) -> None: + # catch case where user inputted no vector field spec + # in the index schema + if self.vector is None: + self.vector = [] + + # ignore types as pydantic is handling type validation and conversion + if vector_field["algorithm"] == "FLAT": + self.vector.append(FlatVectorField(**vector_field)) # type: ignore + elif vector_field["algorithm"] == "HNSW": + self.vector.append(HNSWVectorField(**vector_field)) # type: ignore + else: + raise ValueError( + f"algorithm must be either FLAT or HNSW. Got " + f"{vector_field['algorithm']}" + ) + + def as_dict(self) -> Dict[str, List[Any]]: + schemas: Dict[str, List[Any]] = {"text": [], "tag": [], "numeric": []} + # iter over all class attributes + for attr, attr_value in self.__dict__.items(): + # only non-empty lists + if isinstance(attr_value, list) and len(attr_value) > 0: + field_values: List[Dict[str, Any]] = [] + # iterate over all fields in each category (tag, text, etc) + for val in attr_value: + value: Dict[str, Any] = {} + # iterate over values within each field to extract + # settings for that field (i.e. name, weight, etc) + for field, field_value in val.__dict__.items(): + # make enums into strings + if isinstance(field_value, Enum): + value[field] = field_value.value + # don't write null values + elif field_value is not None: + value[field] = field_value + field_values.append(value) + + schemas[attr] = field_values + + schema: Dict[str, List[Any]] = {} + # only write non-empty lists from defaults + for k, v in schemas.items(): + if len(v) > 0: + schema[k] = v + return schema + + @property + def content_vector(self) -> Union[FlatVectorField, HNSWVectorField]: + if not self.vector: + raise ValueError("No vector fields found") + for field in self.vector: + if field.name == self.content_vector_key: + return field + raise ValueError("No content_vector field found") + + @property + def vector_dtype(self) -> np.dtype: + # should only ever be called after pydantic has validated the schema + return REDIS_VECTOR_DTYPE_MAP[self.content_vector.datatype] + + @property + def is_empty(self) -> bool: + return all( + field is None for field in [self.tag, self.text, self.numeric, self.vector] + ) + + def get_fields(self) -> List["RedisField"]: + redis_fields: List["RedisField"] = [] + if self.is_empty: + return redis_fields + + for field_name in self.__fields__.keys(): + if field_name not in ["content_key", "content_vector_key", "extra"]: + field_group = getattr(self, field_name) + if field_group is not None: + for field in field_group: + redis_fields.append(field.as_field()) + return redis_fields + + @property + def metadata_keys(self) -> List[str]: + keys: List[str] = [] + if self.is_empty: + return keys + + for field_name in self.__fields__.keys(): + field_group = getattr(self, field_name) + if field_group is not None: + for field in field_group: + # check if it's a metadata field. exclude vector and content key + if not isinstance(field, str) and field.name not in [ + self.content_key, + self.content_vector_key, + ]: + keys.append(field.name) + return keys + + +def read_schema( + index_schema: Optional[Union[Dict[str, str], str, os.PathLike]] +) -> Dict[str, Any]: + # check if its a dict and return RedisModel otherwise, check if it's a path and + # read in the file assuming it's a yaml file and return a RedisModel + if isinstance(index_schema, dict): + return index_schema + elif isinstance(index_schema, Path): + with open(index_schema, "rb") as f: + return yaml.safe_load(f) + elif isinstance(index_schema, str): + if Path(index_schema).resolve().is_file(): + with open(index_schema, "rb") as f: + return yaml.safe_load(f) + else: + raise FileNotFoundError(f"index_schema file {index_schema} does not exist") + else: + raise TypeError( + f"index_schema must be a dict, or path to a yaml file " + f"Got {type(index_schema)}" + ) diff --git a/libs/langchain/langchain/vectorstores/rocksetdb.py b/libs/langchain/langchain/vectorstores/rocksetdb.py index 5b2fc234a..674473774 100644 --- a/libs/langchain/langchain/vectorstores/rocksetdb.py +++ b/libs/langchain/langchain/vectorstores/rocksetdb.py @@ -1,4 +1,3 @@ -"""Wrapper around Rockset vector database.""" from __future__ import annotations import logging @@ -13,7 +12,7 @@ logger = logging.getLogger(__name__) class Rockset(VectorStore): - """Wrapper arpund Rockset vector database. + """`Rockset` vector store. To use, you should have the `rockset` python package installed. Note that to use this, the collection being used must already exist in your Rockset instance. diff --git a/libs/langchain/langchain/vectorstores/scann.py b/libs/langchain/langchain/vectorstores/scann.py index a1ce4af48..434080e7e 100644 --- a/libs/langchain/langchain/vectorstores/scann.py +++ b/libs/langchain/langchain/vectorstores/scann.py @@ -1,4 +1,3 @@ -"""Wrapper around ScaNN vector database.""" from __future__ import annotations import operator @@ -25,7 +24,7 @@ def normalize(x: np.ndarray) -> np.ndarray: def dependable_scann_import() -> Any: """ - Import scann if available, otherwise raise error. + Import `scann` if available, otherwise raise error. """ try: import scann @@ -38,7 +37,7 @@ def dependable_scann_import() -> Any: class ScaNN(VectorStore): - """Wrapper around ScaNN vector database. + """`ScaNN` vector store. To use, you should have the ``scann`` python package installed. diff --git a/libs/langchain/langchain/vectorstores/singlestoredb.py b/libs/langchain/langchain/vectorstores/singlestoredb.py index 7c05778c8..983f3f7f0 100644 --- a/libs/langchain/langchain/vectorstores/singlestoredb.py +++ b/libs/langchain/langchain/vectorstores/singlestoredb.py @@ -1,5 +1,3 @@ -"""Wrapper around SingleStore DB.""" - from __future__ import annotations import json @@ -35,8 +33,7 @@ ORDERING_DIRECTIVE: dict = { class SingleStoreDB(VectorStore): - """ - This class serves as a Pythonic interface to the SingleStore DB database. + """`SingleStore DB` vector store. The prerequisite for using this class is the installation of the ``singlestoredb`` Python package. diff --git a/libs/langchain/langchain/vectorstores/sklearn.py b/libs/langchain/langchain/vectorstores/sklearn.py index dcc6237c2..d4f49c965 100644 --- a/libs/langchain/langchain/vectorstores/sklearn.py +++ b/libs/langchain/langchain/vectorstores/sklearn.py @@ -21,7 +21,7 @@ DEFAULT_FETCH_K = 20 # Number of Documents to initially fetch during MMR search class BaseSerializer(ABC): - """Abstract base class for saving and loading data.""" + """Base class for serializing data.""" def __init__(self, persist_path: str) -> None: self.persist_path = persist_path @@ -57,7 +57,7 @@ class JsonSerializer(BaseSerializer): class BsonSerializer(BaseSerializer): - """Serializes data in binary json using the bson python package.""" + """Serializes data in binary json using the `bson` python package.""" def __init__(self, persist_path: str) -> None: super().__init__(persist_path) @@ -77,7 +77,7 @@ class BsonSerializer(BaseSerializer): class ParquetSerializer(BaseSerializer): - """Serializes data in Apache Parquet format using the pyarrow package.""" + """Serializes data in `Apache Parquet` format using the `pyarrow` package.""" def __init__(self, persist_path: str) -> None: super().__init__(persist_path) @@ -125,8 +125,8 @@ class SKLearnVectorStoreException(RuntimeError): class SKLearnVectorStore(VectorStore): - """A simple in-memory vector store based on the scikit-learn library - NearestNeighbors implementation.""" + """Simple in-memory vector store based on the `scikit-learn` library + `NearestNeighbors` implementation.""" def __init__( self, diff --git a/libs/langchain/langchain/vectorstores/starrocks.py b/libs/langchain/langchain/vectorstores/starrocks.py index d6abc40af..a172d1bbb 100644 --- a/libs/langchain/langchain/vectorstores/starrocks.py +++ b/libs/langchain/langchain/vectorstores/starrocks.py @@ -1,5 +1,3 @@ -"""Wrapper around open source StarRocks VectorSearch capability.""" - from __future__ import annotations import json @@ -69,7 +67,7 @@ def get_named_result(connection: Any, query: str) -> List[dict[str, Any]]: class StarRocksSettings(BaseSettings): - """StarRocks Client Configuration + """StarRocks client configuration. Attribute: StarRocks_host (str) : An URL to connect to MyScale backend. @@ -121,7 +119,7 @@ class StarRocksSettings(BaseSettings): class StarRocks(VectorStore): - """Wrapper around StarRocks vector database + """`StarRocks` vector store. You need a `pymysql` python package, and a valid account to connect to StarRocks. diff --git a/libs/langchain/langchain/vectorstores/supabase.py b/libs/langchain/langchain/vectorstores/supabase.py index a0f918309..d91196534 100644 --- a/libs/langchain/langchain/vectorstores/supabase.py +++ b/libs/langchain/langchain/vectorstores/supabase.py @@ -26,7 +26,9 @@ if TYPE_CHECKING: class SupabaseVectorStore(VectorStore): - """VectorStore for a Supabase postgres database. Assumes you have the `pgvector` + """`Supabase Postgres` vector store. + + It assumes you have the `pgvector` extension installed and a `match_documents` (or similar) function. For more details: https://integrations.langchain.com/vectorstores?integration_name=SupabaseVectorStore @@ -92,7 +94,7 @@ class SupabaseVectorStore(VectorStore): try: import supabase # noqa: F401 except ImportError: - raise ValueError( + raise ImportError( "Could not import supabase python package. " "Please install it with `pip install supabase`." ) diff --git a/libs/langchain/langchain/vectorstores/tair.py b/libs/langchain/langchain/vectorstores/tair.py index 0bda5c681..e55ea4283 100644 --- a/libs/langchain/langchain/vectorstores/tair.py +++ b/libs/langchain/langchain/vectorstores/tair.py @@ -1,4 +1,3 @@ -"""Wrapper around Tair Vector.""" from __future__ import annotations import json @@ -19,7 +18,7 @@ def _uuid_key() -> str: class Tair(VectorStore): - """Wrapper around Tair Vector store.""" + """`Tair` vector store.""" def __init__( self, @@ -86,6 +85,10 @@ class Tair(VectorStore): """Add texts data to an existing index.""" ids = [] keys = kwargs.get("keys", None) + use_hybrid_search = False + index = self.client.tvs_get_index(self.index_name) + if index is not None and index.get("lexical_algorithm") == "bm25": + use_hybrid_search = True # Write data to tair pipeline = self.client.pipeline(transaction=False) embeddings = self.embedding_function.embed_documents(list(texts)) @@ -93,16 +96,30 @@ class Tair(VectorStore): # Use provided key otherwise use default key key = keys[i] if keys else _uuid_key() metadata = metadatas[i] if metadatas else {} - pipeline.tvs_hset( - self.index_name, - key, - embeddings[i], - False, - **{ - self.content_key: text, - self.metadata_key: json.dumps(metadata), - }, - ) + if use_hybrid_search: + # tair use TEXT attr hybrid search + pipeline.tvs_hset( + self.index_name, + key, + embeddings[i], + False, + **{ + "TEXT": text, + self.content_key: text, + self.metadata_key: json.dumps(metadata), + }, + ) + else: + pipeline.tvs_hset( + self.index_name, + key, + embeddings[i], + False, + **{ + self.content_key: text, + self.metadata_key: json.dumps(metadata), + }, + ) ids.append(key) pipeline.execute() return ids @@ -166,7 +183,7 @@ class Tair(VectorStore): distance_type = tairvector.DistanceMetric.InnerProduct if "distance_type" in kwargs: - distance_type = kwargs.pop("distance_typ") + distance_type = kwargs.pop("distance_type") index_type = tairvector.IndexType.HNSW if "index_type" in kwargs: index_type = kwargs.pop("index_type") diff --git a/libs/langchain/langchain/vectorstores/tigris.py b/libs/langchain/langchain/vectorstores/tigris.py index 036103999..6abbfe676 100644 --- a/libs/langchain/langchain/vectorstores/tigris.py +++ b/libs/langchain/langchain/vectorstores/tigris.py @@ -15,12 +15,14 @@ if TYPE_CHECKING: class Tigris(VectorStore): + """`Tigris` vector store.""" + def __init__(self, client: TigrisClient, embeddings: Embeddings, index_name: str): - """Initialize Tigris vector store""" + """Initialize Tigris vector store.""" try: import tigrisdb # noqa: F401 except ImportError: - raise ValueError( + raise ImportError( "Could not import tigrisdb python package. " "Please install it with `pip install tigrisdb`" ) diff --git a/libs/langchain/langchain/vectorstores/typesense.py b/libs/langchain/langchain/vectorstores/typesense.py index a35b2cf0c..cdaaa5155 100644 --- a/libs/langchain/langchain/vectorstores/typesense.py +++ b/libs/langchain/langchain/vectorstores/typesense.py @@ -1,4 +1,3 @@ -"""Wrapper around Typesense vector search""" from __future__ import annotations import uuid @@ -15,7 +14,7 @@ if TYPE_CHECKING: class Typesense(VectorStore): - """Wrapper around Typesense vector search. + """`Typesense` vector store. To use, you should have the ``typesense`` python package installed. @@ -61,7 +60,7 @@ class Typesense(VectorStore): try: from typesense import Client except ImportError: - raise ValueError( + raise ImportError( "Could not import typesense python package. " "Please install it with `pip install typesense`." ) diff --git a/libs/langchain/langchain/vectorstores/usearch.py b/libs/langchain/langchain/vectorstores/usearch.py index 1d0e754e1..cb4e8c6eb 100644 --- a/libs/langchain/langchain/vectorstores/usearch.py +++ b/libs/langchain/langchain/vectorstores/usearch.py @@ -1,4 +1,3 @@ -"""Wrapper around USearch vector database.""" from __future__ import annotations from typing import Any, Dict, Iterable, List, Optional, Tuple @@ -27,7 +26,8 @@ def dependable_usearch_import() -> Any: class USearch(VectorStore): - """Wrapper around USearch vector database. + """`USearch` vector store. + To use, you should have the ``usearch`` python package installed. """ diff --git a/libs/langchain/langchain/vectorstores/vectara.py b/libs/langchain/langchain/vectorstores/vectara.py index cd8ee9c9f..eee2f1abe 100644 --- a/libs/langchain/langchain/vectorstores/vectara.py +++ b/libs/langchain/langchain/vectorstores/vectara.py @@ -1,4 +1,3 @@ -"""Wrapper around Vectara vector database.""" from __future__ import annotations import json @@ -18,7 +17,7 @@ logger = logging.getLogger(__name__) class Vectara(VectorStore): - """Implementation of Vector Store using Vectara. + """`Vectara API` vector store. See (https://vectara.com). @@ -426,7 +425,7 @@ class Vectara(VectorStore): class VectaraRetriever(VectorStoreRetriever): - """Retriever class for Vectara.""" + """Retriever class for `Vectara`.""" vectorstore: Vectara """Vectara vectorstore.""" diff --git a/libs/langchain/langchain/vectorstores/weaviate.py b/libs/langchain/langchain/vectorstores/weaviate.py index 0f54801f9..5f09a785d 100644 --- a/libs/langchain/langchain/vectorstores/weaviate.py +++ b/libs/langchain/langchain/vectorstores/weaviate.py @@ -1,4 +1,3 @@ -"""Wrapper around weaviate vector database.""" from __future__ import annotations import datetime @@ -44,7 +43,7 @@ def _create_weaviate_client(**kwargs: Any) -> Any: try: import weaviate except ImportError: - raise ValueError( + raise ImportError( "Could not import weaviate python package. " "Please install it with `pip install weaviate-client`" ) @@ -70,7 +69,7 @@ def _json_serializable(value: Any) -> Any: class Weaviate(VectorStore): - """Wrapper around Weaviate vector database. + """`Weaviate` vector store. To use, you should have the ``weaviate-client`` python package installed. diff --git a/libs/langchain/langchain/vectorstores/xata.py b/libs/langchain/langchain/vectorstores/xata.py index ef25bc1a6..441fee825 100644 --- a/libs/langchain/langchain/vectorstores/xata.py +++ b/libs/langchain/langchain/vectorstores/xata.py @@ -1,5 +1,3 @@ -"""Wrapper around Xata as a vector database.""" - from __future__ import annotations import time @@ -12,7 +10,9 @@ from langchain.vectorstores.base import VectorStore class XataVectorStore(VectorStore): - """VectorStore for a Xata database. Assumes you have a Xata database + """`Xata` vector store. + + It assumes you have a Xata database created with the right schema. See the guide at: https://integrations.langchain.com/vectorstores?integration_name=XataVectorStore @@ -29,7 +29,7 @@ class XataVectorStore(VectorStore): try: from xata.client import XataClient # noqa: F401 except ImportError: - raise ValueError( + raise ImportError( "Could not import xata python package. " "Please install it with `pip install xata`." ) diff --git a/libs/langchain/langchain/vectorstores/zep.py b/libs/langchain/langchain/vectorstores/zep.py index faf04a139..98593ec91 100644 --- a/libs/langchain/langchain/vectorstores/zep.py +++ b/libs/langchain/langchain/vectorstores/zep.py @@ -22,8 +22,7 @@ logger = logging.getLogger() @dataclass class CollectionConfig: - """ - A configuration class for a Zep Collection. + """Configuration for a `Zep Collection`. If the collection does not exist, it will be created. @@ -46,9 +45,9 @@ class CollectionConfig: class ZepVectorStore(VectorStore): - """ - ZepVectorStore is a VectorStore implementation that uses the Zep long-term memory - store as a backend. It provides methods for adding texts or documents to the store, + """`Zep` vector store. + + It provides methods for adding texts or documents to the store, searching for similar documents, and deleting documents. Search scores are calculated using cosine similarity normalized to [0, 1]. diff --git a/libs/langchain/langchain/vectorstores/zilliz.py b/libs/langchain/langchain/vectorstores/zilliz.py index 835a03a74..8a571aca3 100644 --- a/libs/langchain/langchain/vectorstores/zilliz.py +++ b/libs/langchain/langchain/vectorstores/zilliz.py @@ -10,9 +10,9 @@ logger = logging.getLogger(__name__) class Zilliz(Milvus): - """Initialize wrapper around the Zilliz vector database. + """`Zilliz` vector store. - In order to use this you need to have `pymilvus` installed and a + You need to have `pymilvus` installed and a running Zilliz database. See the following documentation for how to run a Zilliz instance: diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index cff786972..e21acf426 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "absl-py" @@ -13,17 +13,17 @@ files = [ [[package]] name = "aioboto3" -version = "11.2.0" +version = "11.3.0" description = "Async boto3 wrapper" optional = true python-versions = ">=3.7,<4.0" files = [ - {file = "aioboto3-11.2.0-py3-none-any.whl", hash = "sha256:df4b83c3943b009a4dcd9f397f9f0491a374511b1ef37545082a771ca1e549fb"}, - {file = "aioboto3-11.2.0.tar.gz", hash = "sha256:c7f6234fd73efcb60ab6fca383fec33bb6352ca1832f252eac810cd6674f1748"}, + {file = "aioboto3-11.3.0-py3-none-any.whl", hash = "sha256:11e6df5bf317e0dfc1390a29fea9e9f3afd8be99bad2cc9719d2cf44080a16fb"}, + {file = "aioboto3-11.3.0.tar.gz", hash = "sha256:6f504ac312f62be5199033af97f51b20fac31df7f42c128d6643241c8e5741a9"}, ] [package.dependencies] -aiobotocore = {version = "2.5.0", extras = ["boto3"]} +aiobotocore = {version = "2.6.0", extras = ["boto3"]} [package.extras] chalice = ["chalice (>=1.24.0)"] @@ -31,25 +31,25 @@ s3cse = ["cryptography (>=2.3.1)"] [[package]] name = "aiobotocore" -version = "2.5.0" +version = "2.6.0" description = "Async client for aws services using botocore and aiohttp" optional = true python-versions = ">=3.7" files = [ - {file = "aiobotocore-2.5.0-py3-none-any.whl", hash = "sha256:9a2a022d7b78ec9a2af0de589916d2721cddbf96264401b78d7a73c1a1435f3b"}, - {file = "aiobotocore-2.5.0.tar.gz", hash = "sha256:6a5b397cddd4f81026aa91a14c7dd2650727425740a5af8ba75127ff663faf67"}, + {file = "aiobotocore-2.6.0-py3-none-any.whl", hash = "sha256:0186e6a843364748cdbbf76ee98e9337c44f71a4e694ad1b110d5c516fbce909"}, + {file = "aiobotocore-2.6.0.tar.gz", hash = "sha256:4805d0140bdfa17bfc2d0ba1243c8cc4273e927201fca5cf2e497c0004a9fab7"}, ] [package.dependencies] -aiohttp = ">=3.3.1" -aioitertools = ">=0.5.1" -boto3 = {version = ">=1.26.76,<1.26.77", optional = true, markers = "extra == \"boto3\""} -botocore = ">=1.29.76,<1.29.77" -wrapt = ">=1.10.10" +aiohttp = ">=3.7.4.post0,<4.0.0" +aioitertools = ">=0.5.1,<1.0.0" +boto3 = {version = ">=1.28.17,<1.28.18", optional = true, markers = "extra == \"boto3\""} +botocore = ">=1.31.17,<1.31.18" +wrapt = ">=1.10.10,<2.0.0" [package.extras] -awscli = ["awscli (>=1.27.76,<1.27.77)"] -boto3 = ["boto3 (>=1.26.76,<1.26.77)"] +awscli = ["awscli (>=1.29.17,<1.29.18)"] +boto3 = ["boto3 (>=1.28.17,<1.28.18)"] [[package]] name = "aiodns" @@ -67,109 +67,109 @@ pycares = ">=4.0.0" [[package]] name = "aiofiles" -version = "23.1.0" +version = "23.2.1" description = "File support for asyncio." optional = true -python-versions = ">=3.7,<4.0" +python-versions = ">=3.7" files = [ - {file = "aiofiles-23.1.0-py3-none-any.whl", hash = "sha256:9312414ae06472eb6f1d163f555e466a23aed1c8f60c30cccf7121dba2e53eb2"}, - {file = "aiofiles-23.1.0.tar.gz", hash = "sha256:edd247df9a19e0db16534d4baaf536d6609a43e1de5401d7a4c1c148753a1635"}, + {file = "aiofiles-23.2.1-py3-none-any.whl", hash = "sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107"}, + {file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"}, ] [[package]] name = "aiohttp" -version = "3.8.4" +version = "3.8.5" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.6" files = [ - {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1"}, - {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a"}, - {file = "aiohttp-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea"}, - {file = "aiohttp-3.8.4-cp310-cp310-win32.whl", hash = "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1"}, - {file = "aiohttp-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24"}, - {file = "aiohttp-3.8.4-cp311-cp311-win32.whl", hash = "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d"}, - {file = "aiohttp-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc"}, - {file = "aiohttp-3.8.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff"}, - {file = "aiohttp-3.8.4-cp36-cp36m-win32.whl", hash = "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777"}, - {file = "aiohttp-3.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e"}, - {file = "aiohttp-3.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241"}, - {file = "aiohttp-3.8.4-cp37-cp37m-win32.whl", hash = "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a"}, - {file = "aiohttp-3.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d"}, - {file = "aiohttp-3.8.4-cp38-cp38-win32.whl", hash = "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54"}, - {file = "aiohttp-3.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4"}, - {file = "aiohttp-3.8.4-cp39-cp39-win32.whl", hash = "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a"}, - {file = "aiohttp-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04"}, - {file = "aiohttp-3.8.4.tar.gz", hash = "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c"}, + {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, + {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, + {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, + {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, + {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, + {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, + {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, + {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, + {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, + {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, + {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, + {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, + {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, + {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, + {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, + {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, ] [package.dependencies] @@ -321,13 +321,13 @@ marshmallow = ">=3.14,<4" [[package]] name = "anyio" -version = "3.7.0" +version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.7" files = [ - {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, - {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] [package.dependencies] @@ -336,21 +336,10 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (<0.22)"] -[[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = true -python-versions = "*" -files = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] - [[package]] name = "appnope" version = "0.1.3" @@ -364,22 +353,23 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] argon2-cffi-bindings = "*" [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" @@ -434,18 +424,38 @@ python-dateutil = ">=2.7.0" [[package]] name = "arxiv" -version = "1.4.7" +version = "1.4.8" description = "Python wrapper for the arXiv API: http://arxiv.org/help/api/" optional = true python-versions = ">=3.7" files = [ - {file = "arxiv-1.4.7-py3-none-any.whl", hash = "sha256:22b8f610957bb6859a25fac9dc205ab6ba76d521791119a5762ea52625e398a0"}, - {file = "arxiv-1.4.7.tar.gz", hash = "sha256:100c8d6b9cd04c7f55f11b34616beb7a1623ab0564b66161b4aeeeb8912c5806"}, + {file = "arxiv-1.4.8-py3-none-any.whl", hash = "sha256:c3dbef0fb7ed85c9b4c2157b40a62f5a04ce0d2f63c3ff7caa7798abf6166378"}, + {file = "arxiv-1.4.8.tar.gz", hash = "sha256:2a818ea749eaa62a6e24fc31d53b769b4d33ff55cfc5dda7c7b7d309a3b29373"}, ] [package.dependencies] feedparser = "*" +[[package]] +name = "assemblyai" +version = "0.17.0" +description = "AssemblyAI Python SDK" +optional = true +python-versions = ">=3.8" +files = [ + {file = "assemblyai-0.17.0-py3-none-any.whl", hash = "sha256:3bad8cc7545b5b831f243f1b2f01bc4cc0e8aad78babf44c8008f2293c540e36"}, + {file = "assemblyai-0.17.0.tar.gz", hash = "sha256:6d5bbfbbaa626ed021c3d3dec0ca52b3ebf6e6ef277ac76a7a6aed52182d531e"}, +] + +[package.dependencies] +httpx = ">=0.19.0" +pydantic = ">=1.7.0,<1.10.7 || >1.10.7" +typing-extensions = ">=3.7" +websockets = ">=11.0" + +[package.extras] +extras = ["pyaudio (>=0.2.13)"] + [[package]] name = "asttokens" version = "2.2.1" @@ -478,37 +488,63 @@ files = [ six = ">=1.6.1,<2.0" wheel = ">=0.23.0,<1.0" +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + [[package]] name = "async-timeout" -version = "4.0.2" +version = "4.0.3" description = "Timeout context manager for asyncio programs" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] [[package]] name = "atlassian-python-api" -version = "3.39.0" +version = "3.41.0" description = "Python Atlassian REST API Wrapper" optional = true python-versions = "*" files = [ - {file = "atlassian-python-api-3.39.0.tar.gz", hash = "sha256:69c556b2485224fdc8b4ff1c071d68c81de6c65526a418fb81d99cc34a5d288c"}, + {file = "atlassian-python-api-3.41.0.tar.gz", hash = "sha256:3ac7dc4b7840fc96f6a22dede9326c810727c261f0ef8986764c6f4f3040058f"}, + {file = "atlassian_python_api-3.41.0-py3-none-any.whl", hash = "sha256:af4e34c0b92f49e742eedbc14b9b38855242ab61e65d4dc4d77c929cda842190"}, ] [package.dependencies] deprecated = "*" oauthlib = "*" requests = "*" -requests_oauthlib = "*" +requests-oauthlib = "*" six = "*" [package.extras] kerberos = ["requests-kerberos"] +[[package]] +name = "attr" +version = "0.3.2" +description = "Simple decorator to set attributes of target function or class in a DRY way." +optional = true +python-versions = "*" +files = [ + {file = "attr-0.3.2-py2.py3-none-any.whl", hash = "sha256:4f4bffeea8c27387bde446675a7ac24f3b8fea1075f12d849b5f5c5181fc8336"}, + {file = "attr-0.3.2.tar.gz", hash = "sha256:1ceebca768181cdcce9827611b1d728e592be5d293911539ea3d0b0bfa1146f4"}, +] + [[package]] name = "attrs" version = "23.1.0" @@ -539,13 +575,13 @@ files = [ [[package]] name = "authlib" -version = "1.2.0" +version = "1.2.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = true python-versions = "*" files = [ - {file = "Authlib-1.2.0-py2.py3-none-any.whl", hash = "sha256:4ddf4fd6cfa75c9a460b361d4bd9dac71ffda0be879dbe4292a02e92349ad55a"}, - {file = "Authlib-1.2.0.tar.gz", hash = "sha256:4fa3e80883a5915ef9f5bc28630564bc4ed5b5af39812a3ff130ec76bd631e9d"}, + {file = "Authlib-1.2.1-py2.py3-none-any.whl", hash = "sha256:c88984ea00149a90e3537c964327da930779afa4564e354edfd98410bea01911"}, + {file = "Authlib-1.2.1.tar.gz", hash = "sha256:421f7c6b468d907ca2d9afede256f068f87e34d23dd221c07d13d4c234726afb"}, ] [package.dependencies] @@ -553,26 +589,25 @@ cryptography = ">=3.2" [[package]] name = "awadb" -version = "0.3.9" +version = "0.3.10" description = "AI Native database for embedding vectors" optional = true python-versions = ">=3.7" files = [ - {file = "awadb-0.3.9-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:8a3f88f9b4426f1c588752a5af89f2daa52b4faf5fe25046f9bfcaa8d8201298"}, - {file = "awadb-0.3.9-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:1d7fa3a75fcdd81d486a5254237234058d772cb70478c2f197ee9560a3596813"}, - {file = "awadb-0.3.9-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8276b5ee5dddc48c2e111253231d64a12684bf10971c44dd5bc01ea737fdffdc"}, - {file = "awadb-0.3.9-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:9c770aa9f9f17852e8cb3e78e1d3677b2c4ffda817889cf23935b3147c94a013"}, - {file = "awadb-0.3.9-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:0abaf08b1accd5b58296a13143eab2f55c576c00d896b692f8a2846bfbb33be9"}, - {file = "awadb-0.3.9-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:ac6d34a6688b6daf412a859ffd85b5c18a30d25d267074dcdbc176a005fc5db2"}, - {file = "awadb-0.3.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:151ae39f9b74a032f86a4cde7399cb5c1bdd796e995de550ae3583ddd1e45884"}, - {file = "awadb-0.3.9-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:1f62bf20c0824ad57711c4898d96b74d7f083cb129b11455f36e64850fe6a064"}, - {file = "awadb-0.3.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3b78e0a3a87ae60242dc9d07eba12f7c455838e6c9afb22fc68c75b510f27614"}, - {file = "awadb-0.3.9-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:51ca452327011cf97aa6a7316e39c7cda5c537c5a8cbbbd28a5f0f1394499845"}, - {file = "awadb-0.3.9-cp38-cp38-macosx_13_0_arm64.whl", hash = "sha256:5b816916b0d61aace79b0ed0cd0bdc4b35bfc5299a095ba6e2bb350d8f485860"}, - {file = "awadb-0.3.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:608472fcc694e298b4ff920e4e6da502d5314b6441637f608869dc6d4af627db"}, - {file = "awadb-0.3.9-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:50f1ab8cf92cd714ef57dd2c496b9e65003fb531295b8f99cd89b7575578d382"}, - {file = "awadb-0.3.9-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:911b78156cb3c0e723317c622a1d3cabcaea771f464200b30709bbb4143eb8a8"}, - {file = "awadb-0.3.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:330440be36f18e3f02cb645465618fd2a425b3260f2f645d7065d9f93857cf11"}, + {file = "awadb-0.3.10-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:1149b1c6fee95bd6e0f7ff625de060db679ea3985cad2332028eb50a76b9726e"}, + {file = "awadb-0.3.10-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a447894ed721184a680566ac8584154d6801d1f99e98996c1d4bd198c022aa07"}, + {file = "awadb-0.3.10-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:ab21a90930f58e666a6874618813cc32a93b1e2fd4e66901c9e5392844165034"}, + {file = "awadb-0.3.10-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:bfa1b64dfb9b77710180be9b2971afa6e19608bad54460b819131c2d24efa4f4"}, + {file = "awadb-0.3.10-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:45a3094119ca3ee1a04abf23a9c22a14bb06cd938a128b28de423031b471787f"}, + {file = "awadb-0.3.10-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:5a8f532621e4e551cdf4ccf0fcfb3a31d3be4d4fe262b26ba7bd7ff769722c9c"}, + {file = "awadb-0.3.10-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:52480a9589e564fb03f504fb2eb26a27fcf552129725fd25a458b0db7d56fde5"}, + {file = "awadb-0.3.10-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d38a1fb571a6e708218c00ec08ffc2b136f9eba8d4308f3d8ed1a3dc89fcdef6"}, + {file = "awadb-0.3.10-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:d0e9f2ecb943ea6ba3ccbb849ef79f814fd59efee7d4c698a5220bc3ce308457"}, + {file = "awadb-0.3.10-cp38-cp38-macosx_13_0_arm64.whl", hash = "sha256:fb4ab07c75bc3a92be9db2241551f60d705b18bcd48af95d57977084477647d9"}, + {file = "awadb-0.3.10-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:157a1f64e8ad3a28cc7cc5a22d39d0703121b1088db46d02adae23ea41a0346c"}, + {file = "awadb-0.3.10-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:afad9bec8a0b183de77210cff12fef7d61f8f524cdfd6c0f4c440f7fea763e30"}, + {file = "awadb-0.3.10-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:71c084197abff80addf3568457a561df54db4bcaf13244f98b68d5fb32d9c2b0"}, + {file = "awadb-0.3.10-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cc9212d8ab743331329b225a594eaa64918e32a06046373bc07821f8e9aa423e"}, ] [package.extras] @@ -580,13 +615,13 @@ test = ["pytest (>=6.0)"] [[package]] name = "azure-ai-formrecognizer" -version = "3.2.1" +version = "3.3.0" description = "Microsoft Azure Form Recognizer Client Library for Python" optional = true python-versions = ">=3.7" files = [ - {file = "azure-ai-formrecognizer-3.2.1.zip", hash = "sha256:5768765f9720ce87038f56afe0c0b5259192cfb29c840a39595b1e26e4ddfa32"}, - {file = "azure_ai_formrecognizer-3.2.1-py3-none-any.whl", hash = "sha256:4db43b9dd0a2bc5296b752c04dbacb838ae2b8726adfe7cf277c2ea34e99419a"}, + {file = "azure-ai-formrecognizer-3.3.0.zip", hash = "sha256:154b0c5e43d9ca4b8410ff36578723b8811774aee33ce7cfb4dc200ac42f31b5"}, + {file = "azure_ai_formrecognizer-3.3.0-py3-none-any.whl", hash = "sha256:62cf7ec9b109f87a0b3a0277750382cbbe5dcbd911a600bcf580a7ae1c181c71"}, ] [package.dependencies] @@ -608,17 +643,17 @@ files = [ [[package]] name = "azure-cognitiveservices-speech" -version = "1.29.0" +version = "1.31.0" description = "Microsoft Cognitive Services Speech SDK for Python" optional = true python-versions = ">=3.7" files = [ - {file = "azure_cognitiveservices_speech-1.29.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:1beda741dd6e49564e9d970c606f1ea7e007969069842b19327abce119175774"}, - {file = "azure_cognitiveservices_speech-1.29.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b189c4248b4adf69fc563abe30780c8f09bad6200414bb2b765abe2d44ed8c96"}, - {file = "azure_cognitiveservices_speech-1.29.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:e9474e3ea19ed44f80c2aa7bc1c5c5e9711c5dbdf0662cb2eec31ff7821dbfa8"}, - {file = "azure_cognitiveservices_speech-1.29.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:cea4984bd3fa582c41ba8ec79cd37f55380bb386e09ca155ae2aac343c8bdac5"}, - {file = "azure_cognitiveservices_speech-1.29.0-py3-none-win32.whl", hash = "sha256:7cdc010e4a4586e78d3a265931520ca0422eed8145d37a7dd1e448e437945e08"}, - {file = "azure_cognitiveservices_speech-1.29.0-py3-none-win_amd64.whl", hash = "sha256:cdba9d39fd9e7ee7cf49c54e8a3ba2b217469219b3a35cb3c993f32ca00d217c"}, + {file = "azure_cognitiveservices_speech-1.31.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:43818484c5b0e0f2f22bb47fef5fea32cec779c08eefd7a501d5ae240ce0bd3f"}, + {file = "azure_cognitiveservices_speech-1.31.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4684046eb04f17484db768b1de058b0b5a65f7e40c016c0e187247c8c8c9b029"}, + {file = "azure_cognitiveservices_speech-1.31.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:8d82aa933677b528fbe0605b9a0ab1f7aa5f09d4aadd48fb21473ba2dfeec614"}, + {file = "azure_cognitiveservices_speech-1.31.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0d4a6952d24a32eecec70dd063ba401a1aa6ee72d70c2cc2343bd60741494b67"}, + {file = "azure_cognitiveservices_speech-1.31.0-py3-none-win32.whl", hash = "sha256:3dfe69185f910208099c9e635e52de7e846928c6d0dda526b26ef3c1ed8ee62e"}, + {file = "azure_cognitiveservices_speech-1.31.0-py3-none-win_amd64.whl", hash = "sha256:39940875d651999e0b60caef20adc9798951a675eece4f5e4fb03bcb77ddef03"}, ] [[package]] @@ -634,13 +669,13 @@ files = [ [[package]] name = "azure-core" -version = "1.27.1" +version = "1.29.1" description = "Microsoft Azure Core Library for Python" optional = true python-versions = ">=3.7" files = [ - {file = "azure-core-1.27.1.zip", hash = "sha256:5975c20808fa388243f01a8b79021bfbe114f503a27c543f002c5fc8bbdd73dd"}, - {file = "azure_core-1.27.1-py3-none-any.whl", hash = "sha256:1b4b19f455eb7b4332c6f92adc2c669353ded07c2722eb436165f0c253737792"}, + {file = "azure-core-1.29.1.zip", hash = "sha256:68e5bb6e3a3230ec202001cc5cb88e57f11c441c8345e921a9ffb8c370abf936"}, + {file = "azure_core-1.29.1-py3-none-any.whl", hash = "sha256:6bcefa1f70ff7bf3c39c07c73d8a21df73288eff7e6a1031eb8cfae71cc7bed4"}, ] [package.dependencies] @@ -653,13 +688,13 @@ aio = ["aiohttp (>=3.0)"] [[package]] name = "azure-cosmos" -version = "4.4.0" +version = "4.5.0" description = "Microsoft Azure Cosmos Client Library for Python" optional = true python-versions = ">=3.6" files = [ - {file = "azure-cosmos-4.4.0.zip", hash = "sha256:4c6785489704f037aa67f725c41eef850f693d99eb6ea3ec49f785a1e35ab021"}, - {file = "azure_cosmos-4.4.0-py3-none-any.whl", hash = "sha256:5ba74668a77f69e60ac7d11e755be7d5d4852ec03482c0a625d221eb10be5de2"}, + {file = "azure-cosmos-4.5.0.zip", hash = "sha256:621af88e16de1464e7ced27e9a719da93c2226863efd839bc5b33c3df9cb3118"}, + {file = "azure_cosmos-4.5.0-py3-none-any.whl", hash = "sha256:c7c6633f047f36fd490dbf1e106bf9d762bfdcf3c9b6206dd8efe5d9e2f2980a"}, ] [package.dependencies] @@ -667,13 +702,13 @@ azure-core = ">=1.23.0,<2.0.0" [[package]] name = "azure-identity" -version = "1.13.0" +version = "1.14.0" description = "Microsoft Azure Identity Library for Python" optional = true python-versions = ">=3.7" files = [ - {file = "azure-identity-1.13.0.zip", hash = "sha256:c931c27301ffa86b07b4dcf574e29da73e3deba9ab5d1fe4f445bb6a3117e260"}, - {file = "azure_identity-1.13.0-py3-none-any.whl", hash = "sha256:bd700cebb80cd9862098587c29d8677e819beca33c62568ced6d5a8e5e332b82"}, + {file = "azure-identity-1.14.0.zip", hash = "sha256:72441799f8c5c89bfe21026965e266672a7c5d050c2c65119ef899dd5362e2b1"}, + {file = "azure_identity-1.14.0-py3-none-any.whl", hash = "sha256:edabf0e010eb85760e1dd19424d5e8f97ba2c9caff73a16e7b30ccbdbcce369b"}, ] [package.dependencies] @@ -681,17 +716,16 @@ azure-core = ">=1.11.0,<2.0.0" cryptography = ">=2.5" msal = ">=1.20.0,<2.0.0" msal-extensions = ">=0.3.0,<2.0.0" -six = ">=1.12.0" [[package]] name = "azure-search-documents" -version = "11.4.0b6" +version = "11.4.0b8" description = "Microsoft Azure Cognitive Search Client Library for Python" optional = true python-versions = ">=3.7" files = [ - {file = "azure-search-documents-11.4.0b6.zip", hash = "sha256:c9ebd7d99d3c7b879f48acad66141e1f50eae4468cfb8389a4b25d4c620e8df1"}, - {file = "azure_search_documents-11.4.0b6-py3-none-any.whl", hash = "sha256:24ff85bf2680c36b38d8092bcbbe2d90699aac7c4a228b0839c0ce595a41628c"}, + {file = "azure-search-documents-11.4.0b8.zip", hash = "sha256:b178ff52918590191a9cb7f411a9ab3cb517663666a501a3e84b715d19b0d93b"}, + {file = "azure_search_documents-11.4.0b8-py3-none-any.whl", hash = "sha256:4137daa2db75bff9484d394c16c0604822a51281cad2f50e11d7c48dd8d4b4cf"}, ] [package.dependencies] @@ -699,6 +733,20 @@ azure-common = ">=1.1,<2.0" azure-core = ">=1.24.0,<2.0.0" isodate = ">=0.6.0" +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[package.dependencies] +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} + [[package]] name = "backcall" version = "0.2.0" @@ -782,36 +830,33 @@ pyparsing = ">=2.0.3" [[package]] name = "black" -version = "23.3.0" +version = "23.7.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, ] [package.dependencies] @@ -860,17 +905,17 @@ files = [ [[package]] name = "boto3" -version = "1.26.76" +version = "1.28.17" description = "The AWS SDK for Python" optional = true python-versions = ">= 3.7" files = [ - {file = "boto3-1.26.76-py3-none-any.whl", hash = "sha256:b4c2969b7677762914394b8273cc1905dfe5b71f250741c1a575487ae357e729"}, - {file = "boto3-1.26.76.tar.gz", hash = "sha256:30c7d967ed1c6b5a05643e42cae9d4d36c3f1cb6782637ddc7007a104cfd9027"}, + {file = "boto3-1.28.17-py3-none-any.whl", hash = "sha256:bca0526f819e0f19c0f1e6eba3e2d1d6b6a92a45129f98c0d716e5aab6d9444b"}, + {file = "boto3-1.28.17.tar.gz", hash = "sha256:90f7cfb5e1821af95b1fc084bc50e6c47fa3edc99f32de1a2591faa0c546bea7"}, ] [package.dependencies] -botocore = ">=1.29.76,<1.30.0" +botocore = ">=1.31.17,<1.32.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -879,13 +924,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.29.76" +version = "1.31.17" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">= 3.7" files = [ - {file = "botocore-1.29.76-py3-none-any.whl", hash = "sha256:70735b00cd529f152992231ca6757e458e5ec25db43767b3526e9a35b2f143b7"}, - {file = "botocore-1.29.76.tar.gz", hash = "sha256:c2f67b6b3f8acf2968eafca06526f07b9fb0d27bac4c68a635d51abb675134a7"}, + {file = "botocore-1.31.17-py3-none-any.whl", hash = "sha256:6ac34a1d34aa3750e78b77b8596617e2bab938964694d651939dba2cbde2c12b"}, + {file = "botocore-1.31.17.tar.gz", hash = "sha256:396459065dba4339eb4da4ec8b4e6599728eb89b7caaceea199e26f7d824a41c"}, ] [package.dependencies] @@ -894,7 +939,7 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = ">=1.25.4,<1.27" [package.extras] -crt = ["awscrt (==0.16.9)"] +crt = ["awscrt (==0.16.26)"] [[package]] name = "brotli" @@ -1131,13 +1176,13 @@ numpy = ">=1.0" [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] @@ -1218,13 +1263,13 @@ pycparser = "*" [[package]] name = "chardet" -version = "5.1.0" +version = "5.2.0" description = "Universal encoding detector for Python 3" optional = true python-versions = ">=3.7" files = [ - {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"}, - {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"}, + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, ] [[package]] @@ -1313,44 +1358,46 @@ files = [ [[package]] name = "clarifai" -version = "9.1.0" +version = "9.7.1" description = "Clarifai Python Utilities" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "clarifai-9.1.0-py3-none-any.whl", hash = "sha256:a22b6c34d18067eb6902111bdbd9627dc2b72b743ac50b3f3178dc7663016003"}, - {file = "clarifai-9.1.0.tar.gz", hash = "sha256:f6e65fd81a810c4063f23a066ded68306423da1be0bbf61b32c5ef01214f607f"}, + {file = "clarifai-9.7.1-py3-none-any.whl", hash = "sha256:8e2e8f1b0af7d037ea037b8f2e80fbeb09da7f532d74b0e19002d544a6e75565"}, + {file = "clarifai-9.7.1.tar.gz", hash = "sha256:eca48161f4080b18b665a4cddc11a97c631b5ee0e1fceee018d7a7f225739686"}, ] [package.dependencies] -clarifai-grpc = ">=9.1.0" +clarifai-grpc = ">=9.7.1" +packaging = "*" +tritonclient = "2.34.0" [[package]] name = "clarifai-grpc" -version = "9.1.1" +version = "9.7.3" description = "Clarifai gRPC API Client" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "clarifai-grpc-9.1.1.tar.gz", hash = "sha256:d347b64f8d8dcf4dee1c51c5eced3c3f489e3be595ca4c8374323fdf934bae57"}, - {file = "clarifai_grpc-9.1.1-py3-none-any.whl", hash = "sha256:84a49e3d4fa57937ab38fb365c535a8ae255acac4666134d188f5dbe10e865ba"}, + {file = "clarifai-grpc-9.7.3.tar.gz", hash = "sha256:c52f699977ada941b573ecccfb831d397a990589bc261e7988e616be91740701"}, + {file = "clarifai_grpc-9.7.3-py3-none-any.whl", hash = "sha256:5020cac4fd128411a10a91457f74378763cdb5593571e77e0e6db9f5027e65aa"}, ] [package.dependencies] googleapis-common-protos = ">=1.53.0" grpcio = ">=1.44.0" -protobuf = ">=3.12" +protobuf = ">=3.20.3" requests = ">=2.25.1" [[package]] name = "click" -version = "8.1.3" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -1498,19 +1545,19 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency [[package]] name = "cohere" -version = "4.18.0" +version = "4.21" description = "" optional = true python-versions = ">=3.7,<4.0" files = [ - {file = "cohere-4.18.0-py3-none-any.whl", hash = "sha256:26b5be3f93c0046be7fd89b2e724190e10f9fceac8bcf8f22581368a1f3af2e4"}, - {file = "cohere-4.18.0.tar.gz", hash = "sha256:ed3d5703384412312fd827e669364b2f0eb3678a1206987cb3e1d98b88409c31"}, + {file = "cohere-4.21-py3-none-any.whl", hash = "sha256:5eb81db62e78b3156e734421cc3e657054f9d9f1d68b9f38cf48fe3a8ae40dbc"}, + {file = "cohere-4.21.tar.gz", hash = "sha256:f611438f409dfc5d5a0a153a585349f5a80b169c7102b5994d9999ecf8440866"}, ] [package.dependencies] aiohttp = ">=3.0,<4.0" backoff = ">=2.0,<3.0" -fastavro = "1.7.4" +fastavro = {version = "1.8.2", markers = "python_version >= \"3.8\""} importlib_metadata = ">=6.0,<7.0" requests = ">=2.25.0,<3.0.0" urllib3 = ">=1.26,<3" @@ -1538,17 +1585,17 @@ files = [ [[package]] name = "comm" -version = "0.1.3" +version = "0.1.4" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.6" files = [ - {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"}, - {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"}, + {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, + {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, ] [package.dependencies] -traitlets = ">=5.3" +traitlets = ">=4" [package.extras] lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] @@ -1557,71 +1604,63 @@ typing = ["mypy (>=0.990)"] [[package]] name = "coverage" -version = "7.2.7" +version = "7.3.0" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, - {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, - {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, - {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, - {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, - {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, - {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, - {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, - {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, - {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, - {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, - {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, - {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, - {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, - {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, - {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, - {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, - {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, - {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, - {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, - {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, - {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, - {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, - {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, - {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, - {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, - {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, - {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, - {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, - {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, - {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, - {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, - {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, + {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"}, + {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"}, + {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"}, + {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"}, + {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"}, + {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"}, + {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"}, + {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"}, + {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"}, + {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"}, + {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"}, + {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"}, + {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"}, + {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"}, + {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"}, + {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"}, + {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"}, + {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"}, + {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"}, + {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"}, + {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"}, + {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"}, + {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"}, + {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"}, + {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"}, + {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"}, + {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"}, + {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"}, + {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"}, + {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"}, + {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"}, + {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, ] [package.dependencies] @@ -1632,30 +1671,34 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "41.0.1" +version = "41.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699"}, - {file = "cryptography-41.0.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a"}, - {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca"}, - {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43"}, - {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b"}, - {file = "cryptography-41.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3"}, - {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db"}, - {file = "cryptography-41.0.1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31"}, - {file = "cryptography-41.0.1-cp37-abi3-win32.whl", hash = "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5"}, - {file = "cryptography-41.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c"}, - {file = "cryptography-41.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb"}, - {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3"}, - {file = "cryptography-41.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039"}, - {file = "cryptography-41.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc"}, - {file = "cryptography-41.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485"}, - {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c"}, - {file = "cryptography-41.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a"}, - {file = "cryptography-41.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5"}, - {file = "cryptography-41.0.1.tar.gz", hash = "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006"}, + {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, + {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, + {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, + {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, + {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, + {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, + {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, + {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, + {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, + {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, + {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, ] [package.dependencies] @@ -1684,13 +1727,13 @@ files = [ [[package]] name = "dataclasses-json" -version = "0.5.8" +version = "0.5.9" description = "Easily serialize dataclasses to and from JSON" optional = false python-versions = ">=3.6" files = [ - {file = "dataclasses-json-0.5.8.tar.gz", hash = "sha256:6572ac08ad9340abcb74fd8c4c8e9752db2a182a402c8e871d0a8aa119e3804e"}, - {file = "dataclasses_json-0.5.8-py3-none-any.whl", hash = "sha256:65b167c15fdf9bde27569c09ac18dd39bf1cc5b7998525024cb4678d2653946c"}, + {file = "dataclasses-json-0.5.9.tar.gz", hash = "sha256:e9ac87b73edc0141aafbce02b44e93553c3123ad574958f0fe52a534b6707e8e"}, + {file = "dataclasses_json-0.5.9-py3-none-any.whl", hash = "sha256:1280542631df1c375b7bc92e5b86d39e06c44760d7e3571a537b3b8acabf2f0c"}, ] [package.dependencies] @@ -1699,33 +1742,33 @@ marshmallow-enum = ">=1.5.1,<2.0.0" typing-inspect = ">=0.4.0" [package.extras] -dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest (>=7.2.0)", "simplejson", "types-dataclasses"] +dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest (>=7.2.0)", "setuptools", "simplejson", "twine", "types-dataclasses", "wheel"] [[package]] name = "debugpy" -version = "1.6.7" +version = "1.6.7.post1" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, + {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, + {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, ] [[package]] @@ -1741,12 +1784,12 @@ files = [ [[package]] name = "deeplake" -version = "3.6.11" +version = "3.6.19" description = "Activeloop Deep Lake" optional = true python-versions = "*" files = [ - {file = "deeplake-3.6.11.tar.gz", hash = "sha256:97e22aa56e0a48dc935597f46a6f968393a4f95e799fa1df8bc7997231a40892"}, + {file = "deeplake-3.6.19.tar.gz", hash = "sha256:6619af93caa338e906d1d9ea3964f312ec5cf2f1b45512b8a877eb741c9740a8"}, ] [package.dependencies] @@ -1763,12 +1806,12 @@ pyjwt = "*" tqdm = "*" [package.extras] -all = ["IPython", "av (>=8.1.0)", "azure-cli", "azure-identity", "azure-storage-blob", "flask", "google-api-python-client (>=2.31.0,<2.32.0)", "google-auth (>=2.0.1,<2.1.0)", "google-auth-oauthlib (>=0.4.5,<0.5.0)", "google-cloud-storage (>=1.42.0,<1.43.0)", "laspy", "libdeeplake (==0.0.60)", "nibabel", "oauth2client (>=4.1.3,<4.2.0)", "pydicom"] +all = ["IPython", "av (>=8.1.0)", "azure-cli", "azure-identity", "azure-storage-blob", "flask", "google-api-python-client (>=2.31.0,<2.32.0)", "google-auth (>=2.0.1,<2.1.0)", "google-auth-oauthlib (>=0.4.5,<0.5.0)", "google-cloud-storage (>=1.42.0,<1.43.0)", "laspy", "libdeeplake (==0.0.68)", "nibabel", "oauth2client (>=4.1.3,<4.2.0)", "pydicom"] audio = ["av (>=8.1.0)"] av = ["av (>=8.1.0)"] azure = ["azure-cli", "azure-identity", "azure-storage-blob"] dicom = ["nibabel", "pydicom"] -enterprise = ["libdeeplake (==0.0.60)", "pyjwt"] +enterprise = ["libdeeplake (==0.0.68)", "pyjwt"] gcp = ["google-auth (>=2.0.1,<2.1.0)", "google-auth-oauthlib (>=0.4.5,<0.5.0)", "google-cloud-storage (>=1.42.0,<1.43.0)"] gdrive = ["google-api-python-client (>=2.31.0,<2.32.0)", "google-auth (>=2.0.1,<2.1.0)", "google-auth-oauthlib (>=0.4.5,<0.5.0)", "oauth2client (>=4.1.3,<4.2.0)"] medical = ["nibabel", "pydicom"] @@ -1820,13 +1863,13 @@ packaging = "*" [[package]] name = "dill" -version = "0.3.6" -description = "serialize all of python" +version = "0.3.7" +description = "serialize all of Python" optional = true python-versions = ">=3.7" files = [ - {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, - {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, ] [package.extras] @@ -1834,19 +1877,18 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "dnspython" -version = "2.3.0" +version = "2.4.2" description = "DNS toolkit" optional = true -python-versions = ">=3.7,<4.0" +python-versions = ">=3.8,<4.0" files = [ - {file = "dnspython-2.3.0-py3-none-any.whl", hash = "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46"}, - {file = "dnspython-2.3.0.tar.gz", hash = "sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9"}, + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, ] [package.extras] -curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] -dnssec = ["cryptography (>=2.6,<40.0)"] -doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.11.0)"] +dnssec = ["cryptography (>=2.6,<42.0)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"] doq = ["aioquic (>=0.9.20)"] idna = ["idna (>=2.1,<4.0)"] trio = ["trio (>=0.14,<0.23)"] @@ -2000,13 +2042,13 @@ sqlalchemy = ">=1.3.22" [[package]] name = "duckduckgo-search" -version = "3.8.3" +version = "3.8.5" description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine." optional = true python-versions = ">=3.7" files = [ - {file = "duckduckgo_search-3.8.3-py3-none-any.whl", hash = "sha256:4ebed7fd26f8fd00dfd032015afe5c21c64373809b99c3ca28b2233f9509dd0b"}, - {file = "duckduckgo_search-3.8.3.tar.gz", hash = "sha256:8532d86f9c172d371639f22f1da8ba255d2f2b2a9fb77dc0285749347f37c882"}, + {file = "duckduckgo_search-3.8.5-py3-none-any.whl", hash = "sha256:9c85190c439f29e95d0cc9509a77d63dbcdbda49a4f9bdf8ff4b567f4a10a44d"}, + {file = "duckduckgo_search-3.8.5.tar.gz", hash = "sha256:584ea097fa0475cebc278ee464ccd54ba78019dec15a0243723923dc40bc3939"}, ] [package.dependencies] @@ -2035,13 +2077,13 @@ develop = ["aiohttp", "mock", "pytest", "pytest-asyncio", "pytest-cov", "pytest- [[package]] name = "elasticsearch" -version = "8.8.0" +version = "8.9.0" description = "Python client for Elasticsearch" optional = true python-versions = ">=3.6, <4" files = [ - {file = "elasticsearch-8.8.0-py3-none-any.whl", hash = "sha256:2223ee9daaa3c80c25b28ec3f7c48e66fce6b767a338333d9a81886046a07df6"}, - {file = "elasticsearch-8.8.0.tar.gz", hash = "sha256:6878313cd598c7c90079fed1d4be72e198da35cba57f4083e6bee91f9c70b0eb"}, + {file = "elasticsearch-8.9.0-py3-none-any.whl", hash = "sha256:0795cbf0f61482070741c09ba02ac8fdf18f5984912fbd08b248fadd8a8c9952"}, + {file = "elasticsearch-8.9.0.tar.gz", hash = "sha256:d3367fc013e04fc7aad349a6de9fad1ee04fb6d627b0e7896aa505c12fde5e04"}, ] [package.dependencies] @@ -2055,7 +2097,7 @@ requests = ["requests (>=2.4.0,<3.0.0)"] name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, @@ -2074,13 +2116,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] @@ -2136,42 +2178,36 @@ files = [ [[package]] name = "fastavro" -version = "1.7.4" +version = "1.8.2" description = "Fast read/write of AVRO files" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "fastavro-1.7.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7568e621b94e061974b2a96d70670d09910e0a71482dd8610b153c07bd768497"}, - {file = "fastavro-1.7.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4ec994faf64b743647f0027fcc56b01dc15d46c0e48fa15828277cb02dbdcd6"}, - {file = "fastavro-1.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:727fdc1ddd12fcc6addab0b6df12ef999a6babe4b753db891f78aa2ee33edc77"}, - {file = "fastavro-1.7.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2f0cb3f7795fcb0042e0bbbe51204c28338a455986d68409b26dcbde64dd69a"}, - {file = "fastavro-1.7.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bb0a8b5016a99be4b8ce3550889a1bd968c0fb3f521bcfbae24210c6342aee0c"}, - {file = "fastavro-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:1d2040b2bf3dc1a75170ea44d1e7e09f84fb77f40ef2e6c6b9f2eaf710557083"}, - {file = "fastavro-1.7.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5542423f46bb7fc9699c467cbf151c2713aa6976ef14f4f5ec3532d80d0bb616"}, - {file = "fastavro-1.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec396e6ab6b272708c8b9a0142df01fff4c7a1f168050f292ab92fdaee0b0257"}, - {file = "fastavro-1.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39b10d68c03371b79f461feca1c6c7e9d3f6aea2e9c7472b25cd749c57562aa1"}, - {file = "fastavro-1.7.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f94d5168ec72f3cfcf2181df1c46ad240dc1fcf361717447d2c5237121b9df55"}, - {file = "fastavro-1.7.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bad3dc279ed4ce747989259035cb3607f189ef7aff40339202f9321ca7f83d0b"}, - {file = "fastavro-1.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:8480ff444d9c7abd0bf121dd68656bd2115caca8ed28e71936eff348fde706e0"}, - {file = "fastavro-1.7.4-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:bd3d669f4ec6915c88bb80b7c14e01d2c3ceb93a61de5dcf33ff13972bba505e"}, - {file = "fastavro-1.7.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a312b128536b81bdb79f27076f513b998abe7d13ee6fe52e99bc01f7ad9b06a"}, - {file = "fastavro-1.7.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:487054d1419f1bfa41e7f19c718cbdbbb254319d3fd5b9ac411054d6432b9d40"}, - {file = "fastavro-1.7.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d2897fe7d1d5b27dcd33c43d68480de36e55a0e651d7731004a36162cd3eed9e"}, - {file = "fastavro-1.7.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6d318b49fd648a1fd93394411fe23761b486ac65dadea7c52dbeb0d0bef30221"}, - {file = "fastavro-1.7.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a117c3b122a8110c6ab99b3e66736790b4be19ceefb1edf0e732c33b3dc411c8"}, - {file = "fastavro-1.7.4-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:0cca15e1a1f829e40524004342e425acfb594cefbd3388b0a5d13542750623ac"}, - {file = "fastavro-1.7.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9211ec7a18a46a2aee01a2a979fd79f05f36b11fdb1bc469c9d9fd8cec32579"}, - {file = "fastavro-1.7.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f16bde6b5fb51e15233bfcee0378f48d4221201ba45e497a8063f6d216b7aad7"}, - {file = "fastavro-1.7.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aeca55c905ff4c667f2158564654a778918988811ae3eb28592767edcf5f5c4a"}, - {file = "fastavro-1.7.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b244f3abc024fc043d6637284ba2ffee5a1291c08a0f361ea1af4d829f66f303"}, - {file = "fastavro-1.7.4-cp38-cp38-win_amd64.whl", hash = "sha256:b64e394c87cb99d0681727e1ae5d3633906a72abeab5ea0c692394aeb5a56607"}, - {file = "fastavro-1.7.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:8c8115bdb1c862354d9abd0ea23eab85793bbff139087f2607bd4b83e8ae07ab"}, - {file = "fastavro-1.7.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b27dd08f2338a478185c6ba23308002f334642ce83a6aeaf8308271efef88062"}, - {file = "fastavro-1.7.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f087c246afab8bac08d86ef21be87cbf4f3779348fb960c081863fc3d570412c"}, - {file = "fastavro-1.7.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b4077e17a2bab37af96e5ca52e61b6f2b85e4577e7a2903f6814642eb6a834f7"}, - {file = "fastavro-1.7.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:776511cecf2ea9da4edd0de5015c1562cd9063683cf94f79bc9e20bab8f06923"}, - {file = "fastavro-1.7.4-cp39-cp39-win_amd64.whl", hash = "sha256:a7ea5565fe2c145e074ce9ba75fafd5479a86b34a8dbd00dd1835cf192290e14"}, - {file = "fastavro-1.7.4.tar.gz", hash = "sha256:6450f47ac4db95ec3a9e6434fec1f8a3c4c8c941de16205832ca8c67dd23d0d2"}, + {file = "fastavro-1.8.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:0e08964b2e9a455d831f2557402a683d4c4d45206f2ab9ade7c69d3dc14e0e58"}, + {file = "fastavro-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:401a70b1e5c7161420c6019e0c8afa88f7c8a373468591f5ec37639a903c2509"}, + {file = "fastavro-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef1ed3eaa4240c05698d02d8d0c010b9a03780eda37b492da6cd4c9d37e04ec"}, + {file = "fastavro-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:543185a672ff6306beb329b57a7b8a3a2dd1eb21a5ccc530150623d58d48bb98"}, + {file = "fastavro-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ffbf8bae1edb50fe7beeffc3afa8e684686550c2e5d31bf01c25cfa213f581e1"}, + {file = "fastavro-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:bb545eb9d876bc7b785e27e98e7720ada7eee7d7a1729798d2ed51517f13500a"}, + {file = "fastavro-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b837d3038c651046252bc92c1b9899bf21c7927a148a1ff89599c36c2a331ca"}, + {file = "fastavro-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3510e96c0a47e4e914bd1a29c954eb662bfa24849ad92e597cb97cc79f21af7"}, + {file = "fastavro-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccc0e74f2c2ab357f39bb73d67fcdb6dc10e23fdbbd399326139f72ec0fb99a3"}, + {file = "fastavro-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:add51c70d0ab1175601c75cd687bbe9d16ae312cd8899b907aafe0d79ee2bc1d"}, + {file = "fastavro-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d9e2662f57e6453e9a2c9fb4f54b2a9e62e3e46f5a412ac00558112336d23883"}, + {file = "fastavro-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:fea75cf53a93c56dd56e68abce8d314ef877b27451c870cd7ede7582d34c08a7"}, + {file = "fastavro-1.8.2-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:f489020bb8664c2737c03457ad5dbd490579ddab6f0a7b5c17fecfe982715a89"}, + {file = "fastavro-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a547625c138efd5e61300119241041906ee8cb426fc7aa789900f87af7ed330d"}, + {file = "fastavro-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53beb458f30c9ad4aa7bff4a42243ff990ffb713b6ce0cd9b360cbc3d648fe52"}, + {file = "fastavro-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7b1b2cbd2dd851452306beed0ab9bdaeeab1cc8ad46f84b47cd81eeaff6dd6b8"}, + {file = "fastavro-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d29e9baee0b2f37ecd09bde3b487cf900431fd548c85be3e4fe1b9a0b2a917f1"}, + {file = "fastavro-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:66e132c710663230292bc63e2cb79cf95b16ccb94a5fc99bb63694b24e312fc5"}, + {file = "fastavro-1.8.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38aca63ce604039bcdf2edd14912d00287bdbf8b76f9aa42b28e6ca0bf950092"}, + {file = "fastavro-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9787835f6449ee94713e7993a700432fce3763024791ffa8a58dc91ef9d1f950"}, + {file = "fastavro-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536cb448bc83811056be02749fd9df37a69621678f02597d272970a769e9b40c"}, + {file = "fastavro-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e9d5027cf7d9968f8f819958b41bfedb933323ea6d6a0485eefacaa1afd91f54"}, + {file = "fastavro-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:792adfc0c80c7f1109e0ab4b0decef20691fdf0a45091d397a0563872eb56d42"}, + {file = "fastavro-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:650b22766259f7dd7519dfa4e4658f0e233c319efa130b9cf0c36a500e09cc57"}, + {file = "fastavro-1.8.2.tar.gz", hash = "sha256:ab9d9226d4b66b6b3d0661a57cd45259b0868fed1c0cd4fac95249b9e0973320"}, ] [package.extras] @@ -2182,13 +2218,13 @@ zstandard = ["zstandard"] [[package]] name = "fastjsonschema" -version = "2.17.1" +version = "2.18.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, ] [package.extras] @@ -2320,85 +2356,72 @@ python-dateutil = ">=2.7" [[package]] name = "frozenlist" -version = "1.3.3" +version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"}, - {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"}, - {file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420"}, - {file = "frozenlist-1.3.3-cp310-cp310-win32.whl", hash = "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642"}, - {file = "frozenlist-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81"}, - {file = "frozenlist-1.3.3-cp311-cp311-win32.whl", hash = "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8"}, - {file = "frozenlist-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32"}, - {file = "frozenlist-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401"}, - {file = "frozenlist-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a"}, - {file = "frozenlist-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3"}, - {file = "frozenlist-1.3.3-cp38-cp38-win32.whl", hash = "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b"}, - {file = "frozenlist-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1"}, - {file = "frozenlist-1.3.3-cp39-cp39-win32.whl", hash = "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38"}, - {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, - {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, + {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, + {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, + {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, + {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, + {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, + {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, + {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, + {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, + {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, ] [[package]] @@ -2571,13 +2594,13 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.20.0" +version = "2.22.0" description = "Google Authentication Library" optional = true python-versions = ">=3.6" files = [ - {file = "google-auth-2.20.0.tar.gz", hash = "sha256:030af34138909ccde0fbce611afc178f1d65d32fbff281f25738b1fe1c6f3eaa"}, - {file = "google_auth-2.20.0-py2.py3-none-any.whl", hash = "sha256:23b7b0950fcda519bfb6692bf0d5289d2ea49fc143717cc7188458ec620e63fa"}, + {file = "google-auth-2.22.0.tar.gz", hash = "sha256:164cba9af4e6e4e40c3a4f90a1a6c12ee56f14c0b4868d1ca91b32826ab334ce"}, + {file = "google_auth-2.22.0-py2.py3-none-any.whl", hash = "sha256:d61d1b40897407b574da67da1a833bdc10d5a11642566e506565d1b1a46ba873"}, ] [package.dependencies] @@ -2612,17 +2635,17 @@ six = "*" [[package]] name = "google-auth-oauthlib" -version = "0.4.6" +version = "1.0.0" description = "Google Authentication Library" optional = true python-versions = ">=3.6" files = [ - {file = "google-auth-oauthlib-0.4.6.tar.gz", hash = "sha256:a90a072f6993f2c327067bf65270046384cda5a8ecb20b94ea9a687f1f233a7a"}, - {file = "google_auth_oauthlib-0.4.6-py2.py3-none-any.whl", hash = "sha256:3f2a6e802eebbb6fb736a370fbf3b055edcb6b52878bf2f26330b5e041316c73"}, + {file = "google-auth-oauthlib-1.0.0.tar.gz", hash = "sha256:e375064964820b47221a7e1b7ee1fd77051b6323c3f9e3e19785f78ab67ecfc5"}, + {file = "google_auth_oauthlib-1.0.0-py2.py3-none-any.whl", hash = "sha256:95880ca704928c300f48194d1770cf5b1462835b6e49db61445a520f793fd5fb"}, ] [package.dependencies] -google-auth = ">=1.0.0" +google-auth = ">=2.15.0" requests-oauthlib = ">=0.7.0" [package.extras] @@ -2658,13 +2681,13 @@ requests = "*" [[package]] name = "googleapis-common-protos" -version = "1.59.1" +version = "1.60.0" description = "Common protobufs used in Google APIs" optional = true python-versions = ">=3.7" files = [ - {file = "googleapis-common-protos-1.59.1.tar.gz", hash = "sha256:b35d530fe825fb4227857bc47ad84c33c809ac96f312e13182bdeaa2abe1178a"}, - {file = "googleapis_common_protos-1.59.1-py2.py3-none-any.whl", hash = "sha256:0cbedb6fb68f1c07e18eb4c48256320777707e7d0c55063ae56c15db3224a61e"}, + {file = "googleapis-common-protos-1.60.0.tar.gz", hash = "sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708"}, + {file = "googleapis_common_protos-1.60.0-py2.py3-none-any.whl", hash = "sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918"}, ] [package.dependencies] @@ -2675,13 +2698,13 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "gptcache" -version = "0.1.32" +version = "0.1.39.1" description = "GPTCache, a powerful caching library that can be used to speed up and lower the cost of chat applications that rely on the LLM service. GPTCache works as a memcache for AIGC applications, similar to how Redis works for traditional applications." optional = true python-versions = ">=3.8.1" files = [ - {file = "gptcache-0.1.32-py3-none-any.whl", hash = "sha256:e85eb40ac54ebd8c0db1d67ba962b505d87321f287446083cfd80c4f205d2d10"}, - {file = "gptcache-0.1.32.tar.gz", hash = "sha256:0181f61429b153ad5a887beed2a373b31ffe9efbb01b7956b5a6ab32330b16b1"}, + {file = "gptcache-0.1.39.1-py3-none-any.whl", hash = "sha256:81355f7878e12a820dccb017f8a45ea44b73178dac07108c56db664a476a4a07"}, + {file = "gptcache-0.1.39.1.tar.gz", hash = "sha256:a9c629fdeaa94b78a6cfe707a5f9a3a52b361655a3f01327709ca00c78a500eb"}, ] [package.dependencies] @@ -2801,122 +2824,118 @@ test = ["objgraph", "psutil"] [[package]] name = "grpcio" -version = "1.47.5" +version = "1.57.0" description = "HTTP/2-based RPC framework" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "grpcio-1.47.5-cp310-cp310-linux_armv7l.whl", hash = "sha256:acc73289d0c44650aa1f21eccfa967f5623b01c3b5e2b4596fe5f9c5bf10956d"}, - {file = "grpcio-1.47.5-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f3174c798959998876d546944523a558f78a9b9feb22a2cbaaa3822f2e158653"}, - {file = "grpcio-1.47.5-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:64401ee6d54b4d5869bcba4be3cae9f2e335c44a39ba1e29991ad22cfe2abacb"}, - {file = "grpcio-1.47.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39a07eb5e7ec9277e5d124fb0e2d4f51ddbaadc2abdd27e8bbf1716dcf45e581"}, - {file = "grpcio-1.47.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:874b138ca95a6375ae6f6a12c10a348827c9aa8fbd05d025b87b5e050ab55b46"}, - {file = "grpcio-1.47.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90539369afba42fc921cdda9d5f697a421f05a2e82ba58342ffbe88aa586019e"}, - {file = "grpcio-1.47.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b18f970514bbc76547928e26d0cec06996ce3f947a3634b3adbe79d0e48e980"}, - {file = "grpcio-1.47.5-cp310-cp310-win32.whl", hash = "sha256:44c52923be0c4a0f662de43644679c6356960c38c4edf44864c23b998693c7cc"}, - {file = "grpcio-1.47.5-cp310-cp310-win_amd64.whl", hash = "sha256:07761f427551fced386db8c78701d6a167b2a682aa8df808303dd0a0d44bf6c9"}, - {file = "grpcio-1.47.5-cp36-cp36m-linux_armv7l.whl", hash = "sha256:10eb026bf75568de06933366f0340d2b4b207425c74a5640aa1812b8b69e7d9d"}, - {file = "grpcio-1.47.5-cp36-cp36m-macosx_10_10_universal2.whl", hash = "sha256:4f8e7fba6b1150a63aebd04d03be779de4ea4c4a8b28869e7a3c8f0b3ec59edc"}, - {file = "grpcio-1.47.5-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:36d93b19c214bc654fc50ae65cce84b8f7698159191b9d3f21f9ad92ae7bc325"}, - {file = "grpcio-1.47.5-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e59f916bf58528e55893743151c6bd9f0a393fddfe411a6fffd29a300e6acf2"}, - {file = "grpcio-1.47.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18f8b2d316a3be464eb2a20afa7026a235a07a0094be879876611206d8026679"}, - {file = "grpcio-1.47.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:0c3076957cd2aea34fe69384453315fd765948eb6cb73a12f332277308d04b76"}, - {file = "grpcio-1.47.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:007f5ad07d2f3a4a422c1df589a0d25e918b96d8f6069cb6f0254386a5f09262"}, - {file = "grpcio-1.47.5-cp36-cp36m-win32.whl", hash = "sha256:01ac149a5ca9512277b1d2fe85687099f3e442c6f9f924eae003a6700735e23e"}, - {file = "grpcio-1.47.5-cp36-cp36m-win_amd64.whl", hash = "sha256:a32ccc88950f2be619157201161e70a5e5ed9e2427662bb2e60f1a8cea7d0db6"}, - {file = "grpcio-1.47.5-cp37-cp37m-linux_armv7l.whl", hash = "sha256:ec71f15258e086acadb13ec06e4e4c54eb0f5455cd4c618997f847874d5ff9ea"}, - {file = "grpcio-1.47.5-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:4bbf5a63497dbd5e44c4335cab153796a4274be17ca40ec971a7749c3f4fef6a"}, - {file = "grpcio-1.47.5-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:11e1bc97e88232201256b718c63a8a1fd86ec6fca3a501293be5c5e423de9d56"}, - {file = "grpcio-1.47.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e568d84fed80713d2fa3221552beee27ed8034f7eff52bb7871bf5ffe4d4ca78"}, - {file = "grpcio-1.47.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4c838de8e1e7194d3f9a679fd76cc44a1dbe81f18bd39ee233c72347d772bf"}, - {file = "grpcio-1.47.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a74c19baf2f8127b44b3f58e2a5801a17992dae9a20197b4a8fa26e2ea79742b"}, - {file = "grpcio-1.47.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e369ed5ecff11ef85666cabbb5736495604e052c8dc2c03a2104f99dfd0a59e3"}, - {file = "grpcio-1.47.5-cp37-cp37m-win32.whl", hash = "sha256:ccb741fab5117aea981d4ac341d2ce1e588f515f83091807d4e2bb388ed59edd"}, - {file = "grpcio-1.47.5-cp37-cp37m-win_amd64.whl", hash = "sha256:af9d3b075dfcbc343d44b0e98725ba6d56dc0669e61905a4e71e8f4409cfefbd"}, - {file = "grpcio-1.47.5-cp38-cp38-linux_armv7l.whl", hash = "sha256:cac6847a4b9a7e7a1f270a71fef1c17c2e8a6b411c0ca48080ce1e08d284aded"}, - {file = "grpcio-1.47.5-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:54a3e17d155b6fb141e1fbb7c47d30556bec4c940b66ff4d9513536e2e214d4a"}, - {file = "grpcio-1.47.5-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:d1873c0b84a0ffb129f75e7c8be45d2cae427baf0b090d15b9ff46c1841c3f53"}, - {file = "grpcio-1.47.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e209df91cf8dfb335c2e26784702b0e12c20dc4de7b9b6d2cccd968146155f06"}, - {file = "grpcio-1.47.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:350e2627684f93f8b59af9c76a03eeb4aa145ecc589569137d4518486f4f1727"}, - {file = "grpcio-1.47.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:23754807314c5aa4c26eb1c50aaf506801a2f7825951100280d2c013b127436f"}, - {file = "grpcio-1.47.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:503c3fa0045f3ef80aa1ad082eac6a888081da2e1cd793f281ed499831e4c498"}, - {file = "grpcio-1.47.5-cp38-cp38-win32.whl", hash = "sha256:a4eecfbe994c88996461bd1459e43ea460952d4147f53e8c18e089764e6808f5"}, - {file = "grpcio-1.47.5-cp38-cp38-win_amd64.whl", hash = "sha256:941927ae4d589a2fef5c22b9c47df9e5e613c737bd750bafc3a9547cc506017c"}, - {file = "grpcio-1.47.5-cp39-cp39-linux_armv7l.whl", hash = "sha256:9891c77e69bd4109c25c1bea51d78fbc5ba2fcd9445bf99225bb8fb03d849913"}, - {file = "grpcio-1.47.5-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:61e83778d85dbbbd7446451ec28b7261e9ebba489cc8c262dfe8fedc119f769b"}, - {file = "grpcio-1.47.5-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:21ccfc0e989531cbdc93c54a7581ea5f7c46bf585016d9320b4be042f1e02374"}, - {file = "grpcio-1.47.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bea35a0114a39827ffe59f73950d242f95d59a9ac2009ae8da7b065c06f0a57f"}, - {file = "grpcio-1.47.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e75b9e52eeb9d1335aaeecf581cb3cea7fc4bafd7bd675c83f208a386a42a8"}, - {file = "grpcio-1.47.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1fb86f95228827b55e860278d142326af4489c0f4220975780daff325fc87172"}, - {file = "grpcio-1.47.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9b83183525afe58dd9e7bb249f9e55df326e3c3834d09ea476c7a6bb12f73ee"}, - {file = "grpcio-1.47.5-cp39-cp39-win32.whl", hash = "sha256:00bff7492875ab04ec5ed3d92550d8f8aa423151e187b79684c8a22c7a6f1670"}, - {file = "grpcio-1.47.5-cp39-cp39-win_amd64.whl", hash = "sha256:2b32adae820cc0347e5e44efe91b661b436dbca73f25c5763cadb1cafd1dca10"}, - {file = "grpcio-1.47.5.tar.gz", hash = "sha256:b62b8bea0c94b4603bb4c8332d8a814375120bea3c2dbeb71397213bde5ea832"}, + {file = "grpcio-1.57.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:092fa155b945015754bdf988be47793c377b52b88d546e45c6a9f9579ac7f7b6"}, + {file = "grpcio-1.57.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2f7349786da979a94690cc5c2b804cab4e8774a3cf59be40d037c4342c906649"}, + {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:82640e57fb86ea1d71ea9ab54f7e942502cf98a429a200b2e743d8672171734f"}, + {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40b72effd4c789de94ce1be2b5f88d7b9b5f7379fe9645f198854112a6567d9a"}, + {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f708a6a17868ad8bf586598bee69abded4996b18adf26fd2d91191383b79019"}, + {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:60fe15288a0a65d5c1cb5b4a62b1850d07336e3ba728257a810317be14f0c527"}, + {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6907b1cf8bb29b058081d2aad677b15757a44ef2d4d8d9130271d2ad5e33efca"}, + {file = "grpcio-1.57.0-cp310-cp310-win32.whl", hash = "sha256:57b183e8b252825c4dd29114d6c13559be95387aafc10a7be645462a0fc98bbb"}, + {file = "grpcio-1.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7b400807fa749a9eb286e2cd893e501b110b4d356a218426cb9c825a0474ca56"}, + {file = "grpcio-1.57.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:c6ebecfb7a31385393203eb04ed8b6a08f5002f53df3d59e5e795edb80999652"}, + {file = "grpcio-1.57.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:00258cbe3f5188629828363ae8ff78477ce976a6f63fb2bb5e90088396faa82e"}, + {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:23e7d8849a0e58b806253fd206ac105b328171e01b8f18c7d5922274958cc87e"}, + {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5371bcd861e679d63b8274f73ac281751d34bd54eccdbfcd6aa00e692a82cd7b"}, + {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aed90d93b731929e742967e236f842a4a2174dc5db077c8f9ad2c5996f89f63e"}, + {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe752639919aad9ffb0dee0d87f29a6467d1ef764f13c4644d212a9a853a078d"}, + {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fada6b07ec4f0befe05218181f4b85176f11d531911b64c715d1875c4736d73a"}, + {file = "grpcio-1.57.0-cp311-cp311-win32.whl", hash = "sha256:bb396952cfa7ad2f01061fbc7dc1ad91dd9d69243bcb8110cf4e36924785a0fe"}, + {file = "grpcio-1.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:e503cb45ed12b924b5b988ba9576dc9949b2f5283b8e33b21dcb6be74a7c58d0"}, + {file = "grpcio-1.57.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:fd173b4cf02b20f60860dc2ffe30115c18972d7d6d2d69df97ac38dee03be5bf"}, + {file = "grpcio-1.57.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:d7f8df114d6b4cf5a916b98389aeaf1e3132035420a88beea4e3d977e5f267a5"}, + {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:76c44efa4ede1f42a9d5b2fed1fe9377e73a109bef8675fb0728eb80b0b8e8f2"}, + {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4faea2cfdf762a664ab90589b66f416274887641ae17817de510b8178356bf73"}, + {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c60b83c43faeb6d0a9831f0351d7787a0753f5087cc6fa218d78fdf38e5acef0"}, + {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b363bbb5253e5f9c23d8a0a034dfdf1b7c9e7f12e602fc788c435171e96daccc"}, + {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f1fb0fd4a1e9b11ac21c30c169d169ef434c6e9344ee0ab27cfa6f605f6387b2"}, + {file = "grpcio-1.57.0-cp37-cp37m-win_amd64.whl", hash = "sha256:34950353539e7d93f61c6796a007c705d663f3be41166358e3d88c45760c7d98"}, + {file = "grpcio-1.57.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:871f9999e0211f9551f368612460442a5436d9444606184652117d6a688c9f51"}, + {file = "grpcio-1.57.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:a8a8e560e8dbbdf29288872e91efd22af71e88b0e5736b0daf7773c1fecd99f0"}, + {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2313b124e475aa9017a9844bdc5eafb2d5abdda9d456af16fc4535408c7d6da6"}, + {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4098b6b638d9e0ca839a81656a2fd4bc26c9486ea707e8b1437d6f9d61c3941"}, + {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e5b58e32ae14658085c16986d11e99abd002ddbf51c8daae8a0671fffb3467f"}, + {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0f80bf37f09e1caba6a8063e56e2b87fa335add314cf2b78ebf7cb45aa7e3d06"}, + {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5b7a4ce8f862fe32b2a10b57752cf3169f5fe2915acfe7e6a1e155db3da99e79"}, + {file = "grpcio-1.57.0-cp38-cp38-win32.whl", hash = "sha256:9338bacf172e942e62e5889b6364e56657fbf8ac68062e8b25c48843e7b202bb"}, + {file = "grpcio-1.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:e1cb52fa2d67d7f7fab310b600f22ce1ff04d562d46e9e0ac3e3403c2bb4cc16"}, + {file = "grpcio-1.57.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fee387d2fab144e8a34e0e9c5ca0f45c9376b99de45628265cfa9886b1dbe62b"}, + {file = "grpcio-1.57.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b53333627283e7241fcc217323f225c37783b5f0472316edcaa4479a213abfa6"}, + {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f19ac6ac0a256cf77d3cc926ef0b4e64a9725cc612f97228cd5dc4bd9dbab03b"}, + {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fdf04e402f12e1de8074458549337febb3b45f21076cc02ef4ff786aff687e"}, + {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5613a2fecc82f95d6c51d15b9a72705553aa0d7c932fad7aed7afb51dc982ee5"}, + {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b670c2faa92124b7397b42303e4d8eb64a4cd0b7a77e35a9e865a55d61c57ef9"}, + {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a635589201b18510ff988161b7b573f50c6a48fae9cb567657920ca82022b37"}, + {file = "grpcio-1.57.0-cp39-cp39-win32.whl", hash = "sha256:d78d8b86fcdfa1e4c21f8896614b6cc7ee01a2a758ec0c4382d662f2a62cf766"}, + {file = "grpcio-1.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:20ec6fc4ad47d1b6e12deec5045ec3cd5402d9a1597f738263e98f490fe07056"}, + {file = "grpcio-1.57.0.tar.gz", hash = "sha256:4b089f7ad1eb00a104078bab8015b0ed0ebcb3b589e527ab009c53893fd4e613"}, ] -[package.dependencies] -six = ">=1.5.2" - [package.extras] -protobuf = ["grpcio-tools (>=1.47.5)"] +protobuf = ["grpcio-tools (>=1.57.0)"] [[package]] name = "grpcio-tools" -version = "1.47.5" +version = "1.48.2" description = "Protobuf code generator for gRPC" optional = true python-versions = ">=3.6" files = [ - {file = "grpcio-tools-1.47.5.tar.gz", hash = "sha256:62ced60566a4cbcf35c57e887e2e68b4f108b3474ef3ec0022d38cd579345f92"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-linux_armv7l.whl", hash = "sha256:9f92c561b245a562110bd84d3b64b016c8af5afde39febf1f71553ae56f6e8e4"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:a0a991844a024705ad177cb858d36e3e6b329ea4a78b7f4c597b2817fc2692e7"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:935976d5436d4306de052d1e00848fa25abc667e185aaaffcd367915f33a67c7"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2481dba6a30d415a4756cd88cc380780e3f00bb41d56b8f6547bc3c09c6f4e7f"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62176978faa96b21e4e821e7070b0feed919726ff730c0b3b7e8d106ddb45bf"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:728eb1f4ef6d380366a2de9940d1f910ece8bf4e44de5ca935cd16d4394e82ff"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d58982c747e107f65c7307ec1646cce105b0785088287bf209f545377aeedaf4"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-win32.whl", hash = "sha256:ea6d8f07b087bc2d579b7727daee2abf38fe5dc475c9e7c4f16b4a2c31895319"}, - {file = "grpcio_tools-1.47.5-cp310-cp310-win_amd64.whl", hash = "sha256:5e7a4e68072639fa767bde1011f5d83f4461a8e60651ea202af597777ee1ffd7"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-linux_armv7l.whl", hash = "sha256:bb1e066fc50ef7503b024924858658692d3e98582a9727b156f2f845da70e11e"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-macosx_10_10_universal2.whl", hash = "sha256:7d3e397a27e652ae6579f1f7dc3fc0c771db977ccaaded1fe113e882df425c15"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:b19d8f1e8422826d49fc428acc66b69aa450c70f7090681df32d535188edf524"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0e017bd1022bc981fa1629e757e0d3d4a1991f999fb90ec714c2683fe05b8fa"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb56ea33c4a33ee3b707f62339fd579e1a8dbbfeb7665d7ff85ee837cf64794"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:02882ff2f703b75d343991608b39104f1621508cf407e427a75c1794ed0fac95"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:84395aacae4f8a3358ad648a8bacf6b15bbb8946d8cf73f47dc77cfe1a154d48"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-win32.whl", hash = "sha256:de8901c64a1091cc474318e7a013af8c30feba34c7954c29ca8f477baf07db28"}, - {file = "grpcio_tools-1.47.5-cp36-cp36m-win_amd64.whl", hash = "sha256:37cb5c3d94ba1efef0d17a66e5e69b177fc934389eda8b76b161a6623e45e714"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-linux_armv7l.whl", hash = "sha256:5c2d3a35e9341ea9c68afe289054bd8604eda4214e6d916f97b19a316537a296"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:89733edb89ec28e52dd9cc25e90b78248b6edd265f564726be2a9c4b4ee78479"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:489f41535d779287759942c6cced93c4219ea53dad46ebdc4faca6220e1dba88"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:072c84f561912400363b81af6bf5424c38fab80f0c9436c0fe19b2e7c2bcf15c"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c650233420279f943bd1dcf286742aaeb4db7cc5f6554a5e8c16c2e4fa19a28f"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dab220aba6b5777b16df5c5b3a30f831cdbc4f493eabdaf9f6585691bad5496a"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:309ca8508f361895ef2d4f533611272228d2412c8cae754b695673c7c65a2f8b"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-win32.whl", hash = "sha256:f8ce5fb65e97866257943cbf6d504195ab55e01ef467988d86322a36041b6de8"}, - {file = "grpcio_tools-1.47.5-cp37-cp37m-win_amd64.whl", hash = "sha256:b9154a18b0ad2bc4b9ceadedd7b67bb65b500b3427495b4d224a1a835aa55ce6"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-linux_armv7l.whl", hash = "sha256:aaa4063bc05a18f32ae98e414e2472477468b966b9a1425c41eec160250beff2"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:093da28f8ce3a0eedd5370b9f09f815fb6c01fd663d60734eab5b300b9a305ec"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:0771f57585b9070086dec509b02fa2804a9d4c395e95cd7a6cb42d8f4b5683f7"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68d4cdc674c8596da8e25cf37741aab3f07bdf38731510a92019e5ec57f5fcea"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08fdce5549acca9fd7a45084c62e8ab0a1ca1c530bcbfa089625e9523f224023"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8431b9ee083bec444ca6d48705b89774f97ba0a75e8c33ef3b9a2dc6ed2aa584"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf37376da0062155d728fb9a1d522ea8f5039ebf774885d269f7772cbc3a2e6"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-win32.whl", hash = "sha256:b65a59698f938fa59fd756799cd641c3755fb09cb95de008e4d67a9e5b1af6d5"}, - {file = "grpcio_tools-1.47.5-cp38-cp38-win_amd64.whl", hash = "sha256:17c2b5ce8b3100c8da4ae5070d8d2c2466f174e66d8127fb85ef8a7937a03853"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-linux_armv7l.whl", hash = "sha256:9070301f079fef76fb0d51b84f393c6738587f3a16a2f0ced303362b0cc0ecf6"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:5bcf01116a4d3bed2faf832f8c5618d1c69473576f3925240e3c5042dfbc115e"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:b555b954aa213eac8efe7df507a178c3ab7323df9f501846a1bbccdf81354831"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7604e08530b3edc688e41aa8af46051478d417b08afdf6fc2eafb5eb90528a26"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d3f80818a560abee8189c4f0b074f45c16309b4596e013cb6ce105a022c5965"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c801ebd7fa2304ff85aa15147f134aefe33132d85308c43e46f6a5be78b5a8a8"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:235adfc22e9c703533573344de1d2394ddd92b27c82eb259bb5fb46f885159b8"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-win32.whl", hash = "sha256:d659c257cbb48c843931b584d3c3da5473fa17275e0d04af79c9e9fdd6077179"}, - {file = "grpcio_tools-1.47.5-cp39-cp39-win_amd64.whl", hash = "sha256:9d121c63ff2fddeae2c65f6675eb944f47808a242b647d80b4661b2c5e1e6732"}, + {file = "grpcio-tools-1.48.2.tar.gz", hash = "sha256:8902a035708555cddbd61b5467cea127484362decc52de03f061a1a520fe90cd"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:92acc3e10ba2b0dcb90a88ae9fe1cc0ffba6868545207e4ff20ca95284f8e3c9"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e5bb396d63495667d4df42e506eed9d74fc9a51c99c173c04395fe7604c848f1"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:84a84d601a238572d049d3108e04fe4c206536e81076d56e623bd525a1b38def"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70564521e86a0de35ea9ac6daecff10cb46860aec469af65869974807ce8e98b"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdbbe63f6190187de5946891941629912ac8196701ed2253fa91624a397822ec"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae56f133b05b7e5d780ef7e032dd762adad7f3dc8f64adb43ff5bfabd659f435"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0feb4f2b777fa6377e977faa89c26359d4f31953de15e035505b92f41aa6906"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-win32.whl", hash = "sha256:80f450272316ca0924545f488c8492649ca3aeb7044d4bf59c426dcdee527f7c"}, + {file = "grpcio_tools-1.48.2-cp310-cp310-win_amd64.whl", hash = "sha256:21ff50e321736eba22210bf9b94e05391a9ac345f26e7df16333dc75d63e74fb"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-linux_armv7l.whl", hash = "sha256:d598ccde6338b2cfbb3124f34c95f03394209013f9b1ed4a5360a736853b1c27"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:a43d26714933f23de93ea0bf9c86c66a6ede709b8ca32e357f9e2181703e64ae"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:55fdebc73fb580717656b1bafa4f8eca448726a7aa22726a6c0a7895d2f0f088"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8588819b22d0de3aa1951e1991cc3e4b9aa105eecf6e3e24eb0a2fc8ab958b3e"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9771d4d317dca029dfaca7ec9282d8afe731c18bc536ece37fd39b8a974cc331"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d886a9e052a038642b3af5d18e6f2085d1656d9788e202dc23258cf3a751e7ca"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d77e8b1613876e0d8fd17709509d4ceba13492816426bd156f7e88a4c47e7158"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-win32.whl", hash = "sha256:dcaaecdd5e847de5c1d533ea91522bf56c9e6b2dc98cdc0d45f0a1c26e846ea2"}, + {file = "grpcio_tools-1.48.2-cp36-cp36m-win_amd64.whl", hash = "sha256:0119aabd9ceedfdf41b56b9fdc8284dd85a7f589d087f2694d743f346a368556"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:189be2a9b672300ca6845d94016bdacc052fdbe9d1ae9e85344425efae2ff8ef"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:9443f5c30bac449237c3cf99da125f8d6e6c01e17972bc683ee73b75dea95573"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:e0403e095b343431195db1305248b50019ad55d3dd310254431af87e14ef83a2"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5410d6b601d1404835e34466bd8aee37213489b36ee1aad2276366e265ff29d4"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51be91b7c7056ff9ee48b1eccd4a2840b0126230803a5e09dfc082a5b16a91c1"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:516eedd5eb7af6326050bc2cfceb3a977b9cc1144f283c43cc4956905285c912"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d18599ab572b2f15a8f3db49503272d1bb4fcabb4b4d1214ef03aca1816b20a0"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-win32.whl", hash = "sha256:d18ef2adc05a8ef9e58ac46357f6d4ce7e43e077c7eda0a4425773461f9d0e6e"}, + {file = "grpcio_tools-1.48.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d9753944e5a6b6b78b76ce9d2ae0fe3f748008c1849deb7fadcb64489d6553b"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:3c8749dca04a8d302862ceeb1dfbdd071ee13b281395975f24405a347e5baa57"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:7307dd2408b82ea545ae63502ec03036b025f449568556ea9a056e06129a7a4e"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:072234859f6069dc43a6be8ad6b7d682f4ba1dc2e2db2ebf5c75f62eee0f6dfb"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cc298fbfe584de8876a85355efbcf796dfbcfac5948c9560f5df82e79336e2a"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f75973a42c710999acd419968bc79f00327e03e855bbe82c6529e003e49af660"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f766050e491d0b3203b6b85638015f543816a2eb7d089fc04e86e00f6de0e31d"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8e0d74403484eb77e8df2566a64b8b0b484b5c87903678c381634dd72f252d5e"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-win32.whl", hash = "sha256:cb75bac0cd43858cb759ef103fe68f8c540cb58b63dda127e710228fec3007b8"}, + {file = "grpcio_tools-1.48.2-cp38-cp38-win_amd64.whl", hash = "sha256:cabc8b0905cedbc3b2b7b2856334fa35cce3d4bc79ae241cacd8cca8940a5c85"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:e712a6d00606ad19abdeae852a7e521d6f6d0dcea843708fecf3a38be16a851e"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:e7e7668f89fd598c5469bb58e16bfd12b511d9947ccc75aec94da31f62bc3758"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:a415fbec67d4ff7efe88794cbe00cf548d0f0a5484cceffe0a0c89d47694c491"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d96e96ae7361aa51c9cd9c73b677b51f691f98df6086860fcc3c45852d96b0b0"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e20d7885a40e68a2bda92908acbabcdf3c14dd386c3845de73ba139e9df1f132"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8a5614251c46da07549e24f417cf989710250385e9d80deeafc53a0ee7df6325"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ace0035766fe01a1b096aa050be9f0a9f98402317e7aeff8bfe55349be32a407"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-win32.whl", hash = "sha256:4fa4300b1be59b046492ed3c5fdb59760bc6433f44c08f50de900f9552ec7461"}, + {file = "grpcio_tools-1.48.2-cp39-cp39-win_amd64.whl", hash = "sha256:0fb6c1c1e56eb26b224adc028a4204b6ad0f8b292efa28067dff273bbc8b27c4"}, ] [package.dependencies] -grpcio = ">=1.47.5" +grpcio = ">=1.48.2" protobuf = ">=3.12.0,<4.0dev" setuptools = "*" @@ -2948,40 +2967,36 @@ hyperframe = ">=6.0,<7" [[package]] name = "h5py" -version = "3.8.0" +version = "3.9.0" description = "Read and write HDF5 files from Python" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "h5py-3.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:533d7dad466ddb7e3b30af274b630eb7c1a6e4ddf01d1c373a0334dc2152110a"}, - {file = "h5py-3.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c873ba9fd4fa875ad62ce0e4891725e257a8fe7f5abdbc17e51a5d54819be55c"}, - {file = "h5py-3.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98a240cd4c1bfd568aaa52ec42d263131a2582dab82d74d3d42a0d954cac12be"}, - {file = "h5py-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3389b63222b1c7a158bb7fe69d11ca00066740ec5574596d47a2fe5317f563a"}, - {file = "h5py-3.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:7f3350fc0a8407d668b13247861c2acd23f7f5fe7d060a3ad9b0820f5fcbcae0"}, - {file = "h5py-3.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db03e3f2c716205fbdabb34d0848459840585225eb97b4f08998c743821ca323"}, - {file = "h5py-3.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36761693efbe53df179627a775476dcbc37727d6e920958277a7efbc18f1fb73"}, - {file = "h5py-3.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a506fc223def428f4329e7e1f9fe1c8c593eab226e7c0942c8d75308ad49950"}, - {file = "h5py-3.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33b15aae79e9147aebe1d0e54099cbcde8d65e3e227cd5b59e49b1272aa0e09d"}, - {file = "h5py-3.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f6f6ffadd6bfa9b2c5b334805eb4b19ca0a5620433659d8f7fb86692c40a359"}, - {file = "h5py-3.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8f55d9c6c84d7d09c79fb85979e97b81ec6071cc776a97eb6b96f8f6ec767323"}, - {file = "h5py-3.8.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b685453e538b2b5934c58a644ac3f3b3d0cec1a01b6fb26d57388e9f9b674ad0"}, - {file = "h5py-3.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:377865821fe80ad984d003723d6f8890bd54ceeb5981b43c0313b9df95411b30"}, - {file = "h5py-3.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:0fef76e10b9216657fa37e7edff6d8be0709b25bd5066474c229b56cf0098df9"}, - {file = "h5py-3.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:26ffc344ec9984d2cd3ca0265007299a8bac8d85c1ad48f4639d8d3aed2af171"}, - {file = "h5py-3.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bacaa1c16810dd2b3e4417f8e730971b7c4d53d234de61fe4a918db78e80e1e4"}, - {file = "h5py-3.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae730580ae928de409d63cbe4fdca4c82c3ad2bed30511d19d34e995d63c77e"}, - {file = "h5py-3.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f47f757d1b76f0ecb8aa0508ec8d1b390df67a8b67ee2515dc1b046f3a1596ea"}, - {file = "h5py-3.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f891b17e3a3e974e93f9e34e7cca9f530806543571ce078998676a555837d91d"}, - {file = "h5py-3.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:290e00fa2de74a10688d1bac98d5a9cdd43f14f58e562c580b5b3dfbd358ecae"}, - {file = "h5py-3.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:03890b1c123d024fb0239a3279737d5432498c1901c354f8b10d8221d1d16235"}, - {file = "h5py-3.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7865de06779b14d98068da387333ad9bf2756b5b579cc887fac169bc08f87c3"}, - {file = "h5py-3.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49bc857635f935fa30e92e61ac1e87496df8f260a6945a3235e43a9890426866"}, - {file = "h5py-3.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:5fd2252d1fc364ba0e93dd0b7089f4906b66805cb4e6aca7fa8874ac08649647"}, - {file = "h5py-3.8.0.tar.gz", hash = "sha256:6fead82f0c4000cf38d53f9c030780d81bfa0220218aee13b90b7701c937d95f"}, + {file = "h5py-3.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb7bdd5e601dd1739698af383be03f3dad0465fe67184ebd5afca770f50df9d6"}, + {file = "h5py-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:78e44686334cbbf2dd21d9df15823bc38663f27a3061f6a032c68a3e30c47bf7"}, + {file = "h5py-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f68b41efd110ce9af1cbe6fa8af9f4dcbadace6db972d30828b911949e28fadd"}, + {file = "h5py-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12aa556d540f11a2cae53ea7cfb94017353bd271fb3962e1296b342f6550d1b8"}, + {file = "h5py-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:d97409e17915798029e297a84124705c8080da901307ea58f29234e09b073ddc"}, + {file = "h5py-3.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:551e358db05a874a0f827b22e95b30092f2303edc4b91bb62ad2f10e0236e1a0"}, + {file = "h5py-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6822a814b9d8b8363ff102f76ea8d026f0ca25850bb579d85376029ee3e73b93"}, + {file = "h5py-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f01202cdea754ab4227dd27014bdbd561a4bbe4b631424fd812f7c2ce9c6ac"}, + {file = "h5py-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64acceaf6aff92af091a4b83f6dee3cf8d3061f924a6bb3a33eb6c4658a8348b"}, + {file = "h5py-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:804c7fb42a34c8ab3a3001901c977a5c24d2e9c586a0f3e7c0a389130b4276fc"}, + {file = "h5py-3.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8d9492391ff5c3c80ec30ae2fe82a3f0efd1e750833739c25b0d090e3be1b095"}, + {file = "h5py-3.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9da9e7e63376c32704e37ad4cea2dceae6964cee0d8515185b3ab9cbd6b947bc"}, + {file = "h5py-3.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4e20897c88759cbcbd38fb45b507adc91af3e0f67722aa302d71f02dd44d286"}, + {file = "h5py-3.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbf5225543ca35ce9f61c950b73899a82be7ba60d58340e76d0bd42bf659235a"}, + {file = "h5py-3.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:36408f8c62f50007d14e000f9f3acf77e103b9e932c114cbe52a3089e50ebf94"}, + {file = "h5py-3.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:23e74b878bbe1653ab34ca49b83cac85529cd0b36b9d625516c5830cc5ca2eac"}, + {file = "h5py-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f457089c5d524b7998e3649bc63240679b8fb0a3859ea53bbb06841f3d755f1"}, + {file = "h5py-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6284061f3214335e1eec883a6ee497dbe7a79f19e6a57fed2dd1f03acd5a8cb"}, + {file = "h5py-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7a745efd0d56076999b52e8da5fad5d30823bac98b59c68ae75588d09991a"}, + {file = "h5py-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:79bbca34696c6f9eeeb36a91776070c49a060b2879828e2c8fa6c58b8ed10dd1"}, + {file = "h5py-3.9.0.tar.gz", hash = "sha256:e604db6521c1e367c6bd7fad239c847f53cc46646f2d2651372d05ae5e95f817"}, ] [package.dependencies] -numpy = ">=1.14.5" +numpy = ">=1.17.3" [[package]] name = "hnswlib" @@ -3020,13 +3035,13 @@ files = [ [[package]] name = "httpcore" -version = "0.17.2" +version = "0.17.3" description = "A minimal low-level HTTP client." optional = true python-versions = ">=3.7" files = [ - {file = "httpcore-0.17.2-py3-none-any.whl", hash = "sha256:5581b9c12379c4288fe70f43c710d16060c10080617001e6b22a3b6dbcbefd36"}, - {file = "httpcore-0.17.2.tar.gz", hash = "sha256:125f8375ab60036db632f34f4b627a9ad085048eef7cb7d2616fea0f739f98af"}, + {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"}, + {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"}, ] [package.dependencies] @@ -3082,13 +3097,13 @@ socks = ["socksio (==1.*)"] [[package]] name = "huggingface-hub" -version = "0.15.1" +version = "0.16.4" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = true python-versions = ">=3.7.0" files = [ - {file = "huggingface_hub-0.15.1-py3-none-any.whl", hash = "sha256:05b0fb0abbf1f625dfee864648ac3049fe225ac4371c7bafaca0c2d3a2f83445"}, - {file = "huggingface_hub-0.15.1.tar.gz", hash = "sha256:a61b7d1a7769fe10119e730277c72ab99d95c48d86a3d6da3e9f3d0f632a4081"}, + {file = "huggingface_hub-0.16.4-py3-none-any.whl", hash = "sha256:0d3df29932f334fead024afc7cb4cc5149d955238b8b5e42dcf9740d6995a349"}, + {file = "huggingface_hub-0.16.4.tar.gz", hash = "sha256:608c7d4f3d368b326d1747f91523dbd1f692871e8e2e7a4750314a2dd8b63e14"}, ] [package.dependencies] @@ -3101,25 +3116,26 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +inference = ["aiohttp", "pydantic"] quality = ["black (>=23.1,<24.0)", "mypy (==0.982)", "ruff (>=0.0.241)"] tensorflow = ["graphviz", "pydot", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "gradio", "jedi", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] torch = ["torch"] -typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] +typing = ["pydantic", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] [[package]] name = "humbug" -version = "0.3.1" +version = "0.3.2" description = "Humbug: Do you build developer tools? Humbug helps you know your users." optional = true python-versions = "*" files = [ - {file = "humbug-0.3.1-py3-none-any.whl", hash = "sha256:f9e3c8dd60a8ba943194f7ed45caa66e5db43d99f3745c60030ec40e6313a927"}, - {file = "humbug-0.3.1.tar.gz", hash = "sha256:a123ee31551f5465ca7c1ee3da0862a4e0a0e5c8a7b762a863d833da624db215"}, + {file = "humbug-0.3.2-py3-none-any.whl", hash = "sha256:0d302c82019842f4267ed05b54a26b155ab8dc441ac129e2a62c9c4892d53c71"}, + {file = "humbug-0.3.2.tar.gz", hash = "sha256:0fca3cdb6db2348e13d7835b1a743ff545e38344fc55ad4e2a083634b12a0a6e"}, ] [package.dependencies] @@ -3154,13 +3170,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.0.1" +version = "6.8.0" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.0.1-py3-none-any.whl", hash = "sha256:1543daade821c89b1c4a55986c326f36e54f2e6ca3bad96be4563d0acb74dcd4"}, - {file = "importlib_metadata-6.0.1.tar.gz", hash = "sha256:950127d57e35a806d520817d3e92eec3f19fdae9f0cd99da77a407c5aabefba3"}, + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, ] [package.dependencies] @@ -3169,25 +3185,25 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" -version = "5.12.0" +version = "6.0.1" description = "Read resources from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, + {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, + {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [[package]] name = "iniconfig" @@ -3202,13 +3218,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.23.2" +version = "6.25.1" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.23.2-py3-none-any.whl", hash = "sha256:7ccb6e2d32fd958c21453db494c914f3474908a2fdefd99ab548a5375b548d1f"}, - {file = "ipykernel-6.23.2.tar.gz", hash = "sha256:fcfb67c5b504aa1bfcda1c5b3716636239e0f7b9290958f1c558c79b4c0e7ed5"}, + {file = "ipykernel-6.25.1-py3-none-any.whl", hash = "sha256:c8a2430b357073b37c76c21c52184db42f6b4b0e438e1eb7df3c4440d120497c"}, + {file = "ipykernel-6.25.1.tar.gz", hash = "sha256:050391364c0977e768e354bdb60cbbfbee7cbb943b1af1618382021136ffd42f"}, ] [package.dependencies] @@ -3285,17 +3301,17 @@ files = [ [[package]] name = "ipywidgets" -version = "8.0.6" +version = "8.1.0" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" files = [ - {file = "ipywidgets-8.0.6-py3-none-any.whl", hash = "sha256:a60bf8d2528997e05ac83fd19ea2fbe65f2e79fbe1b2b35779bdfc46c2941dcc"}, - {file = "ipywidgets-8.0.6.tar.gz", hash = "sha256:de7d779f2045d60de9f6c25f653fdae2dba57898e6a1284494b3ba20b6893bb8"}, + {file = "ipywidgets-8.1.0-py3-none-any.whl", hash = "sha256:6c8396cc7b8c95dfb4e9ab0054f48c002f045e7e5d7ae523f559d64e525a98ab"}, + {file = "ipywidgets-8.1.0.tar.gz", hash = "sha256:ce97dd90525b3066fd00094690964e7eac14cf9b7745d35565b5eeac20cce687"}, ] [package.dependencies] -ipykernel = ">=4.5.1" +comm = ">=0.1.3" ipython = ">=6.1.0" jupyterlab-widgets = ">=3.0.7,<3.1.0" traitlets = ">=4.3.1" @@ -3349,21 +3365,21 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -3406,13 +3422,13 @@ files = [ [[package]] name = "joblib" -version = "1.2.0" +version = "1.3.2" description = "Lightweight pipelining with Python functions" optional = true python-versions = ">=3.7" files = [ - {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, - {file = "joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"}, + {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, + {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, ] [[package]] @@ -3479,6 +3495,20 @@ files = [ {file = "jq-1.4.1.tar.gz", hash = "sha256:52284ee3cb51670e6f537b0ec813654c064c1c0705bd910097ea0fe17313516d"}, ] +[[package]] +name = "json5" +version = "0.9.14" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = "*" +files = [ + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, +] + +[package.extras] +dev = ["hypothesis"] + [[package]] name = "jsonable" version = "0.3.1" @@ -3512,31 +3542,32 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, - {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" -version = "4.17.3" +version = "4.19.0" description = "An implementation of JSON Schema validation for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, + {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, + {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, ] [package.dependencies] -attrs = ">=17.4.0" +attrs = ">=22.2.0" fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +jsonschema-specifications = ">=2023.03.6" pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} @@ -3544,6 +3575,21 @@ webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-n format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +referencing = ">=0.28.0" + [[package]] name = "jupyter" version = "1.0.0" @@ -3566,27 +3612,26 @@ qtconsole = "*" [[package]] name = "jupyter-client" -version = "7.4.9" +version = "8.3.0" description = "Jupyter protocol implementation and client libraries" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyter_client-7.4.9-py3-none-any.whl", hash = "sha256:214668aaea208195f4c13d28eb272ba79f945fc0cf3f11c7092c20b2ca1980e7"}, - {file = "jupyter_client-7.4.9.tar.gz", hash = "sha256:52be28e04171f07aed8f20e1616a5a552ab9fee9cbbe6c1896ae170c3880d392"}, + {file = "jupyter_client-8.3.0-py3-none-any.whl", hash = "sha256:7441af0c0672edc5d28035e92ba5e32fadcfa8a4e608a434c228836a89df6158"}, + {file = "jupyter_client-8.3.0.tar.gz", hash = "sha256:3af69921fe99617be1670399a0b857ad67275eefcfa291e2c81a160b7b650f5f"}, ] [package.dependencies] -entrypoints = "*" -jupyter-core = ">=4.9.2" -nest-asyncio = ">=1.5.4" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" -traitlets = "*" +traitlets = ">=5.3" [package.extras] -doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-console" @@ -3634,19 +3679,20 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.6.3" +version = "0.7.0" description = "Jupyter Event System library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, - {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, + {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"}, + {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"}, ] [package.dependencies] -jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} python-json-logger = ">=2.0.4" pyyaml = ">=5.3" +referencing = "*" rfc3339-validator = "*" rfc3986-validator = ">=0.1.1" traitlets = ">=5.3" @@ -3654,17 +3700,32 @@ traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.0" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.0.tar.gz", hash = "sha256:8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1"}, + {file = "jupyter_lsp-2.2.0-py3-none-any.whl", hash = "sha256:9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.6.0" +version = "2.7.2" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.6.0-py3-none-any.whl", hash = "sha256:19525a1515b5999618a91b3e99ec9f6869aa8c5ba73e0b6279fcda918b54ba36"}, - {file = "jupyter_server-2.6.0.tar.gz", hash = "sha256:ae4af349f030ed08dd78cb7ac1a03a92d886000380c9ea6283f3c542a81f4b06"}, + {file = "jupyter_server-2.7.2-py3-none-any.whl", hash = "sha256:98a375347b580e837e7016007c24680a4261ed8ad7cd35196ac087d229f48e5a"}, + {file = "jupyter_server-2.7.2.tar.gz", hash = "sha256:d64fb4e593907290e5df916e3c9399c15ab2cd7bdb71cbcd1d36452dbfb30523"}, ] [package.dependencies] @@ -3682,7 +3743,7 @@ packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} pyzmq = ">=24" -send2trash = "*" +send2trash = ">=1.8.2" terminado = ">=0.8.3" tornado = ">=6.2.0" traitlets = ">=5.6.0" @@ -3690,7 +3751,7 @@ websocket-client = "*" [package.extras] docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] [[package]] name = "jupyter-server-terminals" @@ -3711,6 +3772,39 @@ terminado = ">=0.8.3" docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] +[[package]] +name = "jupyterlab" +version = "4.0.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.0.5-py3-none-any.whl", hash = "sha256:13b3a326e7b95d72746fe20dbe80ee1e71165d6905e01ceaf1320eb809cb1b47"}, + {file = "jupyterlab-4.0.5.tar.gz", hash = "sha256:de49deb75f9b9aec478ed04754cbefe9c5d22fd796a5783cdc65e212983d3611"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +importlib-resources = {version = ">=1.4", markers = "python_version < \"3.9\""} +ipykernel = "*" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.19.0,<3" +notebook-shim = ">=0.2" +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["black[jupyter] (==23.3.0)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.0.271)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] + [[package]] name = "jupyterlab-pygments" version = "0.2.2" @@ -3722,77 +3816,108 @@ files = [ {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, ] +[[package]] +name = "jupyterlab-server" +version = "2.24.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.17.3" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.28" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + [[package]] name = "jupyterlab-widgets" -version = "3.0.7" +version = "3.0.8" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_widgets-3.0.7-py3-none-any.whl", hash = "sha256:c73f8370338ec19f1bec47254752d6505b03601cbd5a67e6a0b184532f73a459"}, - {file = "jupyterlab_widgets-3.0.7.tar.gz", hash = "sha256:c3a50ed5bf528a0c7a869096503af54702f86dda1db469aee1c92dc0c01b43ca"}, + {file = "jupyterlab_widgets-3.0.8-py3-none-any.whl", hash = "sha256:4715912d6ceab839c9db35953c764b3214ebbc9161c809f6e0510168845dfdf5"}, + {file = "jupyterlab_widgets-3.0.8.tar.gz", hash = "sha256:d428ab97b8d87cc7c54cbf37644d6e0f0e662f23876e05fa460a73ec3257252a"}, ] [[package]] name = "keras" -version = "2.11.0" +version = "2.13.1" description = "Deep learning for humans." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "keras-2.11.0-py2.py3-none-any.whl", hash = "sha256:38c6fff0ea9a8b06a2717736565c92a73c8cd9b1c239e7125ccb188b7848f65e"}, + {file = "keras-2.13.1-py3-none-any.whl", hash = "sha256:5ce5f706f779fa7330e63632f327b75ce38144a120376b2ae1917c00fa6136af"}, + {file = "keras-2.13.1.tar.gz", hash = "sha256:5df12cc241a015a11b65ddb452c0eeb2744fce21d9b54ba48db87492568ccc68"}, ] [[package]] name = "lancedb" -version = "0.1.8" +version = "0.1.16" description = "lancedb" optional = true python-versions = ">=3.8" files = [ - {file = "lancedb-0.1.8-py3-none-any.whl", hash = "sha256:09e0ae7d989b4ababeaefa2d50b784dd036e231e90fceee543d01ed24bd601de"}, - {file = "lancedb-0.1.8.tar.gz", hash = "sha256:65a3e93829f39db57ad66ab474d380c9e36e696e68b60bed37434ac1ed1fe215"}, + {file = "lancedb-0.1.16-py3-none-any.whl", hash = "sha256:ed5ff765c127fd8c8b193b448a127ae9de4afd458874e6d981edeafa09cf6a4a"}, + {file = "lancedb-0.1.16.tar.gz", hash = "sha256:c22621635ca1b74f24983b8247886f93d23d7477fdbe5c67449a0939c19ef7bd"}, ] [package.dependencies] -pylance = ">=0.4.20" +aiohttp = "*" +attr = "*" +pydantic = "*" +pylance = "0.5.10" ratelimiter = "*" retry = "*" +semver = "*" tqdm = "*" [package.extras] dev = ["black", "pre-commit", "ruff"] docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocstrings[python]"] -tests = ["doctest", "pytest", "pytest-mock"] +tests = ["pandas (>=1.4)", "pytest", "pytest-asyncio", "pytest-mock"] [[package]] name = "langkit" -version = "0.0.6" +version = "0.0.15" description = "A collection of text metric udfs for whylogs profiling and monitoring in WhyLabs" optional = true python-versions = ">=3.8,<4.0" files = [ - {file = "langkit-0.0.6-py3-none-any.whl", hash = "sha256:5b36830e9094934c933f8756177b5a8a5c7d6dc014ca49076a358c9c8fb5ddbc"}, - {file = "langkit-0.0.6.tar.gz", hash = "sha256:08421bb0799fc831b0d1e431e600cad8acab7d7bdbf6aa6c7535291172a66343"}, + {file = "langkit-0.0.15-py3-none-any.whl", hash = "sha256:7cf2422215264621e7df49b102fca7a6e3d8806081bbecad6fbe9ddfc8c487c6"}, + {file = "langkit-0.0.15.tar.gz", hash = "sha256:999d3c352461886efb67917dc08810c0e6f87d5985565aa0ecb49d56ddd2eb5c"}, ] [package.dependencies] pandas = "*" textstat = ">=0.7.3,<0.8.0" -whylogs = ">=1.2.3,<2.0.0" +whylogs = "1.2.6" [package.extras] -all = ["datasets (>=2.12.0,<3.0.0)", "nltk (>=3.8.1,<4.0.0)", "openai (>=0.27.6,<0.28.0)", "sentence-transformers (>=2.2.2,<3.0.0)", "torch"] +all = ["datasets (>=2.12.0,<3.0.0)", "evaluate (>=0.4.0,<0.5.0)", "nltk (>=3.8.1,<4.0.0)", "openai (>=0.27.6,<0.28.0)", "sentence-transformers (>=2.2.2,<3.0.0)", "torch"] [[package]] name = "langsmith" -version = "0.0.22" +version = "0.0.25" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langsmith-0.0.22-py3-none-any.whl", hash = "sha256:1bc94a2e5bfa355ca15d9e658c2c2d04c8cc45c61892a1be08a7c3b40f2fd3f4"}, - {file = "langsmith-0.0.22.tar.gz", hash = "sha256:5726c7841294db2a9e5863e20718878d16e28722bdaf3169a278ff3bda2f0be7"}, + {file = "langsmith-0.0.25-py3-none-any.whl", hash = "sha256:d595435ad21fa6077550d7c85472935d1e8241afa042c1e29287d2c95c3ed151"}, + {file = "langsmith-0.0.25.tar.gz", hash = "sha256:e728c398fc1adaa0ed8abeb21f6a92d7fb19fe3ab49d3911c22b03dfe25935d6"}, ] [package.dependencies] @@ -3801,17 +3926,18 @@ requests = ">=2,<3" [[package]] name = "lark" -version = "1.1.5" +version = "1.1.7" description = "a modern parsing library" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "lark-1.1.5-py3-none-any.whl", hash = "sha256:8476f9903e93fbde4f6c327f74d79e9b4bd0ed9294c5dfa3164ab8c581b5de2a"}, - {file = "lark-1.1.5.tar.gz", hash = "sha256:4b534eae1f9af5b4ea000bea95776350befe1981658eea3820a01c37e504bb4d"}, + {file = "lark-1.1.7-py3-none-any.whl", hash = "sha256:9e5dc5bbf93fa1840083707285262514a0ef8a6613874af7ea1cec60468d6e92"}, + {file = "lark-1.1.7.tar.gz", hash = "sha256:be7437bf1f37ab08b355f29ff2571d77d777113d0a8c4352b0c513dced6c5a1e"}, ] [package.extras] atomic-cache = ["atomicwrites"] +interegular = ["interegular (>=0.3.1,<0.4.0)"] nearley = ["js2py"] regex = ["regex"] @@ -3832,19 +3958,22 @@ test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] [[package]] name = "libclang" -version = "16.0.0" +version = "16.0.6" description = "Clang Python Bindings, mirrored from the official LLVM repo: https://github.com/llvm/llvm-project/tree/main/clang/bindings/python, to make the installation process easier." optional = true python-versions = "*" files = [ - {file = "libclang-16.0.0-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:65258a6bb3e7dc31dc9b26f8d42f53c9d3b959643ade291fcd1aef4855303ca6"}, - {file = "libclang-16.0.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:af55a4aa86fdfe6b2ec68bc8cfe5fdac6c448d591ca7648be86ca17099b41ca8"}, - {file = "libclang-16.0.0-py2.py3-none-manylinux2010_x86_64.whl", hash = "sha256:a043138caaf2cb076ebb060c6281ec95612926645d425c691991fc9df00e8a24"}, - {file = "libclang-16.0.0-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:eb59652cb0559c0e71784ff4c8ba24c14644becc907b1446563ecfaa622d523b"}, - {file = "libclang-16.0.0-py2.py3-none-manylinux2014_armv7l.whl", hash = "sha256:7b6686b67a0daa84b4c614bcc119578329fc4fbb52b919565b7376b507c4793b"}, - {file = "libclang-16.0.0-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2adce42ae652f312245b8f4eda6f30b4076fb61f7619f2dfd0a0c31dee4c32b9"}, - {file = "libclang-16.0.0-py2.py3-none-win_amd64.whl", hash = "sha256:ee20bf93e3dd330f71fc50cdbf13b92ced0aec8e540be64251db53502a9b33f7"}, - {file = "libclang-16.0.0-py2.py3-none-win_arm64.whl", hash = "sha256:bf4628fc4da7a1dd06a244f9b8e121c5ec68076a763c59d6b13cbb103acc935b"}, + {file = "libclang-16.0.6-1-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:88bc7e7b393c32e41e03ba77ef02fdd647da1f764c2cd028e69e0837080b79f6"}, + {file = "libclang-16.0.6-1-py2.py3-none-manylinux2014_armv7l.whl", hash = "sha256:d80ed5827736ed5ec2bcedf536720476fd9d4fa4c79ef0cb24aea4c59332f361"}, + {file = "libclang-16.0.6-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:da9e47ebc3f0a6d90fb169ef25f9fbcd29b4a4ef97a8b0e3e3a17800af1423f4"}, + {file = "libclang-16.0.6-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:e1a5ad1e895e5443e205568c85c04b4608e4e973dae42f4dfd9cb46c81d1486b"}, + {file = "libclang-16.0.6-py2.py3-none-manylinux2010_x86_64.whl", hash = "sha256:9dcdc730939788b8b69ffd6d5d75fe5366e3ee007f1e36a99799ec0b0c001492"}, + {file = "libclang-16.0.6-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:8130482120500476a027171f8f3c8dfc2536b591716eea71fc5da22cae13131b"}, + {file = "libclang-16.0.6-py2.py3-none-manylinux2014_armv7l.whl", hash = "sha256:1e940048f51d0b0999099a9b78629ab8a64b62af5e9ff1b2b062439c21ee244d"}, + {file = "libclang-16.0.6-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f04e3060ae1f207f234d0608900c99c50edcb743e5e18276d78da2ddd727d39f"}, + {file = "libclang-16.0.6-py2.py3-none-win_amd64.whl", hash = "sha256:daab4a11dae228f1efa9efa3fe638b493b14d8d52c71fb3c7019e2f1df4514c2"}, + {file = "libclang-16.0.6-py2.py3-none-win_arm64.whl", hash = "sha256:4a9acbfd9c135a72f80d5dbff7588dfb0c81458244a89b9e83526e8595880e0a"}, + {file = "libclang-16.0.6.tar.gz", hash = "sha256:4acdde39dfe410c877b4ccc0d4b57eb952100e4ee26bbdf6cfdb88e2033a7d31"}, ] [[package]] @@ -3881,13 +4010,13 @@ numpy = "*" [[package]] name = "librosa" -version = "0.10.0.post2" +version = "0.10.1" description = "Python module for audio and music processing" optional = true python-versions = ">=3.7" files = [ - {file = "librosa-0.10.0.post2-py3-none-any.whl", hash = "sha256:0f3b56118cb01ea89df4b04e924c7f48c5c13d42cc55a12540eb04ae87ab5848"}, - {file = "librosa-0.10.0.post2.tar.gz", hash = "sha256:6623673da30773beaae962cb4685f188155582f25bc60fc52da968f59eea8567"}, + {file = "librosa-0.10.1-py3-none-any.whl", hash = "sha256:7ab91d9f5fcb75ea14848a05d3b1f825cf8d0c42ca160d19ae6874f2de2d8223"}, + {file = "librosa-0.10.1.tar.gz", hash = "sha256:832f7d150d6dd08ed2aa08c0567a4be58330635c32ddd2208de9bc91300802c7"}, ] [package.dependencies] @@ -3898,7 +4027,7 @@ lazy-loader = ">=0.1" msgpack = ">=1.0" numba = ">=0.51.0" numpy = ">=1.20.3,<1.22.0 || >1.22.0,<1.22.1 || >1.22.1,<1.22.2 || >1.22.2" -pooch = ">=1.0,<1.7" +pooch = ">=1.0" scikit-learn = ">=0.20.0" scipy = ">=1.2.0" soundfile = ">=0.12.1" @@ -3907,7 +4036,7 @@ typing-extensions = ">=4.1.1" [package.extras] display = ["matplotlib (>=3.3.0)"] -docs = ["ipython (>=7.0)", "matplotlib (>=3.3.0)", "mir-eval (>=0.5)", "numba (>=0.51)", "numpydoc", "presets", "sphinx (!=1.3.1,<6)", "sphinx-gallery (>=0.7)", "sphinx-multiversion (>=0.2.3)", "sphinx-rtd-theme (==1.*)", "sphinxcontrib-svg2pdfconverter"] +docs = ["ipython (>=7.0)", "matplotlib (>=3.3.0)", "mir-eval (>=0.5)", "numba (>=0.51)", "numpydoc", "presets", "sphinx (!=1.3.1)", "sphinx-gallery (>=0.7)", "sphinx-multiversion (>=0.2.3)", "sphinx-rtd-theme (>=1.2.0)", "sphinxcontrib-svg2pdfconverter"] tests = ["matplotlib (>=3.3.0)", "packaging (>=20.0)", "pytest", "pytest-cov", "pytest-mpl", "resampy (>=0.2.2)", "samplerate", "types-decorator"] [[package]] @@ -3963,95 +4092,110 @@ dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegu [[package]] name = "lxml" -version = "4.9.2" +version = "4.9.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ - {file = "lxml-4.9.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2"}, - {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892"}, - {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a"}, - {file = "lxml-4.9.2-cp27-cp27m-win32.whl", hash = "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de"}, - {file = "lxml-4.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3"}, - {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50"}, - {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975"}, - {file = "lxml-4.9.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4"}, - {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7"}, - {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184"}, - {file = "lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"}, - {file = "lxml-4.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380"}, - {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92"}, - {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"}, - {file = "lxml-4.9.2-cp311-cp311-win32.whl", hash = "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33"}, - {file = "lxml-4.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd"}, - {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0"}, - {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e"}, - {file = "lxml-4.9.2-cp35-cp35m-win32.whl", hash = "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df"}, - {file = "lxml-4.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5"}, - {file = "lxml-4.9.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e"}, - {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74"}, - {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38"}, - {file = "lxml-4.9.2-cp36-cp36m-win32.whl", hash = "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5"}, - {file = "lxml-4.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3"}, - {file = "lxml-4.9.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45"}, - {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e"}, - {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b"}, - {file = "lxml-4.9.2-cp37-cp37m-win32.whl", hash = "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe"}, - {file = "lxml-4.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9"}, - {file = "lxml-4.9.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c"}, - {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f"}, - {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457"}, - {file = "lxml-4.9.2-cp38-cp38-win32.whl", hash = "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b"}, - {file = "lxml-4.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7"}, - {file = "lxml-4.9.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5"}, - {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5"}, - {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2"}, - {file = "lxml-4.9.2-cp39-cp39-win32.whl", hash = "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1"}, - {file = "lxml-4.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f"}, - {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c"}, - {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409"}, - {file = "lxml-4.9.2.tar.gz", hash = "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67"}, + {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, + {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, + {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, + {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, + {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, + {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, + {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, + {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, + {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, + {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, + {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, + {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, + {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, + {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, + {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, + {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, + {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, + {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, + {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, + {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, + {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, + {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, + {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, + {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, + {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.7)"] +source = ["Cython (>=0.29.35)"] [[package]] name = "lz4" @@ -4127,27 +4271,28 @@ dev = ["autopep8 (>=1.6.0)", "black (>=22.3.0)", "docformatter (>=1.4)", "flake8 [[package]] name = "markdown" -version = "3.4.3" +version = "3.4.4" description = "Python implementation of John Gruber's Markdown." optional = true python-versions = ">=3.7" files = [ - {file = "Markdown-3.4.3-py3-none-any.whl", hash = "sha256:065fd4df22da73a625f14890dd77eb8040edcbd68794bcd35943be14490608b2"}, - {file = "Markdown-3.4.3.tar.gz", hash = "sha256:8bf101198e004dc93e84a12a7395e31aac6a9c9942848ae1d99b9d72cf9b3520"}, + {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, + {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, ] [package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] testing = ["coverage", "pyyaml"] [[package]] name = "markdown-it-py" -version = "2.2.0" +version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] [package.dependencies] @@ -4160,9 +4305,24 @@ compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0 linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] +[[package]] +name = "markdownify" +version = "0.11.6" +description = "Convert HTML to markdown." +optional = true +python-versions = "*" +files = [ + {file = "markdownify-0.11.6-py3-none-any.whl", hash = "sha256:ba35fe289d5e9073bcd7d2cad629278fe25f1a93741fcdc0bfb4f009076d8324"}, + {file = "markdownify-0.11.6.tar.gz", hash = "sha256:009b240e0c9f4c8eaf1d085625dcd4011e12f0f8cec55dedf9ea6f7655e49bfe"}, +] + +[package.dependencies] +beautifulsoup4 = ">=4.9,<5" +six = ">=1.15,<2" + [[package]] name = "markupsafe" version = "2.1.3" @@ -4242,22 +4402,22 @@ urllib3 = "*" [[package]] name = "marshmallow" -version = "3.19.0" +version = "3.20.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "marshmallow-3.19.0-py3-none-any.whl", hash = "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b"}, - {file = "marshmallow-3.19.0.tar.gz", hash = "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78"}, + {file = "marshmallow-3.20.1-py3-none-any.whl", hash = "sha256:684939db93e80ad3561392f47be0230743131560a41c5110684c16e21ade0a5c"}, + {file = "marshmallow-3.20.1.tar.gz", hash = "sha256:5d2371bbe42000f2b3fb5eaa065224df7d8f8597bc19a1bbfa5bfe7fba8da889"}, ] [package.dependencies] packaging = ">=17.0" [package.extras] -dev = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)", "pytest", "pytz", "simplejson", "tox"] -docs = ["alabaster (==0.7.12)", "autodocsumm (==0.2.9)", "sphinx (==5.3.0)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] -lint = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)"] +dev = ["flake8 (==6.0.0)", "flake8-bugbear (==23.7.10)", "mypy (==1.4.1)", "pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"] +docs = ["alabaster (==0.7.13)", "autodocsumm (==0.2.11)", "sphinx (==7.0.1)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] +lint = ["flake8 (==6.0.0)", "flake8-bugbear (==23.7.10)", "mypy (==1.4.1)", "pre-commit (>=2.4,<4.0)"] tests = ["pytest", "pytz", "simplejson"] [[package]] @@ -4301,13 +4461,13 @@ files = [ [[package]] name = "mistune" -version = "2.0.5" -description = "A sane Markdown parser with useful plugins and renderers" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, - {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, ] [[package]] @@ -4356,29 +4516,29 @@ files = [ [[package]] name = "momento" -version = "1.6.0" +version = "1.7.1" description = "SDK for Momento" optional = true python-versions = ">=3.7,<4.0" files = [ - {file = "momento-1.6.0-py3-none-any.whl", hash = "sha256:a7f9a85a4372274bd5eafba95d6ab72bafa2d947abfbb16f8d0afb4b6501e4fb"}, - {file = "momento-1.6.0.tar.gz", hash = "sha256:55a2f628d750b1da1c5013b7413102b1d9e5545dcf53ce20a0259f35be32a961"}, + {file = "momento-1.7.1-py3-none-any.whl", hash = "sha256:b5b37a7c0015ed98a52a05e156babf58c0cd222771d5e3b83a10b5e2cd821e61"}, + {file = "momento-1.7.1.tar.gz", hash = "sha256:15a627c67de8e95eb9269ce31590650c1289ef8baa793dac4a507329e8e60469"}, ] [package.dependencies] grpcio = ">=1.46.0,<2.0.0" -momento-wire-types = ">=0.64,<0.65" +momento-wire-types = ">=0.67,<0.68" pyjwt = ">=2.4.0,<3.0.0" [[package]] name = "momento-wire-types" -version = "0.64.1" +version = "0.67.0" description = "Momento Client Proto Generated Files" optional = true python-versions = ">=3.7,<4.0" files = [ - {file = "momento_wire_types-0.64.1-py3-none-any.whl", hash = "sha256:b6fb773831e7aaf95c60223e450e985606076a45df120814ecb9a97904948fe5"}, - {file = "momento_wire_types-0.64.1.tar.gz", hash = "sha256:625395e2d744117a23e100604b6e44c84fcb020f935c128fc18fd356047ea4ee"}, + {file = "momento_wire_types-0.67.0-py3-none-any.whl", hash = "sha256:b596b45fe20534afba57c57cad50f70cc2b77c0d090646165d4bce66165ed290"}, + {file = "momento_wire_types-0.67.0.tar.gz", hash = "sha256:64fb30794940e6004b4e678b52b8b2728e3fce4390ac427a38054615795165c4"}, ] [package.dependencies] @@ -4387,13 +4547,13 @@ protobuf = ">=3,<5" [[package]] name = "more-itertools" -version = "9.1.0" +version = "10.1.0" description = "More routines for operating on iterables, beyond itertools" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"}, - {file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"}, + {file = "more-itertools-10.1.0.tar.gz", hash = "sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a"}, + {file = "more_itertools-10.1.0-py3-none-any.whl", hash = "sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6"}, ] [[package]] @@ -4415,17 +4575,17 @@ tests = ["pytest (>=4.6)"] [[package]] name = "msal" -version = "1.22.0" +version = "1.23.0" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = true python-versions = "*" files = [ - {file = "msal-1.22.0-py2.py3-none-any.whl", hash = "sha256:9120b7eafdf061c92f7b3d744e5f325fca35873445fa8ffebb40b1086a13dd58"}, - {file = "msal-1.22.0.tar.gz", hash = "sha256:8a82f5375642c1625c89058018430294c109440dce42ea667d466c2cab520acd"}, + {file = "msal-1.23.0-py2.py3-none-any.whl", hash = "sha256:3342e0837a047007f9d479e814b559c3219767453d57920dc40a31986862048b"}, + {file = "msal-1.23.0.tar.gz", hash = "sha256:25c9a33acf84301f93d1fdbe9f1a9c60cd38af0d5fffdbfa378138fc7bc1e86b"}, ] [package.dependencies] -cryptography = ">=0.6,<43" +cryptography = ">=0.6,<44" PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} requests = ">=2.0.0,<3" @@ -4628,29 +4788,31 @@ files = [ [[package]] name = "multiprocess" -version = "0.70.14" -description = "better multiprocessing and multithreading in python" +version = "0.70.15" +description = "better multiprocessing and multithreading in Python" optional = true python-versions = ">=3.7" files = [ - {file = "multiprocess-0.70.14-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:560a27540daef4ce8b24ed3cc2496a3c670df66c96d02461a4da67473685adf3"}, - {file = "multiprocess-0.70.14-pp37-pypy37_pp73-manylinux_2_24_i686.whl", hash = "sha256:bfbbfa36f400b81d1978c940616bc77776424e5e34cb0c94974b178d727cfcd5"}, - {file = "multiprocess-0.70.14-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:89fed99553a04ec4f9067031f83a886d7fdec5952005551a896a4b6a59575bb9"}, - {file = "multiprocess-0.70.14-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:40a5e3685462079e5fdee7c6789e3ef270595e1755199f0d50685e72523e1d2a"}, - {file = "multiprocess-0.70.14-pp38-pypy38_pp73-manylinux_2_24_i686.whl", hash = "sha256:44936b2978d3f2648727b3eaeab6d7fa0bedf072dc5207bf35a96d5ee7c004cf"}, - {file = "multiprocess-0.70.14-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e628503187b5d494bf29ffc52d3e1e57bb770ce7ce05d67c4bbdb3a0c7d3b05f"}, - {file = "multiprocess-0.70.14-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0d5da0fc84aacb0e4bd69c41b31edbf71b39fe2fb32a54eaedcaea241050855c"}, - {file = "multiprocess-0.70.14-pp39-pypy39_pp73-manylinux_2_24_i686.whl", hash = "sha256:6a7b03a5b98e911a7785b9116805bd782815c5e2bd6c91c6a320f26fd3e7b7ad"}, - {file = "multiprocess-0.70.14-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:cea5bdedd10aace3c660fedeac8b087136b4366d4ee49a30f1ebf7409bce00ae"}, - {file = "multiprocess-0.70.14-py310-none-any.whl", hash = "sha256:7dc1f2f6a1d34894c8a9a013fbc807971e336e7cc3f3ff233e61b9dc679b3b5c"}, - {file = "multiprocess-0.70.14-py37-none-any.whl", hash = "sha256:93a8208ca0926d05cdbb5b9250a604c401bed677579e96c14da3090beb798193"}, - {file = "multiprocess-0.70.14-py38-none-any.whl", hash = "sha256:6725bc79666bbd29a73ca148a0fb5f4ea22eed4a8f22fce58296492a02d18a7b"}, - {file = "multiprocess-0.70.14-py39-none-any.whl", hash = "sha256:63cee628b74a2c0631ef15da5534c8aedbc10c38910b9c8b18dcd327528d1ec7"}, - {file = "multiprocess-0.70.14.tar.gz", hash = "sha256:3eddafc12f2260d27ae03fe6069b12570ab4764ab59a75e81624fac453fbf46a"}, + {file = "multiprocess-0.70.15-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa36c7ed16f508091438687fe9baa393a7a8e206731d321e443745e743a0d4e5"}, + {file = "multiprocess-0.70.15-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:20e024018c46d0d1602024c613007ac948f9754659e3853b0aa705e83f6931d8"}, + {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_i686.whl", hash = "sha256:e576062981c91f0fe8a463c3d52506e598dfc51320a8dd8d78b987dfca91c5db"}, + {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e73f497e6696a0f5433ada2b3d599ae733b87a6e8b008e387c62ac9127add177"}, + {file = "multiprocess-0.70.15-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73db2e7b32dcc7f9b0f075c2ffa45c90b6729d3f1805f27e88534c8d321a1be5"}, + {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_i686.whl", hash = "sha256:4271647bd8a49c28ecd6eb56a7fdbd3c212c45529ad5303b40b3c65fc6928e5f"}, + {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:cf981fb998d6ec3208cb14f0cf2e9e80216e834f5d51fd09ebc937c32b960902"}, + {file = "multiprocess-0.70.15-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:18f9f2c7063346d1617bd1684fdcae8d33380ae96b99427260f562e1a1228b67"}, + {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_i686.whl", hash = "sha256:0eac53214d664c49a34695e5824872db4006b1a465edd7459a251809c3773370"}, + {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1a51dd34096db47fb21fa2b839e615b051d51b97af9a67afbcdaa67186b44883"}, + {file = "multiprocess-0.70.15-py310-none-any.whl", hash = "sha256:7dd58e33235e83cf09d625e55cffd7b0f0eede7ee9223cdd666a87624f60c21a"}, + {file = "multiprocess-0.70.15-py311-none-any.whl", hash = "sha256:134f89053d82c9ed3b73edd3a2531eb791e602d4f4156fc92a79259590bd9670"}, + {file = "multiprocess-0.70.15-py37-none-any.whl", hash = "sha256:f7d4a1629bccb433114c3b4885f69eccc200994323c80f6feee73b0edc9199c5"}, + {file = "multiprocess-0.70.15-py38-none-any.whl", hash = "sha256:bee9afba476c91f9ebee7beeee0601face9eff67d822e893f9a893725fbd6316"}, + {file = "multiprocess-0.70.15-py39-none-any.whl", hash = "sha256:3e0953f5d52b4c76f1c973eaf8214554d146f2be5decb48e928e55c7a2d19338"}, + {file = "multiprocess-0.70.15.tar.gz", hash = "sha256:f20eed3036c0ef477b07a4177cf7c1ba520d9a2677870a4f47fe026f0cd6787e"}, ] [package.dependencies] -dill = ">=0.3.6" +dill = ">=0.3.7" [[package]] name = "mwcli" @@ -4812,72 +4974,37 @@ files = [ protobuf = ">=3.19.4" types-protobuf = ">=3.19.12" -[[package]] -name = "nbclassic" -version = "1.0.0" -description = "Jupyter Notebook as a Jupyter Server extension." -optional = false -python-versions = ">=3.7" -files = [ - {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, - {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, -] - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=6.1.1" -jupyter-core = ">=4.6.1" -jupyter-server = ">=1.8" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -notebook-shim = ">=0.2.3" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] - [[package]] name = "nbclient" -version = "0.7.4" +version = "0.8.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.7.4-py3-none-any.whl", hash = "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125"}, - {file = "nbclient-0.7.4.tar.gz", hash = "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d"}, + {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, + {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, ] [package.dependencies] jupyter-client = ">=6.1.12" jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" -traitlets = ">=5.3" +traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.5.0" +version = "7.7.4" description = "Converting Jupyter Notebooks" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "nbconvert-7.5.0-py3-none-any.whl", hash = "sha256:852e44392d5650ef217a5ce3a8050747051d4e6ba75f0574cb5435049ee6c0d9"}, - {file = "nbconvert-7.5.0.tar.gz", hash = "sha256:f78fd22fd2410b960d5d9bcecf3e1d6c7bdc5fec2c865964c84aa4e74e6e88da"}, + {file = "nbconvert-7.7.4-py3-none-any.whl", hash = "sha256:ace26f4386d08eb5c55833596a942048c5502a95e05590cb523826a749a40a37"}, + {file = "nbconvert-7.7.4.tar.gz", hash = "sha256:1113d039fa3fc3a846ffa5a3b0a019e85aaa94c566a09fa0c400fb7638e46087"}, ] [package.dependencies] @@ -4889,7 +5016,7 @@ jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" markupsafe = ">=2.0" -mistune = ">=2.0.3,<3" +mistune = ">=2.0.3,<4" nbclient = ">=0.5.0" nbformat = ">=5.7" packaging = "*" @@ -4904,18 +5031,18 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] -webpdf = ["pyppeteer (>=1,<1.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.0" +version = "5.9.2" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.0-py3-none-any.whl", hash = "sha256:8c8fa16d6d05062c26177754bfbfac22de644888e2ef69d27ad2a334cf2576e5"}, - {file = "nbformat-5.9.0.tar.gz", hash = "sha256:e98ebb6120c3efbafdee2a40af2a140cadee90bb06dd69a2a63d9551fcc7f976"}, + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, ] [package.dependencies] @@ -4947,12 +5074,12 @@ six = ">=1.16.0" [[package]] name = "neo4j" -version = "5.9.0" +version = "5.11.0" description = "Neo4j Bolt driver for Python" optional = true python-versions = ">=3.7" files = [ - {file = "neo4j-5.9.0.tar.gz", hash = "sha256:b0abc0065f616bfd8230a48b1f6c91f9aacd7e2aea76d72d09a745ae169cf4da"}, + {file = "neo4j-5.11.0.tar.gz", hash = "sha256:81d425ef9a53279c6909ec8d33e7dc913acc840292f0f3a047f3c3c5b74bccb5"}, ] [package.dependencies] @@ -4964,13 +5091,13 @@ pandas = ["numpy (>=1.7.0,<2.0.0)", "pandas (>=1.1.0,<3.0.0)"] [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.5.7" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, + {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, + {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, ] [[package]] @@ -5019,13 +5146,13 @@ tldextract = ">=2.0.1" [[package]] name = "nlpcloud" -version = "1.0.42" +version = "1.1.44" description = "Python client for the NLP Cloud API" optional = true python-versions = "*" files = [ - {file = "nlpcloud-1.0.42-py3-none-any.whl", hash = "sha256:85bf408a86c8bc14c7c80a63c9d964cd03d54cc0fe153c01d9d0a4215975b5ad"}, - {file = "nlpcloud-1.0.42.tar.gz", hash = "sha256:5d3dda69d62b758664f04124513745b53311d4ba1c88ed23428fd0085709716c"}, + {file = "nlpcloud-1.1.44-py3-none-any.whl", hash = "sha256:ca05fe9d6bd7def583b4202b63ca423234c5b921e2ced5a20e9a0020619dc4c5"}, + {file = "nlpcloud-1.1.44.tar.gz", hash = "sha256:74e5bf33d1492620a28b8fa5649e8f8366c0752a6e978251b7361d23b56025b3"}, ] [package.dependencies] @@ -5085,37 +5212,27 @@ gpt4all = ["peft (==0.3.0.dev0)", "sentencepiece", "torch", "transformers (==4.2 [[package]] name = "notebook" -version = "6.5.4" -description = "A web-based notebook environment for interactive computing" +version = "7.0.2" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, - {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, + {file = "notebook-7.0.2-py3-none-any.whl", hash = "sha256:c77b1499dc9b07ce4f4f26990dcb25b2107b434f2536766b51a72a4228d9a4b6"}, + {file = "notebook-7.0.2.tar.gz", hash = "sha256:d70d6a07418c829bd5f54337ce993b7105261d9026f9d3fe68e9b8aa1a20da9a"}, ] [package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=5.3.4" -jupyter-core = ">=4.6.1" -nbclassic = ">=0.4.7" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" +importlib-resources = {version = ">=5.0", markers = "python_version < \"3.9\""} +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.0.2,<5" +jupyterlab-server = ">=2.22.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" [package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] -json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" @@ -5206,41 +5323,41 @@ zfpy = ["zfpy (>=1.0.0)"] [[package]] name = "numexpr" -version = "2.8.4" +version = "2.8.5" description = "Fast numerical expression evaluator for NumPy" optional = false python-versions = ">=3.7" files = [ - {file = "numexpr-2.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a75967d46b6bd56455dd32da6285e5ffabe155d0ee61eef685bbfb8dafb2e484"}, - {file = "numexpr-2.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db93cf1842f068247de631bfc8af20118bf1f9447cd929b531595a5e0efc9346"}, - {file = "numexpr-2.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bca95f4473b444428061d4cda8e59ac564dc7dc6a1dea3015af9805c6bc2946"}, - {file = "numexpr-2.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e34931089a6bafc77aaae21f37ad6594b98aa1085bb8b45d5b3cd038c3c17d9"}, - {file = "numexpr-2.8.4-cp310-cp310-win32.whl", hash = "sha256:f3a920bfac2645017110b87ddbe364c9c7a742870a4d2f6120b8786c25dc6db3"}, - {file = "numexpr-2.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:6931b1e9d4f629f43c14b21d44f3f77997298bea43790cfcdb4dd98804f90783"}, - {file = "numexpr-2.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9400781553541f414f82eac056f2b4c965373650df9694286b9bd7e8d413f8d8"}, - {file = "numexpr-2.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ee9db7598dd4001138b482342b96d78110dd77cefc051ec75af3295604dde6a"}, - {file = "numexpr-2.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff5835e8af9a212e8480003d731aad1727aaea909926fd009e8ae6a1cba7f141"}, - {file = "numexpr-2.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:655d84eb09adfee3c09ecf4a89a512225da153fdb7de13c447404b7d0523a9a7"}, - {file = "numexpr-2.8.4-cp311-cp311-win32.whl", hash = "sha256:5538b30199bfc68886d2be18fcef3abd11d9271767a7a69ff3688defe782800a"}, - {file = "numexpr-2.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:3f039321d1c17962c33079987b675fb251b273dbec0f51aac0934e932446ccc3"}, - {file = "numexpr-2.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c867cc36cf815a3ec9122029874e00d8fbcef65035c4a5901e9b120dd5d626a2"}, - {file = "numexpr-2.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:059546e8f6283ccdb47c683101a890844f667fa6d56258d48ae2ecf1b3875957"}, - {file = "numexpr-2.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:845a6aa0ed3e2a53239b89c1ebfa8cf052d3cc6e053c72805e8153300078c0b1"}, - {file = "numexpr-2.8.4-cp37-cp37m-win32.whl", hash = "sha256:a38664e699526cb1687aefd9069e2b5b9387da7feac4545de446141f1ef86f46"}, - {file = "numexpr-2.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:eaec59e9bf70ff05615c34a8b8d6c7bd042bd9f55465d7b495ea5436f45319d0"}, - {file = "numexpr-2.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b318541bf3d8326682ebada087ba0050549a16d8b3fa260dd2585d73a83d20a7"}, - {file = "numexpr-2.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b076db98ca65eeaf9bd224576e3ac84c05e451c0bd85b13664b7e5f7b62e2c70"}, - {file = "numexpr-2.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f12cc851240f7911a47c91aaf223dba753e98e46dff3017282e633602e76a7"}, - {file = "numexpr-2.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c368aa35ae9b18840e78b05f929d3a7b3abccdba9630a878c7db74ca2368339"}, - {file = "numexpr-2.8.4-cp38-cp38-win32.whl", hash = "sha256:b96334fc1748e9ec4f93d5fadb1044089d73fb08208fdb8382ed77c893f0be01"}, - {file = "numexpr-2.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:a6d2d7740ae83ba5f3531e83afc4b626daa71df1ef903970947903345c37bd03"}, - {file = "numexpr-2.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:77898fdf3da6bb96aa8a4759a8231d763a75d848b2f2e5c5279dad0b243c8dfe"}, - {file = "numexpr-2.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df35324666b693f13a016bc7957de7cc4d8801b746b81060b671bf78a52b9037"}, - {file = "numexpr-2.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ac9cfe6d0078c5fc06ba1c1bbd20b8783f28c6f475bbabd3cad53683075cab"}, - {file = "numexpr-2.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df3a1f6b24214a1ab826e9c1c99edf1686c8e307547a9aef33910d586f626d01"}, - {file = "numexpr-2.8.4-cp39-cp39-win32.whl", hash = "sha256:7d71add384adc9119568d7e9ffa8a35b195decae81e0abf54a2b7779852f0637"}, - {file = "numexpr-2.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:9f096d707290a6a00b6ffdaf581ee37331109fb7b6c8744e9ded7c779a48e517"}, - {file = "numexpr-2.8.4.tar.gz", hash = "sha256:d5432537418d18691b9115d615d6daa17ee8275baef3edf1afbbf8bc69806147"}, + {file = "numexpr-2.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51f3ab160c3847ebcca93cd88f935a7802b54a01ab63fe93152994a64d7a6cf2"}, + {file = "numexpr-2.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:de29c77f674e4eb8f0846525a475cab64008c227c8bc4ba5153ab3f72441cc63"}, + {file = "numexpr-2.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf85ba1327eb87ec82ae7936f13c8850fb969a0ca34f3ba9fa3897c09d5c80d7"}, + {file = "numexpr-2.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c00be69f747f44a631830215cab482f0f77f75af2925695adff57c1cc0f9a68"}, + {file = "numexpr-2.8.5-cp310-cp310-win32.whl", hash = "sha256:c46350dcdb93e32f033eea5a21269514ffcaf501d9abd6036992d37e48a308b0"}, + {file = "numexpr-2.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:894b027438b8ec88dea32a19193716c79f4ff8ddb92302dcc9731b51ba3565a8"}, + {file = "numexpr-2.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6df184d40d4cf9f21c71f429962f39332f7398147762588c9f3a5c77065d0c06"}, + {file = "numexpr-2.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:178b85ad373c6903e55d75787d61b92380439b70d94b001cb055a501b0821335"}, + {file = "numexpr-2.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:578fe4008e4d5d6ff01bbeb2d7b7ba1ec658a5cda9c720cd26a9a8325f8ef438"}, + {file = "numexpr-2.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef621b4ee366a5c6a484f6678c9259f5b826569f8bfa0b89ba2306d5055468bb"}, + {file = "numexpr-2.8.5-cp311-cp311-win32.whl", hash = "sha256:dd57ab1a3d3aaa9274aff1cefbf93b8ddacc7973afef5b125905f6bf18fabab0"}, + {file = "numexpr-2.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:783324ba40eb804ecfc9ebae86120a1e339ab112d0ab8a1f0d48a26354d5bf9b"}, + {file = "numexpr-2.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:183d5430db76826e54465c69db93a3c6ecbf03cda5aa1bb96eaad0147e9b68dc"}, + {file = "numexpr-2.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39ce106f92ccea5b07b1d6f2f3c4370f05edf27691dc720a63903484a2137e48"}, + {file = "numexpr-2.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b594dc9e2d6291a0bc5c065e6d9caf3eee743b5663897832e9b17753c002947a"}, + {file = "numexpr-2.8.5-cp37-cp37m-win32.whl", hash = "sha256:62b4faf8e0627673b0210a837792bddd23050ecebc98069ab23eb0633ff1ef5f"}, + {file = "numexpr-2.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:db5c65417d69414f1ab31302ea01d3548303ef31209c38b4849d145be4e1d1ba"}, + {file = "numexpr-2.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb36ffcfa1606e41aa08d559b4277bcad0e16b83941d1a4fee8d2bd5a34f8e0e"}, + {file = "numexpr-2.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34af2a0e857d02a4bc5758bc037a777d50dacb13bcd57c7905268a3e44994ed6"}, + {file = "numexpr-2.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a8dad2bfaad5a5c34a2e8bbf62b9df1dfab266d345fda1feb20ff4e264b347a"}, + {file = "numexpr-2.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b93f5a866cd13a808bc3d3a9c487d94cd02eec408b275ff0aa150f2e8e5191f8"}, + {file = "numexpr-2.8.5-cp38-cp38-win32.whl", hash = "sha256:558390fea6370003ac749ed9d0f38d708aa096f5dcb707ddb6e0ca5a0dd37da1"}, + {file = "numexpr-2.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:55983806815035eb63c5039520688c49536bb7f3cc3fc1d7d64c6a00cf3f353e"}, + {file = "numexpr-2.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1510da20e6f5f45333610b1ded44c566e2690c6c437c84f2a212ca09627c7e01"}, + {file = "numexpr-2.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e8b5bf7bcb4e8dcd66522d8fc96e1db7278f901cb4fd2e155efbe62a41dde08"}, + {file = "numexpr-2.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ed0e1c1ef5f34381448539f1fe9015906d21c9cfa2797c06194d4207dadb465"}, + {file = "numexpr-2.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aea6ab45c87c0a7041183c08a798f0ad4d7c5eccbce20cfe79ce6f1a45ef3702"}, + {file = "numexpr-2.8.5-cp39-cp39-win32.whl", hash = "sha256:cbfd833ee5fdb0efb862e152aee7e6ccea9c596d5c11d22604c2e6307bff7cad"}, + {file = "numexpr-2.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:283ce8609a7ccbadf91a68f3484558b3e36d27c93c98a41ec205efb0ab43c872"}, + {file = "numexpr-2.8.5.tar.gz", hash = "sha256:45ed41e55a0abcecf3d711481e12a5fb7a904fe99d42bc282a17cc5f8ea510be"}, ] [package.dependencies] @@ -5432,13 +5549,13 @@ requests = ">=2,<3" [[package]] name = "opensearch-py" -version = "2.2.0" +version = "2.3.1" description = "Python client for OpenSearch" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" files = [ - {file = "opensearch-py-2.2.0.tar.gz", hash = "sha256:109fe8d2e1e8f419a22358eb901025f51e6ad2f50014c8962e23796b2a23cb67"}, - {file = "opensearch_py-2.2.0-py2.py3-none-any.whl", hash = "sha256:595dcebe42e21cdf945add0b5dbaecccace1a8a5ba65d60314813767b564263c"}, + {file = "opensearch-py-2.3.1.tar.gz", hash = "sha256:f82a2e914835f7d645a632777de9a62d0c0de60ffd2f8cdae2ccfa4cfc40a185"}, + {file = "opensearch_py-2.3.1-py2.py3-none-any.whl", hash = "sha256:eafbc5d56a7ca696afba7d77bcda1bbb849050cbf9265d57d8476576cb576395"}, ] [package.dependencies] @@ -5474,68 +5591,82 @@ tests = ["pytest", "pytest-cov", "pytest-pep8"] [[package]] name = "orjson" -version = "3.9.1" +version = "3.9.5" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = true python-versions = ">=3.7" files = [ - {file = "orjson-3.9.1-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c4434b7b786fdc394b95d029fb99949d7c2b05bbd4bf5cb5e3906be96ffeee3b"}, - {file = "orjson-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09faf14f74ed47e773fa56833be118e04aa534956f661eb491522970b7478e3b"}, - {file = "orjson-3.9.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:503eb86a8d53a187fe66aa80c69295a3ca35475804da89a9547e4fce5f803822"}, - {file = "orjson-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20f2804b5a1dbd3609c086041bd243519224d47716efd7429db6c03ed28b7cc3"}, - {file = "orjson-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fd828e0656615a711c4cc4da70f3cac142e66a6703ba876c20156a14e28e3fa"}, - {file = "orjson-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec53d648176f873203b9c700a0abacab33ca1ab595066e9d616f98cdc56f4434"}, - {file = "orjson-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e186ae76b0d97c505500664193ddf508c13c1e675d9b25f1f4414a7606100da6"}, - {file = "orjson-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d4edee78503016f4df30aeede0d999b3cb11fb56f47e9db0e487bce0aaca9285"}, - {file = "orjson-3.9.1-cp310-none-win_amd64.whl", hash = "sha256:a4cc5d21e68af982d9a2528ac61e604f092c60eed27aef3324969c68f182ec7e"}, - {file = "orjson-3.9.1-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:761b6efd33c49de20dd73ce64cc59da62c0dab10aa6015f582680e0663cc792c"}, - {file = "orjson-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31229f9d0b8dc2ef7ee7e4393f2e4433a28e16582d4b25afbfccc9d68dc768f8"}, - {file = "orjson-3.9.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b7ab18d55ecb1de543d452f0a5f8094b52282b916aa4097ac11a4c79f317b86"}, - {file = "orjson-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db774344c39041f4801c7dfe03483df9203cbd6c84e601a65908e5552228dd25"}, - {file = "orjson-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae47ef8c0fe89c4677db7e9e1fb2093ca6e66c3acbee5442d84d74e727edad5e"}, - {file = "orjson-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:103952c21575b9805803c98add2eaecd005580a1e746292ed2ec0d76dd3b9746"}, - {file = "orjson-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2cb0121e6f2c9da3eddf049b99b95fef0adf8480ea7cb544ce858706cdf916eb"}, - {file = "orjson-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:24d4ddaa2876e657c0fd32902b5c451fd2afc35159d66a58da7837357044b8c2"}, - {file = "orjson-3.9.1-cp311-none-win_amd64.whl", hash = "sha256:0b53b5f72cf536dd8aa4fc4c95e7e09a7adb119f8ff8ee6cc60f735d7740ad6a"}, - {file = "orjson-3.9.1-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d4b68d01a506242316a07f1d2f29fb0a8b36cee30a7c35076f1ef59dce0890c1"}, - {file = "orjson-3.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9dd4abe6c6fd352f00f4246d85228f6a9847d0cc14f4d54ee553718c225388f"}, - {file = "orjson-3.9.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e20bca5e13041e31ceba7a09bf142e6d63c8a7467f5a9c974f8c13377c75af2"}, - {file = "orjson-3.9.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ae0467d01eb1e4bcffef4486d964bfd1c2e608103e75f7074ed34be5df48cc"}, - {file = "orjson-3.9.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06f6ab4697fab090517f295915318763a97a12ee8186054adf21c1e6f6abbd3d"}, - {file = "orjson-3.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8515867713301fa065c58ec4c9053ba1a22c35113ab4acad555317b8fd802e50"}, - {file = "orjson-3.9.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:393d0697d1dfa18d27d193e980c04fdfb672c87f7765b87952f550521e21b627"}, - {file = "orjson-3.9.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d96747662d3666f79119e5d28c124e7d356c7dc195cd4b09faea4031c9079dc9"}, - {file = "orjson-3.9.1-cp37-none-win_amd64.whl", hash = "sha256:6d173d3921dd58a068c88ec22baea7dbc87a137411501618b1292a9d6252318e"}, - {file = "orjson-3.9.1-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d1c2b0b4246c992ce2529fc610a446b945f1429445ece1c1f826a234c829a918"}, - {file = "orjson-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19f70ba1f441e1c4bb1a581f0baa092e8b3e3ce5b2aac2e1e090f0ac097966da"}, - {file = "orjson-3.9.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:375d65f002e686212aac42680aed044872c45ee4bc656cf63d4a215137a6124a"}, - {file = "orjson-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4751cee4a7b1daeacb90a7f5adf2170ccab893c3ab7c5cea58b45a13f89b30b3"}, - {file = "orjson-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d9a2a4b2302d5ebc3695498ebc305c3568e5ad4f3501eb30a6405a32d8af22"}, - {file = "orjson-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46b4facc32643b2689dfc292c0c463985dac4b6ab504799cf51fc3c6959ed668"}, - {file = "orjson-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec7c8a0f1bf35da0d5fd14f8956f3b82a9a6918a3c6963d718dfd414d6d3b604"}, - {file = "orjson-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d3a40b0fbe06ccd4d6a99e523d20b47985655bcada8d1eba485b1b32a43e4904"}, - {file = "orjson-3.9.1-cp38-none-win_amd64.whl", hash = "sha256:402f9d3edfec4560a98880224ec10eba4c5f7b4791e4bc0d4f4d8df5faf2a006"}, - {file = "orjson-3.9.1-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:49c0d78dcd34626e2e934f1192d7c052b94e0ecadc5f386fd2bda6d2e03dadf5"}, - {file = "orjson-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:125f63e56d38393daa0a1a6dc6fedefca16c538614b66ea5997c3bd3af35ef26"}, - {file = "orjson-3.9.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08927970365d2e1f3ce4894f9ff928a7b865d53f26768f1bbdd85dd4fee3e966"}, - {file = "orjson-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9a744e212d4780ecd67f4b6b128b2e727bee1df03e7059cddb2dfe1083e7dc4"}, - {file = "orjson-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d1dbf36db7240c61eec98c8d21545d671bce70be0730deb2c0d772e06b71af3"}, - {file = "orjson-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80a1e384626f76b66df615f7bb622a79a25c166d08c5d2151ffd41f24c4cc104"}, - {file = "orjson-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:15d28872fb055bf17ffca913826e618af61b2f689d2b170f72ecae1a86f80d52"}, - {file = "orjson-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e4d905338f9ef32c67566929dfbfbb23cc80287af8a2c38930fb0eda3d40b76"}, - {file = "orjson-3.9.1-cp39-none-win_amd64.whl", hash = "sha256:48a27da6c7306965846565cc385611d03382bbd84120008653aa2f6741e2105d"}, - {file = "orjson-3.9.1.tar.gz", hash = "sha256:db373a25ec4a4fccf8186f9a72a1b3442837e40807a736a815ab42481e83b7d0"}, + {file = "orjson-3.9.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ad6845912a71adcc65df7c8a7f2155eba2096cf03ad2c061c93857de70d699ad"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e298e0aacfcc14ef4476c3f409e85475031de24e5b23605a465e9bf4b2156273"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:83c9939073281ef7dd7c5ca7f54cceccb840b440cec4b8a326bda507ff88a0a6"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e174cc579904a48ee1ea3acb7045e8a6c5d52c17688dfcb00e0e842ec378cabf"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d51702f42c785b115401e1d64a27a2ea767ae7cf1fb8edaa09c7cf1571c660"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f13d61c0c7414ddee1ef4d0f303e2222f8cced5a2e26d9774751aecd72324c9e"}, + {file = "orjson-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d748cc48caf5a91c883d306ab648df1b29e16b488c9316852844dd0fd000d1c2"}, + {file = "orjson-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bd19bc08fa023e4c2cbf8294ad3f2b8922f4de9ba088dbc71e6b268fdf54591c"}, + {file = "orjson-3.9.5-cp310-none-win32.whl", hash = "sha256:5793a21a21bf34e1767e3d61a778a25feea8476dcc0bdf0ae1bc506dc34561ea"}, + {file = "orjson-3.9.5-cp310-none-win_amd64.whl", hash = "sha256:2bcec0b1024d0031ab3eab7a8cb260c8a4e4a5e35993878a2da639d69cdf6a65"}, + {file = "orjson-3.9.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8547b95ca0e2abd17e1471973e6d676f1d8acedd5f8fb4f739e0612651602d66"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87ce174d6a38d12b3327f76145acbd26f7bc808b2b458f61e94d83cd0ebb4d76"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a960bb1bc9a964d16fcc2d4af5a04ce5e4dfddca84e3060c35720d0a062064fe"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a7aa5573a949760d6161d826d34dc36db6011926f836851fe9ccb55b5a7d8e8"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b2852afca17d7eea85f8e200d324e38c851c96598ac7b227e4f6c4e59fbd3df"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa185959c082475288da90f996a82e05e0c437216b96f2a8111caeb1d54ef926"}, + {file = "orjson-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:89c9332695b838438ea4b9a482bce8ffbfddde4df92750522d928fb00b7b8dce"}, + {file = "orjson-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2493f1351a8f0611bc26e2d3d407efb873032b4f6b8926fed8cfed39210ca4ba"}, + {file = "orjson-3.9.5-cp311-none-win32.whl", hash = "sha256:ffc544e0e24e9ae69301b9a79df87a971fa5d1c20a6b18dca885699709d01be0"}, + {file = "orjson-3.9.5-cp311-none-win_amd64.whl", hash = "sha256:89670fe2732e3c0c54406f77cad1765c4c582f67b915c74fda742286809a0cdc"}, + {file = "orjson-3.9.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:15df211469625fa27eced4aa08dc03e35f99c57d45a33855cc35f218ea4071b8"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9f17c59fe6c02bc5f89ad29edb0253d3059fe8ba64806d789af89a45c35269a"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca6b96659c7690773d8cebb6115c631f4a259a611788463e9c41e74fa53bf33f"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a26fafe966e9195b149950334bdbe9026eca17fe8ffe2d8fa87fdc30ca925d30"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9006b1eb645ecf460da067e2dd17768ccbb8f39b01815a571bfcfab7e8da5e52"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebfdbf695734b1785e792a1315e41835ddf2a3e907ca0e1c87a53f23006ce01d"}, + {file = "orjson-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4a3943234342ab37d9ed78fb0a8f81cd4b9532f67bf2ac0d3aa45fa3f0a339f3"}, + {file = "orjson-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e6762755470b5c82f07b96b934af32e4d77395a11768b964aaa5eb092817bc31"}, + {file = "orjson-3.9.5-cp312-none-win_amd64.whl", hash = "sha256:c74df28749c076fd6e2157190df23d43d42b2c83e09d79b51694ee7315374ad5"}, + {file = "orjson-3.9.5-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:88e18a74d916b74f00d0978d84e365c6bf0e7ab846792efa15756b5fb2f7d49d"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28514b5b6dfaf69097be70d0cf4f1407ec29d0f93e0b4131bf9cc8fd3f3e374"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25b81aca8c7be61e2566246b6a0ca49f8aece70dd3f38c7f5c837f398c4cb142"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:385c1c713b1e47fd92e96cf55fd88650ac6dfa0b997e8aa7ecffd8b5865078b1"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9850c03a8e42fba1a508466e6a0f99472fd2b4a5f30235ea49b2a1b32c04c11"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4449f84bbb13bcef493d8aa669feadfced0f7c5eea2d0d88b5cc21f812183af8"}, + {file = "orjson-3.9.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:86127bf194f3b873135e44ce5dc9212cb152b7e06798d5667a898a00f0519be4"}, + {file = "orjson-3.9.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0abcd039f05ae9ab5b0ff11624d0b9e54376253b7d3217a358d09c3edf1d36f7"}, + {file = "orjson-3.9.5-cp37-none-win32.whl", hash = "sha256:10cc8ad5ff7188efcb4bec196009d61ce525a4e09488e6d5db41218c7fe4f001"}, + {file = "orjson-3.9.5-cp37-none-win_amd64.whl", hash = "sha256:ff27e98532cb87379d1a585837d59b187907228268e7b0a87abe122b2be6968e"}, + {file = "orjson-3.9.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5bfa79916ef5fef75ad1f377e54a167f0de334c1fa4ebb8d0224075f3ec3d8c0"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e87dfa6ac0dae764371ab19b35eaaa46dfcb6ef2545dfca03064f21f5d08239f"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50ced24a7b23058b469ecdb96e36607fc611cbaee38b58e62a55c80d1b3ad4e1"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1b74ea2a3064e1375da87788897935832e806cc784de3e789fd3c4ab8eb3fa5"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7cb961efe013606913d05609f014ad43edfaced82a576e8b520a5574ce3b2b9"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1225d2d5ee76a786bda02f8c5e15017462f8432bb960de13d7c2619dba6f0275"}, + {file = "orjson-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f39f4b99199df05c7ecdd006086259ed25886cdbd7b14c8cdb10c7675cfcca7d"}, + {file = "orjson-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a461dc9fb60cac44f2d3218c36a0c1c01132314839a0e229d7fb1bba69b810d8"}, + {file = "orjson-3.9.5-cp38-none-win32.whl", hash = "sha256:dedf1a6173748202df223aea29de814b5836732a176b33501375c66f6ab7d822"}, + {file = "orjson-3.9.5-cp38-none-win_amd64.whl", hash = "sha256:fa504082f53efcbacb9087cc8676c163237beb6e999d43e72acb4bb6f0db11e6"}, + {file = "orjson-3.9.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6900f0248edc1bec2a2a3095a78a7e3ef4e63f60f8ddc583687eed162eedfd69"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17404333c40047888ac40bd8c4d49752a787e0a946e728a4e5723f111b6e55a5"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0eefb7cfdd9c2bc65f19f974a5d1dfecbac711dae91ed635820c6b12da7a3c11"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68c78b2a3718892dc018adbc62e8bab6ef3c0d811816d21e6973dee0ca30c152"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:591ad7d9e4a9f9b104486ad5d88658c79ba29b66c5557ef9edf8ca877a3f8d11"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cc2cbf302fbb2d0b2c3c142a663d028873232a434d89ce1b2604ebe5cc93ce8"}, + {file = "orjson-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b26b5aa5e9ee1bad2795b925b3adb1b1b34122cb977f30d89e0a1b3f24d18450"}, + {file = "orjson-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef84724f7d29dcfe3aafb1fc5fc7788dca63e8ae626bb9298022866146091a3e"}, + {file = "orjson-3.9.5-cp39-none-win32.whl", hash = "sha256:664cff27f85939059472afd39acff152fbac9a091b7137092cb651cf5f7747b5"}, + {file = "orjson-3.9.5-cp39-none-win_amd64.whl", hash = "sha256:91dda66755795ac6100e303e206b636568d42ac83c156547634256a2e68de694"}, + {file = "orjson-3.9.5.tar.gz", hash = "sha256:6daf5ee0b3cf530b9978cdbf71024f1c16ed4a67d05f6ec435c6e7fe7a52724c"}, ] [[package]] name = "overrides" -version = "7.3.1" +version = "7.4.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" files = [ - {file = "overrides-7.3.1-py3-none-any.whl", hash = "sha256:6187d8710a935d09b0bcef8238301d6ee2569d2ac1ae0ec39a8c7924e27f58ca"}, - {file = "overrides-7.3.1.tar.gz", hash = "sha256:8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2"}, + {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, + {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, ] [[package]] @@ -5551,50 +5682,50 @@ files = [ [[package]] name = "pandas" -version = "2.0.2" +version = "2.0.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.8" files = [ - {file = "pandas-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ebb9f1c22ddb828e7fd017ea265a59d80461d5a79154b49a4207bd17514d122"}, - {file = "pandas-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eb09a242184092f424b2edd06eb2b99d06dc07eeddff9929e8667d4ed44e181"}, - {file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7319b6e68de14e6209460f72a8d1ef13c09fb3d3ef6c37c1e65b35d50b5c145"}, - {file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd46bde7309088481b1cf9c58e3f0e204b9ff9e3244f441accd220dd3365ce7c"}, - {file = "pandas-2.0.2-cp310-cp310-win32.whl", hash = "sha256:51a93d422fbb1bd04b67639ba4b5368dffc26923f3ea32a275d2cc450f1d1c86"}, - {file = "pandas-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:66d00300f188fa5de73f92d5725ced162488f6dc6ad4cecfe4144ca29debe3b8"}, - {file = "pandas-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02755de164da6827764ceb3bbc5f64b35cb12394b1024fdf88704d0fa06e0e2f"}, - {file = "pandas-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0a1e0576611641acde15c2322228d138258f236d14b749ad9af498ab69089e2d"}, - {file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6b5f14cd24a2ed06e14255ff40fe2ea0cfaef79a8dd68069b7ace74bd6acbba"}, - {file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50e451932b3011b61d2961b4185382c92cc8c6ee4658dcd4f320687bb2d000ee"}, - {file = "pandas-2.0.2-cp311-cp311-win32.whl", hash = "sha256:7b21cb72958fc49ad757685db1919021d99650d7aaba676576c9e88d3889d456"}, - {file = "pandas-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:c4af689352c4fe3d75b2834933ee9d0ccdbf5d7a8a7264f0ce9524e877820c08"}, - {file = "pandas-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69167693cb8f9b3fc060956a5d0a0a8dbfed5f980d9fd2c306fb5b9c855c814c"}, - {file = "pandas-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30a89d0fec4263ccbf96f68592fd668939481854d2ff9da709d32a047689393b"}, - {file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a18e5c72b989ff0f7197707ceddc99828320d0ca22ab50dd1b9e37db45b010c0"}, - {file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7376e13d28eb16752c398ca1d36ccfe52bf7e887067af9a0474de6331dd948d2"}, - {file = "pandas-2.0.2-cp38-cp38-win32.whl", hash = "sha256:6d6d10c2142d11d40d6e6c0a190b1f89f525bcf85564707e31b0a39e3b398e08"}, - {file = "pandas-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:e69140bc2d29a8556f55445c15f5794490852af3de0f609a24003ef174528b79"}, - {file = "pandas-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b42b120458636a981077cfcfa8568c031b3e8709701315e2bfa866324a83efa8"}, - {file = "pandas-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f908a77cbeef9bbd646bd4b81214cbef9ac3dda4181d5092a4aa9797d1bc7774"}, - {file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:713f2f70abcdade1ddd68fc91577cb090b3544b07ceba78a12f799355a13ee44"}, - {file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf3f0c361a4270185baa89ec7ab92ecaa355fe783791457077473f974f654df5"}, - {file = "pandas-2.0.2-cp39-cp39-win32.whl", hash = "sha256:598e9020d85a8cdbaa1815eb325a91cfff2bb2b23c1442549b8a3668e36f0f77"}, - {file = "pandas-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:77550c8909ebc23e56a89f91b40ad01b50c42cfbfab49b3393694a50549295ea"}, - {file = "pandas-2.0.2.tar.gz", hash = "sha256:dd5476b6c3fe410ee95926873f377b856dbc4e81a9c605a0dc05aaccc6a7c6c6"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, ] [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" tzdata = ">=2022.1" [package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] aws = ["s3fs (>=2021.08.0)"] clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] @@ -5613,7 +5744,7 @@ plot = ["matplotlib (>=3.6.1)"] postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] spss = ["pyreadstat (>=1.1.2)"] sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.6.3)"] [[package]] @@ -5655,30 +5786,30 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathos" -version = "0.3.0" +version = "0.3.1" description = "parallel graph management and execution in heterogeneous computing" optional = true python-versions = ">=3.7" files = [ - {file = "pathos-0.3.0-py3-none-any.whl", hash = "sha256:b1f5a79b1c79a594330d451832642ee5bb61dd77dc75ba9e5c72087c77e8994c"}, - {file = "pathos-0.3.0.tar.gz", hash = "sha256:24fa8db51fbd9284da8e191794097c4bb2aa3fce411090e57af6385e61b97e09"}, + {file = "pathos-0.3.1-py3-none-any.whl", hash = "sha256:b1c7145e2adcc19c7e9cac48f110ea5a63e300c1cc10c2947d4857dc97a47b46"}, + {file = "pathos-0.3.1.tar.gz", hash = "sha256:c9a088021493c5cb627d4459bba6c0533c684199e271a5dc297d62be23d74019"}, ] [package.dependencies] -dill = ">=0.3.6" -multiprocess = ">=0.70.14" -pox = ">=0.3.2" -ppft = ">=1.7.6.6" +dill = ">=0.3.7" +multiprocess = ">=0.70.15" +pox = ">=0.3.3" +ppft = ">=1.7.6.7" [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] @@ -5741,77 +5872,67 @@ files = [ [[package]] name = "pillow" -version = "9.5.0" +version = "10.0.0" description = "Python Imaging Library (Fork)" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, - {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, - {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, - {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, - {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, - {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, - {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, - {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, - {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, - {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, - {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, - {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, - {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, - {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, - {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, - {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, - {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, - {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, - {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, - {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, - {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, - {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, - {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, - {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, - {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, - {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, - {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, - {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, - {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, - {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, - {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, - {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, - {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, - {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, - {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, - {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, - {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, - {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, + {file = "Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"}, + {file = "Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"}, + {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"}, + {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"}, + {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"}, + {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"}, + {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"}, + {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"}, + {file = "Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"}, + {file = "Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"}, + {file = "Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"}, + {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"}, + {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"}, + {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"}, + {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"}, + {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, + {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, + {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, + {file = "Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"}, + {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, + {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, + {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, + {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"}, + {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"}, + {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"}, + {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, + {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, + {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, + {file = "Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"}, + {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, + {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, + {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, + {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"}, + {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"}, + {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"}, + {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"}, + {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"}, + {file = "Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"}, + {file = "Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"}, + {file = "Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"}, + {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"}, + {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"}, + {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"}, + {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"}, + {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"}, + {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"}, + {file = "Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"}, + {file = "Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"}, + {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"}, + {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"}, + {file = "Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"}, + {file = "Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"}, + {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"}, + {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"}, + {file = "Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"}, + {file = "Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"}, ] [package.extras] @@ -5875,33 +5996,33 @@ files = [ [[package]] name = "platformdirs" -version = "3.6.0" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.6.0-py3-none-any.whl", hash = "sha256:ffa199e3fbab8365778c4a10e1fbf1b9cd50707de826eb304b50e57ec0cc8d38"}, - {file = "platformdirs-3.6.0.tar.gz", hash = "sha256:57e28820ca8094678b807ff529196506d7a21e17156cb1cddb3e74cebce54640"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "playwright" -version = "1.35.0" +version = "1.37.0" description = "A high-level API to automate web browsers" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "playwright-1.35.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:9eb7fdb7bb3f4e528e63641b83827531739c58a40c71d4ea0030321d3f04a742"}, - {file = "playwright-1.35.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:444446b55bfb33ac62398f9f71a8fdb6cee1ceda3316d95db3c6419c51bca9be"}, - {file = "playwright-1.35.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:4f486ea09940a35c08ec26f272bdcb6c1e043d400f3b9b924d541c5f4a7ed8f3"}, - {file = "playwright-1.35.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:a29cd048b3eddaf116b154328bcb8e3f3a637753cbb926ae3ef5a5e694ed2d64"}, - {file = "playwright-1.35.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1d0686bdb6d7c2ce75087a1d6c7820e3de65be893f8a5ec64455613e884b39"}, - {file = "playwright-1.35.0-py3-none-win32.whl", hash = "sha256:188481e780166eae9a2215bb3a58043ae167f7cc963282c7b7d14ba53858451c"}, - {file = "playwright-1.35.0-py3-none-win_amd64.whl", hash = "sha256:2df7cfaaca881fd065f68e1c72a8216679a5b096f2add60c8c7c9dc909fdf7ef"}, + {file = "playwright-1.37.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:b476f63251876f1625f490af8d58ec0db90b555c623b7f54105f91d33878c06d"}, + {file = "playwright-1.37.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:68d56efe5ce916bab349177e90726837a6f0cae77ebd6a5200f5333b787b25fb"}, + {file = "playwright-1.37.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:428fdf9bfff586b73f96df53692d50d422afb93ca4650624f61e8181f548fed2"}, + {file = "playwright-1.37.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:41f0280472af94c426e941f6a969ff6a7ea156dc15fd01d09ac4b8f092e2346e"}, + {file = "playwright-1.37.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b574889ef97b7f44a633aa10d72b8966a850a4354d915fd0bc7e8658e825dd63"}, + {file = "playwright-1.37.0-py3-none-win32.whl", hash = "sha256:8b5d96aae54289129ab19d3d0e2e431171ae3e5d88d49a10900dcbe569a27d43"}, + {file = "playwright-1.37.0-py3-none-win_amd64.whl", hash = "sha256:678b9926be2df06321d11a525d4bf08d9f4a5b151354a3b82fe2ac14476322d5"}, ] [package.dependencies] @@ -5911,13 +6032,13 @@ typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} [[package]] name = "pluggy" -version = "1.0.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] [package.extras] @@ -5926,18 +6047,18 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pooch" -version = "1.6.0" +version = "1.7.0" description = "\"Pooch manages your Python library's sample data files: it automatically downloads and stores them in a local directory, with support for versioning and corruption checks.\"" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pooch-1.6.0-py3-none-any.whl", hash = "sha256:3bf0e20027096836b8dbce0152dbb785a269abeb621618eb4bdd275ff1e23c9c"}, - {file = "pooch-1.6.0.tar.gz", hash = "sha256:57d20ec4b10dd694d2b05bb64bc6b109c6e85a6c1405794ce87ed8b341ab3f44"}, + {file = "pooch-1.7.0-py3-none-any.whl", hash = "sha256:74258224fc33d58f53113cf955e8d51bf01386b91492927d0d1b6b341a765ad7"}, + {file = "pooch-1.7.0.tar.gz", hash = "sha256:f174a1041b6447f0eef8860f76d17f60ed2f857dc0efa387a7f08228af05d998"}, ] [package.dependencies] -appdirs = ">=1.3.0" packaging = ">=20.0" +platformdirs = ">=2.5.0" requests = ">=2.19.0" [package.extras] @@ -5966,38 +6087,38 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p [[package]] name = "pox" -version = "0.3.2" +version = "0.3.3" description = "utilities for filesystem exploration and automated builds" optional = true python-versions = ">=3.7" files = [ - {file = "pox-0.3.2-py3-none-any.whl", hash = "sha256:56fe2f099ecd8a557b8948082504492de90e8598c34733c9b1fdeca8f7b6de61"}, - {file = "pox-0.3.2.tar.gz", hash = "sha256:e825225297638d6e3d49415f8cfb65407a5d15e56f2fb7fe9d9b9e3050c65ee1"}, + {file = "pox-0.3.3-py3-none-any.whl", hash = "sha256:e95febf7401918478a3c1441a3630656d9a2049803889b4f589821372889d0ce"}, + {file = "pox-0.3.3.tar.gz", hash = "sha256:e1ced66f2a0c92a58cf3646bc7ccb8b4773d40884b76f85eeda0670474871667"}, ] [[package]] name = "ppft" -version = "1.7.6.6" -description = "distributed and parallel python" +version = "1.7.6.7" +description = "distributed and parallel Python" optional = true python-versions = ">=3.7" files = [ - {file = "ppft-1.7.6.6-py3-none-any.whl", hash = "sha256:f355d2caeed8bd7c9e4a860c471f31f7e66d1ada2791ab5458ea7dca15a51e41"}, - {file = "ppft-1.7.6.6.tar.gz", hash = "sha256:f933f0404f3e808bc860745acb3b79cd4fe31ea19a20889a645f900415be60f1"}, + {file = "ppft-1.7.6.7-py3-none-any.whl", hash = "sha256:fedb1b1253729d62483f2e1f36547fd50a5fc873ffbf9b78b48cfdc727d4180c"}, + {file = "ppft-1.7.6.7.tar.gz", hash = "sha256:ab34436814e2f18238f35688fd869b2641b2d2d8dca22b8d246f6701dfc954c8"}, ] [package.extras] -dill = ["dill (>=0.3.6)"] +dill = ["dill (>=0.3.7)"] [[package]] name = "prometheus-client" -version = "0.17.0" +version = "0.17.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.6" files = [ - {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, - {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, ] [package.extras] @@ -6005,13 +6126,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.38" +version = "3.0.39" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, - {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, ] [package.dependencies] @@ -6019,36 +6140,33 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "3.19.6" +version = "3.20.3" description = "Protocol Buffers" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "protobuf-3.19.6-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:010be24d5a44be7b0613750ab40bc8b8cedc796db468eae6c779b395f50d1fa1"}, - {file = "protobuf-3.19.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11478547958c2dfea921920617eb457bc26867b0d1aa065ab05f35080c5d9eb6"}, - {file = "protobuf-3.19.6-cp310-cp310-win32.whl", hash = "sha256:559670e006e3173308c9254d63facb2c03865818f22204037ab76f7a0ff70b5f"}, - {file = "protobuf-3.19.6-cp310-cp310-win_amd64.whl", hash = "sha256:347b393d4dd06fb93a77620781e11c058b3b0a5289262f094379ada2920a3730"}, - {file = "protobuf-3.19.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a8ce5ae0de28b51dff886fb922012dad885e66176663950cb2344c0439ecb473"}, - {file = "protobuf-3.19.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90b0d02163c4e67279ddb6dc25e063db0130fc299aefabb5d481053509fae5c8"}, - {file = "protobuf-3.19.6-cp36-cp36m-win32.whl", hash = "sha256:30f5370d50295b246eaa0296533403961f7e64b03ea12265d6dfce3a391d8992"}, - {file = "protobuf-3.19.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0c0714b025ec057b5a7600cb66ce7c693815f897cfda6d6efb58201c472e3437"}, - {file = "protobuf-3.19.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5057c64052a1f1dd7d4450e9aac25af6bf36cfbfb3a1cd89d16393a036c49157"}, - {file = "protobuf-3.19.6-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:bb6776bd18f01ffe9920e78e03a8676530a5d6c5911934c6a1ac6eb78973ecb6"}, - {file = "protobuf-3.19.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a04134866861b11556a82dd91ea6daf1f4925746b992f277b84013a7cc1229"}, - {file = "protobuf-3.19.6-cp37-cp37m-win32.whl", hash = "sha256:4bc98de3cdccfb5cd769620d5785b92c662b6bfad03a202b83799b6ed3fa1fa7"}, - {file = "protobuf-3.19.6-cp37-cp37m-win_amd64.whl", hash = "sha256:aa3b82ca1f24ab5326dcf4ea00fcbda703e986b22f3d27541654f749564d778b"}, - {file = "protobuf-3.19.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2b2d2913bcda0e0ec9a784d194bc490f5dc3d9d71d322d070b11a0ade32ff6ba"}, - {file = "protobuf-3.19.6-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:d0b635cefebd7a8a0f92020562dead912f81f401af7e71f16bf9506ff3bdbb38"}, - {file = "protobuf-3.19.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a552af4dc34793803f4e735aabe97ffc45962dfd3a237bdde242bff5a3de684"}, - {file = "protobuf-3.19.6-cp38-cp38-win32.whl", hash = "sha256:0469bc66160180165e4e29de7f445e57a34ab68f49357392c5b2f54c656ab25e"}, - {file = "protobuf-3.19.6-cp38-cp38-win_amd64.whl", hash = "sha256:91d5f1e139ff92c37e0ff07f391101df77e55ebb97f46bbc1535298d72019462"}, - {file = "protobuf-3.19.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c0ccd3f940fe7f3b35a261b1dd1b4fc850c8fde9f74207015431f174be5976b3"}, - {file = "protobuf-3.19.6-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:30a15015d86b9c3b8d6bf78d5b8c7749f2512c29f168ca259c9d7727604d0e39"}, - {file = "protobuf-3.19.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:878b4cd080a21ddda6ac6d1e163403ec6eea2e206cf225982ae04567d39be7b0"}, - {file = "protobuf-3.19.6-cp39-cp39-win32.whl", hash = "sha256:5a0d7539a1b1fb7e76bf5faa0b44b30f812758e989e59c40f77a7dab320e79b9"}, - {file = "protobuf-3.19.6-cp39-cp39-win_amd64.whl", hash = "sha256:bbf5cea5048272e1c60d235c7bd12ce1b14b8a16e76917f371c718bd3005f045"}, - {file = "protobuf-3.19.6-py2.py3-none-any.whl", hash = "sha256:14082457dc02be946f60b15aad35e9f5c69e738f80ebbc0900a19bc83734a5a4"}, - {file = "protobuf-3.19.6.tar.gz", hash = "sha256:5f5540d57a43042389e87661c6eaa50f47c19c6176e8cf1c4f287aeefeccb5c4"}, + {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, + {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, + {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, + {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, + {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, + {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, + {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, + {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, + {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, + {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, + {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, + {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, + {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, + {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, + {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, + {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, + {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, + {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, + {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, + {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, + {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, + {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, ] [[package]] @@ -6079,13 +6197,13 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "psychicapi" -version = "0.8.0" +version = "0.8.4" description = "Psychic.dev is an open-source data integration platform for LLMs. This is the Python client for Psychic" optional = true python-versions = "*" files = [ - {file = "psychicapi-0.8.0-py2-none-any.whl", hash = "sha256:4f8e776eb9bc7e3f9243021cff1d840f60aa7923bb2a941d0a37dfc5936b5fa3"}, - {file = "psychicapi-0.8.0.tar.gz", hash = "sha256:6af053734c848f0c9865f430794c9a8a48b5f9f72663247b11647829d1dbc27f"}, + {file = "psychicapi-0.8.4-py3-none-any.whl", hash = "sha256:bf0a0ea858a79c8d443565d0d1ae8d7f8c63095bf4fd2bd7723241e46b59bbd4"}, + {file = "psychicapi-0.8.4.tar.gz", hash = "sha256:18dc3f2e4ab4dbbf6002c39f4ce680fbd7b86253d92403a5e6530ddf07064224"}, ] [package.dependencies] @@ -6093,73 +6211,71 @@ requests = "*" [[package]] name = "psycopg2-binary" -version = "2.9.6" +version = "2.9.7" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = true python-versions = ">=3.6" files = [ - {file = "psycopg2-binary-2.9.6.tar.gz", hash = "sha256:1f64dcfb8f6e0c014c7f55e51c9759f024f70ea572fbdef123f85318c297947c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d26e0342183c762de3276cca7a530d574d4e25121ca7d6e4a98e4f05cb8e4df7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c48d8f2db17f27d41fb0e2ecd703ea41984ee19362cbce52c097963b3a1b4365"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe9dc0a884a8848075e576c1de0290d85a533a9f6e9c4e564f19adf8f6e54a7"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a76e027f87753f9bd1ab5f7c9cb8c7628d1077ef927f5e2446477153a602f2c"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6460c7a99fc939b849431f1e73e013d54aa54293f30f1109019c56a0b2b2ec2f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae102a98c547ee2288637af07393dd33f440c25e5cd79556b04e3fca13325e5f"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9972aad21f965599ed0106f65334230ce826e5ae69fda7cbd688d24fa922415e"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a40c00dbe17c0af5bdd55aafd6ff6679f94a9be9513a4c7e071baf3d7d22a70"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cacbdc5839bdff804dfebc058fe25684cae322987f7a38b0168bc1b2df703fb1"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f0438fa20fb6c7e202863e0d5ab02c246d35efb1d164e052f2f3bfe2b152bd0"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win32.whl", hash = "sha256:b6c8288bb8a84b47e07013bb4850f50538aa913d487579e1921724631d02ea1b"}, - {file = "psycopg2_binary-2.9.6-cp310-cp310-win_amd64.whl", hash = "sha256:61b047a0537bbc3afae10f134dc6393823882eb263088c271331602b672e52e9"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:964b4dfb7c1c1965ac4c1978b0f755cc4bd698e8aa2b7667c575fb5f04ebe06b"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afe64e9b8ea66866a771996f6ff14447e8082ea26e675a295ad3bdbffdd72afb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e2ee79e7cf29582ef770de7dab3d286431b01c3bb598f8e05e09601b890081"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa74c903a3c1f0d9b1c7e7b53ed2d929a4910e272add6700c38f365a6002820"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b83456c2d4979e08ff56180a76429263ea254c3f6552cd14ada95cff1dec9bb8"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0645376d399bfd64da57148694d78e1f431b1e1ee1054872a5713125681cf1be"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99e34c82309dd78959ba3c1590975b5d3c862d6f279f843d47d26ff89d7d7e1"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ea29fc3ad9d91162c52b578f211ff1c931d8a38e1f58e684c45aa470adf19e2"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4ac30da8b4f57187dbf449294d23b808f8f53cad6b1fc3623fa8a6c11d176dd0"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78e6e2a00c223e164c417628572a90093c031ed724492c763721c2e0bc2a8df"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win32.whl", hash = "sha256:1876843d8e31c89c399e31b97d4b9725a3575bb9c2af92038464231ec40f9edb"}, - {file = "psycopg2_binary-2.9.6-cp311-cp311-win_amd64.whl", hash = "sha256:b4b24f75d16a89cc6b4cdff0eb6a910a966ecd476d1e73f7ce5985ff1328e9a6"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win32.whl", hash = "sha256:498807b927ca2510baea1b05cc91d7da4718a0f53cb766c154c417a39f1820a0"}, - {file = "psycopg2_binary-2.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0d236c2825fa656a2d98bbb0e52370a2e852e5a0ec45fc4f402977313329174d"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34b9ccdf210cbbb1303c7c4db2905fa0319391bd5904d32689e6dd5c963d2ea8"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84d2222e61f313c4848ff05353653bf5f5cf6ce34df540e4274516880d9c3763"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30637a20623e2a2eacc420059be11527f4458ef54352d870b8181a4c3020ae6b"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8122cfc7cae0da9a3077216528b8bb3629c43b25053284cc868744bfe71eb141"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38601cbbfe600362c43714482f43b7c110b20cb0f8172422c616b09b85a750c5"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c7e62ab8b332147a7593a385d4f368874d5fe4ad4e341770d4983442d89603e3"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2ab652e729ff4ad76d400df2624d223d6e265ef81bb8aa17fbd63607878ecbee"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c83a74b68270028dc8ee74d38ecfaf9c90eed23c8959fca95bd703d25b82c88e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d4e6036decf4b72d6425d5b29bbd3e8f0ff1059cda7ac7b96d6ac5ed34ffbacd"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win32.whl", hash = "sha256:a8c28fd40a4226b4a84bdf2d2b5b37d2c7bd49486b5adcc200e8c7ec991dfa7e"}, - {file = "psycopg2_binary-2.9.6-cp37-cp37m-win_amd64.whl", hash = "sha256:51537e3d299be0db9137b321dfb6a5022caaab275775680e0c3d281feefaca6b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cf4499e0a83b7b7edcb8dabecbd8501d0d3a5ef66457200f77bde3d210d5debb"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e13a5a2c01151f1208d5207e42f33ba86d561b7a89fca67c700b9486a06d0e2"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e0f754d27fddcfd74006455b6e04e6705d6c31a612ec69ddc040a5468e44b4e"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d57c3fd55d9058645d26ae37d76e61156a27722097229d32a9e73ed54819982a"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71f14375d6f73b62800530b581aed3ada394039877818b2d5f7fc77e3bb6894d"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441cc2f8869a4f0f4bb408475e5ae0ee1f3b55b33f350406150277f7f35384fc"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:65bee1e49fa6f9cf327ce0e01c4c10f39165ee76d35c846ade7cb0ec6683e303"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af335bac6b666cc6aea16f11d486c3b794029d9df029967f9938a4bed59b6a19"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cfec476887aa231b8548ece2e06d28edc87c1397ebd83922299af2e051cf2827"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65c07febd1936d63bfde78948b76cd4c2a411572a44ac50719ead41947d0f26b"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win32.whl", hash = "sha256:4dfb4be774c4436a4526d0c554af0cc2e02082c38303852a36f6456ece7b3503"}, - {file = "psycopg2_binary-2.9.6-cp38-cp38-win_amd64.whl", hash = "sha256:02c6e3cf3439e213e4ee930308dc122d6fb4d4bea9aef4a12535fbd605d1a2fe"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9182eb20f41417ea1dd8e8f7888c4d7c6e805f8a7c98c1081778a3da2bee3e4"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8a6979cf527e2603d349a91060f428bcb135aea2be3201dff794813256c274f1"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8338a271cb71d8da40b023a35d9c1e919eba6cbd8fa20a54b748a332c355d896"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ed340d2b858d6e6fb5083f87c09996506af483227735de6964a6100b4e6a54"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f81e65376e52f03422e1fb475c9514185669943798ed019ac50410fb4c4df232"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfb13af3c5dd3a9588000910178de17010ebcccd37b4f9794b00595e3a8ddad3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4c727b597c6444a16e9119386b59388f8a424223302d0c06c676ec8b4bc1f963"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d67fbdaf177da06374473ef6f7ed8cc0a9dc640b01abfe9e8a2ccb1b1402c1f"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0892ef645c2fabb0c75ec32d79f4252542d0caec1d5d949630e7d242ca4681a3"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:02c0f3757a4300cf379eb49f543fb7ac527fb00144d39246ee40e1df684ab514"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win32.whl", hash = "sha256:c3dba7dab16709a33a847e5cd756767271697041fbe3fe97c215b1fc1f5c9848"}, - {file = "psycopg2_binary-2.9.6-cp39-cp39-win_amd64.whl", hash = "sha256:f6a88f384335bb27812293fdb11ac6aee2ca3f51d3c7820fe03de0a304ab6249"}, + {file = "psycopg2-binary-2.9.7.tar.gz", hash = "sha256:1b918f64a51ffe19cd2e230b3240ba481330ce1d4b7875ae67305bd1d37b041c"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea5f8ee87f1eddc818fc04649d952c526db4426d26bab16efbe5a0c52b27d6ab"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2993ccb2b7e80844d534e55e0f12534c2871952f78e0da33c35e648bf002bbff"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbbc3c5d15ed76b0d9db7753c0db40899136ecfe97d50cbde918f630c5eb857a"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:692df8763b71d42eb8343f54091368f6f6c9cfc56dc391858cdb3c3ef1e3e584"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcfd5d37e027ec393a303cc0a216be564b96c80ba532f3d1e0d2b5e5e4b1e6e"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cc17a70dfb295a240db7f65b6d8153c3d81efb145d76da1e4a096e9c5c0e63"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e5666632ba2b0d9757b38fc17337d84bdf932d38563c5234f5f8c54fd01349c9"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7db7b9b701974c96a88997d458b38ccb110eba8f805d4b4f74944aac48639b42"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c82986635a16fb1fa15cd5436035c88bc65c3d5ced1cfaac7f357ee9e9deddd4"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fe13712357d802080cfccbf8c6266a3121dc0e27e2144819029095ccf708372"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-win32.whl", hash = "sha256:122641b7fab18ef76b18860dd0c772290566b6fb30cc08e923ad73d17461dc63"}, + {file = "psycopg2_binary-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:f8651cf1f144f9ee0fa7d1a1df61a9184ab72962531ca99f077bbdcba3947c58"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ecc15666f16f97709106d87284c136cdc82647e1c3f8392a672616aed3c7151"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fbb1184c7e9d28d67671992970718c05af5f77fc88e26fd7136613c4ece1f89"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7968fd20bd550431837656872c19575b687f3f6f98120046228e451e4064df"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:094af2e77a1976efd4956a031028774b827029729725e136514aae3cdf49b87b"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26484e913d472ecb6b45937ea55ce29c57c662066d222fb0fbdc1fab457f18c5"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f309b77a7c716e6ed9891b9b42953c3ff7d533dc548c1e33fddc73d2f5e21f9"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d92e139ca388ccfe8c04aacc163756e55ba4c623c6ba13d5d1595ed97523e4b"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2df562bb2e4e00ee064779902d721223cfa9f8f58e7e52318c97d139cf7f012d"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4eec5d36dbcfc076caab61a2114c12094c0b7027d57e9e4387b634e8ab36fd44"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1011eeb0c51e5b9ea1016f0f45fa23aca63966a4c0afcf0340ccabe85a9f65bd"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-win32.whl", hash = "sha256:ded8e15f7550db9e75c60b3d9fcbc7737fea258a0f10032cdb7edc26c2a671fd"}, + {file = "psycopg2_binary-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:8a136c8aaf6615653450817a7abe0fc01e4ea720ae41dfb2823eccae4b9062a3"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2dec5a75a3a5d42b120e88e6ed3e3b37b46459202bb8e36cd67591b6e5feebc1"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc10da7e7df3380426521e8c1ed975d22df678639da2ed0ec3244c3dc2ab54c8"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee919b676da28f78f91b464fb3e12238bd7474483352a59c8a16c39dfc59f0c5"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb1c0e682138f9067a58fc3c9a9bf1c83d8e08cfbee380d858e63196466d5c86"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8db270afb76f48a499f7bb8fa70297e66da67288471ca873db88382850bf4"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b0c2b466b2f4d89ccc33784c4ebb1627989bd84a39b79092e560e937a11d4ac"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:51d1b42d44f4ffb93188f9b39e6d1c82aa758fdb8d9de65e1ddfe7a7d250d7ad"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:11abdbfc6f7f7dea4a524b5f4117369b0d757725798f1593796be6ece20266cb"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f02f4a72cc3ab2565c6d9720f0343cb840fb2dc01a2e9ecb8bc58ccf95dc5c06"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:81d5dd2dd9ab78d31a451e357315f201d976c131ca7d43870a0e8063b6b7a1ec"}, + {file = "psycopg2_binary-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:62cb6de84d7767164a87ca97e22e5e0a134856ebcb08f21b621c6125baf61f16"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59f7e9109a59dfa31efa022e94a244736ae401526682de504e87bd11ce870c22"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95a7a747bdc3b010bb6a980f053233e7610276d55f3ca506afff4ad7749ab58a"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c721ee464e45ecf609ff8c0a555018764974114f671815a0a7152aedb9f3343"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4f37bbc6588d402980ffbd1f3338c871368fb4b1cfa091debe13c68bb3852b3"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac83ab05e25354dad798401babaa6daa9577462136ba215694865394840e31f8"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:024eaeb2a08c9a65cd5f94b31ace1ee3bb3f978cd4d079406aef85169ba01f08"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1c31c2606ac500dbd26381145684d87730a2fac9a62ebcfbaa2b119f8d6c19f4"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:42a62ef0e5abb55bf6ffb050eb2b0fcd767261fa3faf943a4267539168807522"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7952807f95c8eba6a8ccb14e00bf170bb700cafcec3924d565235dffc7dc4ae8"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e02bc4f2966475a7393bd0f098e1165d470d3fa816264054359ed4f10f6914ea"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-win32.whl", hash = "sha256:fdca0511458d26cf39b827a663d7d87db6f32b93efc22442a742035728603d5f"}, + {file = "psycopg2_binary-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:d0b16e5bb0ab78583f0ed7ab16378a0f8a89a27256bb5560402749dbe8a164d7"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6822c9c63308d650db201ba22fe6648bd6786ca6d14fdaf273b17e15608d0852"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f94cb12150d57ea433e3e02aabd072205648e86f1d5a0a692d60242f7809b15"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5ee89587696d808c9a00876065d725d4ae606f5f7853b961cdbc348b0f7c9a1"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad5ec10b53cbb57e9a2e77b67e4e4368df56b54d6b00cc86398578f1c635f329"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:642df77484b2dcaf87d4237792246d8068653f9e0f5c025e2c692fc56b0dda70"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a8b575ac45af1eaccbbcdcf710ab984fd50af048fe130672377f78aaff6fc1"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f955aa50d7d5220fcb6e38f69ea126eafecd812d96aeed5d5f3597f33fad43bb"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad26d4eeaa0d722b25814cce97335ecf1b707630258f14ac4d2ed3d1d8415265"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ced63c054bdaf0298f62681d5dcae3afe60cbae332390bfb1acf0e23dcd25fc8"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b04da24cbde33292ad34a40db9832a80ad12de26486ffeda883413c9e1b1d5e"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-win32.whl", hash = "sha256:18f12632ab516c47c1ac4841a78fddea6508a8284c7cf0f292cb1a523f2e2379"}, + {file = "psycopg2_binary-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb3b8d55924a6058a26db69fb1d3e7e32695ff8b491835ba9f479537e14dcf9f"}, ] [[package]] @@ -6462,13 +6578,13 @@ typing-extensions = "*" [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -6476,13 +6592,13 @@ plugins = ["importlib-metadata"] [[package]] name = "pyjwt" -version = "2.7.0" +version = "2.8.0" description = "JSON Web Token implementation in Python" optional = true python-versions = ">=3.7" files = [ - {file = "PyJWT-2.7.0-py3-none-any.whl", hash = "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1"}, - {file = "PyJWT-2.7.0.tar.gz", hash = "sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074"}, + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, ] [package.dependencies] @@ -6496,106 +6612,113 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylance" -version = "0.4.21" +version = "0.5.10" description = "python wrapper for lance-rs" optional = true python-versions = ">=3.8" files = [ - {file = "pylance-0.4.21-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:639a9a8312a7d1edecb930ad4c6894ec2fa0fb7b7f1fc50f305e3b050d635599"}, - {file = "pylance-0.4.21-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:8752f45c8a5b269f1622a20ef87aa0e653cdf8c212caa92be327cf3c63e811ba"}, - {file = "pylance-0.4.21-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a901a1bdf3b11d1e5d299de4aea0a054169fe3a371306996ee188b9696a7c3b"}, - {file = "pylance-0.4.21-cp38-abi3-win_amd64.whl", hash = "sha256:bf1be8bbf5021cdbcea68e5529541bdfbc161d825dde55031a1c7e15d037128d"}, + {file = "pylance-0.5.10-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:ca5b649fe3adfacaec7680c708fc3a952f6d8b43fd193afdfc5f3e8e13c47b82"}, + {file = "pylance-0.5.10-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a5b47ca4cf91709f0f7cd9f9604c6c9c6efc031f38035c27a7d0a21d9b83f507"}, + {file = "pylance-0.5.10-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ffa28a110345a6ce191285171b70a13696aa92cb4c1d6318d5444df65ab8025"}, + {file = "pylance-0.5.10-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0244faa5b039d6bb0e00d8f27222542c0e86bbf9128b6d8db9e5072ec0ea19"}, + {file = "pylance-0.5.10-cp38-abi3-win_amd64.whl", hash = "sha256:92727d6a8f383f16a8e5503d41e2212881fe829b493f6f6aec202c2c7dce7d65"}, ] [package.dependencies] numpy = ">=1.22" -pandas = ">=1.4" pyarrow = ">=10" [package.extras] -tests = ["duckdb", "polars[pandas,pyarrow]", "pytest"] +tests = ["duckdb", "ml_dtypes", "pandas (>=1.4)", "polars[pandas,pyarrow]", "pytest", "tensorflow"] [[package]] name = "pymongo" -version = "4.3.3" +version = "4.5.0" description = "Python driver for MongoDB " optional = true python-versions = ">=3.7" files = [ - {file = "pymongo-4.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:74731c9e423c93cbe791f60c27030b6af6a948cef67deca079da6cd1bb583a8e"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux1_i686.whl", hash = "sha256:66413c50d510e5bcb0afc79880d1693a2185bcea003600ed898ada31338c004e"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9b87b23570565a6ddaa9244d87811c2ee9cffb02a753c8a2da9c077283d85845"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_i686.whl", hash = "sha256:695939036a320f4329ccf1627edefbbb67cc7892b8222d297b0dd2313742bfee"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:ffcc8394123ea8d43fff8e5d000095fe7741ce3f8988366c5c919c4f5eb179d3"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_s390x.whl", hash = "sha256:943f208840777f34312c103a2d1caab02d780c4e9be26b3714acf6c4715ba7e1"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:01f7cbe88d22440b6594c955e37312d932fd632ffed1a86d0c361503ca82cc9d"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdb87309de97c63cb9a69132e1cb16be470e58cffdfbad68fdd1dc292b22a840"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d86c35d94b5499689354ccbc48438a79f449481ee6300f3e905748edceed78e7"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a966d5304b7d90c45c404914e06bbf02c5bf7e99685c6c12f0047ef2aa837142"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be1d2ce7e269215c3ee9a215e296b7a744aff4f39233486d2c4d77f5f0c561a6"}, - {file = "pymongo-4.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b6163dac53ef1e5d834297810c178050bd0548a4136cd4e0f56402185916ca"}, - {file = "pymongo-4.3.3-cp310-cp310-win32.whl", hash = "sha256:dc0cff74cd36d7e1edba91baa09622c35a8a57025f2f2b7a41e3f83b1db73186"}, - {file = "pymongo-4.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:cafa52873ae12baa512a8721afc20de67a36886baae6a5f394ddef0ce9391f91"}, - {file = "pymongo-4.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:599d3f6fbef31933b96e2d906b0f169b3371ff79ea6aaf6ecd76c947a3508a3d"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0640b4e9d008e13956b004d1971a23377b3d45491f87082161c92efb1e6c0d6"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:341221e2f2866a5960e6f8610f4cbac0bb13097f3b1a289aa55aba984fc0d969"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7fac06a539daef4fcf5d8288d0d21b412f9b750454cd5a3cf90484665db442a"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a51901066696c4af38c6c63a1f0aeffd5e282367ff475de8c191ec9609b56d"}, - {file = "pymongo-4.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3055510fdfdb1775bc8baa359783022f70bb553f2d46e153c094dfcb08578ff"}, - {file = "pymongo-4.3.3-cp311-cp311-win32.whl", hash = "sha256:524d78673518dcd352a91541ecd2839c65af92dc883321c2109ef6e5cd22ef23"}, - {file = "pymongo-4.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:b8a03af1ce79b902a43f5f694c4ca8d92c2a4195db0966f08f266549e2fc49bc"}, - {file = "pymongo-4.3.3-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:39b03045c71f761aee96a12ebfbc2f4be89e724ff6f5e31c2574c1a0e2add8bd"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6fcfbf435eebf8a1765c6d1f46821740ebe9f54f815a05c8fc30d789ef43cb12"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7d43ac9c7eeda5100fb0a7152fab7099c9cf9e5abd3bb36928eb98c7d7a339c6"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3b93043b14ba7eb08c57afca19751658ece1cfa2f0b7b1fb5c7a41452fbb8482"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c09956606c08c4a7c6178a04ba2dd9388fcc5db32002ade9c9bc865ab156ab6d"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:b0cfe925610f2fd59555bb7fc37bd739e4b197d33f2a8b2fae7b9c0c6640318c"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:4d00b91c77ceb064c9b0459f0d6ea5bfdbc53ea9e17cf75731e151ef25a830c7"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:c6258a3663780ae47ba73d43eb63c79c40ffddfb764e09b56df33be2f9479837"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e758f0e734e1e90357ae01ec9c6daf19ff60a051192fe110d8fb25c62600e"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f3621a46cdc7a9ba8080422262398a91762a581d27e0647746588d3f995c88"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47f7aa217b25833cd6f0e72b0d224be55393c2692b4f5e0561cb3beeb10296e9"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c2fdc855149efe7cdcc2a01ca02bfa24761c640203ea94df467f3baf19078be"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5effd87c7d363890259eac16c56a4e8da307286012c076223997f8cc4a8c435b"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6dd1cf2995fdbd64fc0802313e8323f5fa18994d51af059b5b8862b73b5e53f0"}, - {file = "pymongo-4.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bb869707d8e30645ed6766e44098600ca6cdf7989c22a3ea2b7966bb1d98d4b2"}, - {file = "pymongo-4.3.3-cp37-cp37m-win32.whl", hash = "sha256:49210feb0be8051a64d71691f0acbfbedc33e149f0a5d6e271fddf6a12493fed"}, - {file = "pymongo-4.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:54c377893f2cbbffe39abcff5ff2e917b082c364521fa079305f6f064e1a24a9"}, - {file = "pymongo-4.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c184ec5be465c0319440734491e1aa4709b5f3ba75fdfc9dbbc2ae715a7f6829"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:dca34367a4e77fcab0693e603a959878eaf2351585e7d752cac544bc6b2dee46"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd6a4afb20fb3c26a7bfd4611a0bbb24d93cbd746f5eb881f114b5e38fd55501"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0c466710871d0026c190fc4141e810cf9d9affbf4935e1d273fbdc7d7cda6143"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:d07d06dba5b5f7d80f9cc45501456e440f759fe79f9895922ed486237ac378a8"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:711bc52cb98e7892c03e9b669bebd89c0a890a90dbc6d5bb2c47f30239bac6e9"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:34b040e095e1671df0c095ec0b04fc4ebb19c4c160f87c2b55c079b16b1a6b00"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4ed00f96e147f40b565fe7530d1da0b0f3ab803d5dd5b683834500fa5d195ec4"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef888f48eb9203ee1e04b9fb27429017b290fb916f1e7826c2f7808c88798394"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:316498b642c00401370b2156b5233b256f9b33799e0a8d9d0b8a7da217a20fca"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa7e202feb683dad74f00dea066690448d0cfa310f8a277db06ec8eb466601b5"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52896e22115c97f1c829db32aa2760b0d61839cfe08b168c2b1d82f31dbc5f55"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c051fe37c96b9878f37fa58906cb53ecd13dcb7341d3a85f1e2e2f6b10782d9"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5134d33286c045393c7beb51be29754647cec5ebc051cf82799c5ce9820a2ca2"}, - {file = "pymongo-4.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a9c2885b4a8e6e39db5662d8b02ca6dcec796a45e48c2de12552841f061692ba"}, - {file = "pymongo-4.3.3-cp38-cp38-win32.whl", hash = "sha256:a6cd6f1db75eb07332bd3710f58f5fce4967eadbf751bad653842750a61bda62"}, - {file = "pymongo-4.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:d5571b6978750601f783cea07fb6b666837010ca57e5cefa389c1d456f6222e2"}, - {file = "pymongo-4.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:81d1a7303bd02ca1c5be4aacd4db73593f573ba8e0c543c04c6da6275fd7a47e"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:016c412118e1c23fef3a1eada4f83ae6e8844fd91986b2e066fc1b0013cdd9ae"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:8fd6e191b92a10310f5a6cfe10d6f839d79d192fb02480bda325286bd1c7b385"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e2961b05f9c04a53da8bfc72f1910b6aec7205fcf3ac9c036d24619979bbee4b"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:b38a96b3eed8edc515b38257f03216f382c4389d022a8834667e2bc63c0c0c31"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:c1a70c51da9fa95bd75c167edb2eb3f3c4d27bc4ddd29e588f21649d014ec0b7"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8a06a0c02f5606330e8f2e2f3b7949877ca7e4024fa2bff5a4506bec66c49ec7"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6c2216d8b6a6d019c6f4b1ad55f890e5e77eb089309ffc05b6911c09349e7474"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eac0a143ef4f28f49670bf89cb15847eb80b375d55eba401ca2f777cd425f338"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08fc250b5552ee97ceeae0f52d8b04f360291285fc7437f13daa516ce38fdbc6"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704d939656e21b073bfcddd7228b29e0e8a93dd27b54240eaafc0b9a631629a6"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1074f1a6f23e28b983c96142f2d45be03ec55d93035b471c26889a7ad2365db3"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b16250238de8dafca225647608dddc7bbb5dce3dd53b4d8e63c1cc287394c2f"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7761cacb8745093062695b11574effea69db636c2fd0a9269a1f0183712927b4"}, - {file = "pymongo-4.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd7bb378d82b88387dc10227cfd964f6273eb083e05299e9b97cbe075da12d11"}, - {file = "pymongo-4.3.3-cp39-cp39-win32.whl", hash = "sha256:dc24d245026a72d9b4953729d31813edd4bd4e5c13622d96e27c284942d33f24"}, - {file = "pymongo-4.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:fc28e8d85d392a06434e9a934908d97e2cf453d69488d2bcd0bfb881497fd975"}, - {file = "pymongo-4.3.3.tar.gz", hash = "sha256:34e95ffb0a68bffbc3b437f2d1f25fc916fef3df5cdeed0992da5f42fae9b807"}, + {file = "pymongo-4.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d4fa1b01fa7e5b7bb8d312e3542e211b320eb7a4e3d8dc884327039d93cb9e0"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux1_i686.whl", hash = "sha256:dfcd2b9f510411de615ccedd47462dae80e82fdc09fe9ab0f0f32f11cf57eeb5"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:3e33064f1984db412b34d51496f4ea785a9cff621c67de58e09fb28da6468a52"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux2014_i686.whl", hash = "sha256:33faa786cc907de63f745f587e9879429b46033d7d97a7b84b37f4f8f47b9b32"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:76a262c41c1a7cbb84a3b11976578a7eb8e788c4b7bfbd15c005fb6ca88e6e50"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux2014_s390x.whl", hash = "sha256:0f4b125b46fe377984fbaecf2af40ed48b05a4b7676a2ff98999f2016d66b3ec"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:40d5f6e853ece9bfc01e9129b228df446f49316a4252bb1fbfae5c3c9dedebad"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:152259f0f1a60f560323aacf463a3642a65a25557683f49cfa08c8f1ecb2395a"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d64878d1659d2a5bdfd0f0a4d79bafe68653c573681495e424ab40d7b6d6d41"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1bb3a62395ffe835dbef3a1cbff48fbcce709c78bd1f52e896aee990928432b"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe48f50fb6348511a3268a893bfd4ab5f263f5ac220782449d03cd05964d1ae7"}, + {file = "pymongo-4.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7591a3beea6a9a4fa3080d27d193b41f631130e3ffa76b88c9ccea123f26dc59"}, + {file = "pymongo-4.5.0-cp310-cp310-win32.whl", hash = "sha256:3a7166d57dc74d679caa7743b8ecf7dc3a1235a9fd178654dddb2b2a627ae229"}, + {file = "pymongo-4.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:21b953da14549ff62ea4ae20889c71564328958cbdf880c64a92a48dda4c9c53"}, + {file = "pymongo-4.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ead4f19d0257a756b21ac2e0e85a37a7245ddec36d3b6008d5bfe416525967dc"}, + {file = "pymongo-4.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9aff6279e405dc953eeb540ab061e72c03cf38119613fce183a8e94f31be608f"}, + {file = "pymongo-4.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4c8d6aa91d3e35016847cbe8d73106e3d1c9a4e6578d38e2c346bfe8edb3ca"}, + {file = "pymongo-4.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08819da7864f9b8d4a95729b2bea5fffed08b63d3b9c15b4fea47de655766cf5"}, + {file = "pymongo-4.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a253b765b7cbc4209f1d8ee16c7287c4268d3243070bf72d7eec5aa9dfe2a2c2"}, + {file = "pymongo-4.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8027c9063579083746147cf401a7072a9fb6829678076cd3deff28bb0e0f50c8"}, + {file = "pymongo-4.5.0-cp311-cp311-win32.whl", hash = "sha256:9d2346b00af524757576cc2406414562cced1d4349c92166a0ee377a2a483a80"}, + {file = "pymongo-4.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:c3c3525ea8658ee1192cdddf5faf99b07ebe1eeaa61bf32821126df6d1b8072b"}, + {file = "pymongo-4.5.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e5a27f348909235a106a3903fc8e70f573d89b41d723a500869c6569a391cff7"}, + {file = "pymongo-4.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9a9a39b7cac81dca79fca8c2a6479ef4c7b1aab95fad7544cc0e8fd943595a2"}, + {file = "pymongo-4.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:496c9cbcb4951183d4503a9d7d2c1e3694aab1304262f831d5e1917e60386036"}, + {file = "pymongo-4.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23cc6d7eb009c688d70da186b8f362d61d5dd1a2c14a45b890bd1e91e9c451f2"}, + {file = "pymongo-4.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fff7d17d30b2cd45afd654b3fc117755c5d84506ed25fda386494e4e0a3416e1"}, + {file = "pymongo-4.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6422b6763b016f2ef2beedded0e546d6aa6ba87910f9244d86e0ac7690f75c96"}, + {file = "pymongo-4.5.0-cp312-cp312-win32.whl", hash = "sha256:77cfff95c1fafd09e940b3fdcb7b65f11442662fad611d0e69b4dd5d17a81c60"}, + {file = "pymongo-4.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:e57d859b972c75ee44ea2ef4758f12821243e99de814030f69a3decb2aa86807"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2b0176f9233a5927084c79ff80b51bd70bfd57e4f3d564f50f80238e797f0c8a"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:89b3f2da57a27913d15d2a07d58482f33d0a5b28abd20b8e643ab4d625e36257"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:5caee7bd08c3d36ec54617832b44985bd70c4cbd77c5b313de6f7fce0bb34f93"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:1d40ad09d9f5e719bc6f729cc6b17f31c0b055029719406bd31dde2f72fca7e7"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:076afa0a4a96ca9f77fec0e4a0d241200b3b3a1766f8d7be9a905ecf59a7416b"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:3fa3648e4f1e63ddfe53563ee111079ea3ab35c3b09cd25bc22dadc8269a495f"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:44ee985194c426ddf781fa784f31ffa29cb59657b2dba09250a4245431847d73"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b33c17d9e694b66d7e96977e9e56df19d662031483efe121a24772a44ccbbc7e"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d79ae3bb1ff041c0db56f138c88ce1dfb0209f3546d8d6e7c3f74944ecd2439"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d67225f05f6ea27c8dc57f3fa6397c96d09c42af69d46629f71e82e66d33fa4f"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41771b22dd2822540f79a877c391283d4e6368125999a5ec8beee1ce566f3f82"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a1f26bc1f5ce774d99725773901820dfdfd24e875028da4a0252a5b48dcab5c"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3236cf89d69679eaeb9119c840f5c7eb388a2110b57af6bb6baf01a1da387c18"}, + {file = "pymongo-4.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e1f61355c821e870fb4c17cdb318669cfbcf245a291ce5053b41140870c3e5cc"}, + {file = "pymongo-4.5.0-cp37-cp37m-win32.whl", hash = "sha256:49dce6957598975d8b8d506329d2a3a6c4aee911fa4bbcf5e52ffc6897122950"}, + {file = "pymongo-4.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2227a08b091bd41df5aadee0a5037673f691e2aa000e1968b1ea2342afc6880"}, + {file = "pymongo-4.5.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:435228d3c16a375274ac8ab9c4f9aef40c5e57ddb8296e20ecec9e2461da1017"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:8e559116e4128630ad3b7e788e2e5da81cbc2344dee246af44471fa650486a70"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:840eaf30ccac122df260b6005f9dfae4ac287c498ee91e3e90c56781614ca238"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:b4fe46b58010115514b842c669a0ed9b6a342017b15905653a5b1724ab80917f"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:a8127437ebc196a6f5e8fddd746bd0903a400dc6b5ae35df672dd1ccc7170a2a"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:2988ef5e6b360b3ff1c6d55c53515499de5f48df31afd9f785d788cdacfbe2d3"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e249190b018d63c901678053b4a43e797ca78b93fb6d17633e3567d4b3ec6107"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:1240edc1a448d4ada4bf1a0e55550b6292420915292408e59159fd8bbdaf8f63"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6d2a56fc2354bb6378f3634402eec788a8f3facf0b3e7d468db5f2b5a78d763"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a0aade2b11dc0c326ccd429ee4134d2d47459ff68d449c6d7e01e74651bd255"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74c0da07c04d0781490b2915e7514b1adb265ef22af039a947988c331ee7455b"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3754acbd7efc7f1b529039fcffc092a15e1cf045e31f22f6c9c5950c613ec4d"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:631492573a1bef2f74f9ac0f9d84e0ce422c251644cd81207530af4aa2ee1980"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e2654d1278384cff75952682d17c718ecc1ad1d6227bb0068fd826ba47d426a5"}, + {file = "pymongo-4.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:168172ef7856e20ec024fe2a746bfa895c88b32720138e6438fd765ebd2b62dd"}, + {file = "pymongo-4.5.0-cp38-cp38-win32.whl", hash = "sha256:b25f7bea162b3dbec6d33c522097ef81df7c19a9300722fa6853f5b495aecb77"}, + {file = "pymongo-4.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:b520aafc6cb148bac09ccf532f52cbd31d83acf4d3e5070d84efe3c019a1adbf"}, + {file = "pymongo-4.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8543253adfaa0b802bfa88386db1009c6ebb7d5684d093ee4edc725007553d21"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:bc5d8c3647b8ae28e4312f1492b8f29deebd31479cd3abaa989090fb1d66db83"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:505f8519c4c782a61d94a17b0da50be639ec462128fbd10ab0a34889218fdee3"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:53f2dda54d76a98b43a410498bd12f6034b2a14b6844ca08513733b2b20b7ad8"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:9c04b9560872fa9a91251030c488e0a73bce9321a70f991f830c72b3f8115d0d"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:58a63a26a1e3dc481dd3a18d6d9f8bd1d576cd1ffe0d479ba7dd38b0aeb20066"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:f076b779aa3dc179aa3ed861be063a313ed4e48ae9f6a8370a9b1295d4502111"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:1b1d7d9aabd8629a31d63cd106d56cca0e6420f38e50563278b520f385c0d86e"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37df8f6006286a5896d1cbc3efb8471ced42e3568d38e6cb00857277047b0d63"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56320c401f544d762fc35766936178fbceb1d9261cd7b24fbfbc8fb6f67aa8a5"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbd705d5f3c3d1ff2d169e418bb789ff07ab3c70d567cc6ba6b72b04b9143481"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80a167081c75cf66b32f30e2f1eaee9365af935a86dbd76788169911bed9b5d5"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c42748ccc451dfcd9cef6c5447a7ab727351fd9747ad431db5ebb18a9b78a4d"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf62da7a4cdec9a4b2981fcbd5e08053edffccf20e845c0b6ec1e77eb7fab61d"}, + {file = "pymongo-4.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b5bbb87fa0511bd313d9a2c90294c88db837667c2bda2ea3fa7a35b59fd93b1f"}, + {file = "pymongo-4.5.0-cp39-cp39-win32.whl", hash = "sha256:465fd5b040206f8bce7016b01d7e7f79d2fcd7c2b8e41791be9632a9df1b4999"}, + {file = "pymongo-4.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:63d8019eee119df308a075b8a7bdb06d4720bf791e2b73d5ab0e7473c115d79c"}, + {file = "pymongo-4.5.0.tar.gz", hash = "sha256:681f252e43b3ef054ca9161635f81b730f4d8cadd28b3f2b2004f5a72f853982"}, ] [package.dependencies] @@ -6603,9 +6726,9 @@ dnspython = ">=1.16.0,<3.0.0" [package.extras] aws = ["pymongo-auth-aws (<2.0.0)"] -encryption = ["pymongo-auth-aws (<2.0.0)", "pymongocrypt (>=1.3.0,<2.0.0)"] -gssapi = ["pykerberos"] -ocsp = ["certifi", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] +encryption = ["certifi", "pymongo[aws]", "pymongocrypt (>=1.6.0,<2.0.0)"] +gssapi = ["pykerberos", "winkerberos (>=0.5.0)"] +ocsp = ["certifi", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] snappy = ["python-snappy"] zstd = ["zstandard"] @@ -6622,41 +6745,41 @@ files = [ [[package]] name = "pymupdf" -version = "1.22.3" +version = "1.22.5" description = "Python bindings for the PDF toolkit and renderer MuPDF" optional = true python-versions = ">=3.7" files = [ - {file = "PyMuPDF-1.22.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0aff7ba35eb2cc285efea87500dd5ee0aaf94f4bb23a79187f0a74101aba7964"}, - {file = "PyMuPDF-1.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:13e90a5301990dafc5bba6bfa32aafca1f35809497c274c9d4af4f4bac2d8870"}, - {file = "PyMuPDF-1.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201c7aecf9530c3a5aa33cd3d6b68e36492ff9ac48cb270d8f18e66654744419"}, - {file = "PyMuPDF-1.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbffc6cabb0cb20033870bde954bbed1436cf9fce33a14682e283bc893767250"}, - {file = "PyMuPDF-1.22.3-cp310-cp310-win32.whl", hash = "sha256:e344632215882b49fd2e28ffb848f55b1b34db6b5389917e4865b4d779cbdb4a"}, - {file = "PyMuPDF-1.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d9bccfb29cbe3962a858c200376d54e7ba64d6f64c0b972ed5b68ff20157b06"}, - {file = "PyMuPDF-1.22.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01daa4e3c2c1b93d357ba0d747d713ad40e0123b9bdca2395bf166f62dd8f703"}, - {file = "PyMuPDF-1.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46c7fab408ae4d55c4181f95a76bc4f365f5ead3291f67274d6fe90f1b90c479"}, - {file = "PyMuPDF-1.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a58af441ce454f33f75a4c93a5f76e4659f2c7c849036180f24ab4b84d9e512f"}, - {file = "PyMuPDF-1.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eddb0975ddd0bcf39812616b5675c26d740f83b12a39c3b5c4425f02c3da754"}, - {file = "PyMuPDF-1.22.3-cp311-cp311-win32.whl", hash = "sha256:ed4a624ffc9bebe5c67fc80e16798300d404089585bcdac14448034bd38c5072"}, - {file = "PyMuPDF-1.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:4d2422dffdb4f1c2c8128e6d151f4de5e722388df276ac165572ad5290ad228a"}, - {file = "PyMuPDF-1.22.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:48ece127e202470209dc63ad8fa85f3e19ce302f5af02d38c7fc0b5798b9bfa6"}, - {file = "PyMuPDF-1.22.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f00097e8d2bc46dacdb776aeb810b1c760949f6353abdf6d12e8aefdc95dd35"}, - {file = "PyMuPDF-1.22.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5932564a713bd7d576418070c3dd926cb5800edb4411f48813f7694af7386d3e"}, - {file = "PyMuPDF-1.22.3-cp37-cp37m-win32.whl", hash = "sha256:d4f38ecb9518ba2dc12f5f35f33c64ec5466faf20b833f4ac21a2a4190ffef93"}, - {file = "PyMuPDF-1.22.3-cp37-cp37m-win_amd64.whl", hash = "sha256:90950b328603a83b26c2eb2af0cf5498582fbbab84e86074bbb0ae44d745e2a3"}, - {file = "PyMuPDF-1.22.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a2040351a1279fafa1db82e5af50a785eb01dc4e1adb3c98e0abfd6e0a4995f"}, - {file = "PyMuPDF-1.22.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a67f2b12120ce9fe5c3f7cb192643134af2c4e28773a2cd5d56cbe1cae66d1b9"}, - {file = "PyMuPDF-1.22.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e0904c9bffdfbb527f4fe293986d74477780f0c98f59fa5b42a95e3e441e1f4"}, - {file = "PyMuPDF-1.22.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aaf3352d9c443ad7622e70b0ff9124079b09c16a1a1aa3f3dde9ba0e19f32a2"}, - {file = "PyMuPDF-1.22.3-cp38-cp38-win32.whl", hash = "sha256:4c037d5752efd562ac72e74295dfcc8d8dd406c0f6849054b29d2cbc32237ae0"}, - {file = "PyMuPDF-1.22.3-cp38-cp38-win_amd64.whl", hash = "sha256:be0803be2709285f17c932ee11d4b7f6d11d3e74e1888094e6310c55e9543673"}, - {file = "PyMuPDF-1.22.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa934c1a02f1f3bb04e447b95ef5b19d03cb2575fee76d23cb7a6d0c526444e2"}, - {file = "PyMuPDF-1.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:932747941ed4973410244376ba77693253e4387e8e09cf2458bc9133348fc16e"}, - {file = "PyMuPDF-1.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4ea7b016c4561004b48143b8879e1d888e5ba3a1440e6558ea9a47f0d2e6f65"}, - {file = "PyMuPDF-1.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf275e5dbf332554f98b469899e5a0928b91cb574a5319aeecf1b7e8075cf4b7"}, - {file = "PyMuPDF-1.22.3-cp39-cp39-win32.whl", hash = "sha256:07d171255964f5a382e280a95a3148c08fc4ec20bf7907e040cf423cf29afe30"}, - {file = "PyMuPDF-1.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:60db199553fc9c88cb9f2afba35f9cd54c042e7a6ea2b151ddcc542e6e75ac61"}, - {file = "PyMuPDF-1.22.3.tar.gz", hash = "sha256:5ecd928e96e63092571020973aa145b57b75707f3a3df97c742e563112615891"}, + {file = "PyMuPDF-1.22.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:640b8e4cb116dd87a3c854e49808a4f63625e663a7bc5b1efc971db5b4775367"}, + {file = "PyMuPDF-1.22.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:17efbbf0e2d99d24cfc302fac512928eb294f10b7b67d597d04dafd012812e4e"}, + {file = "PyMuPDF-1.22.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bc9b9bf0f2beea3911750d2d66247608be8cbad33b7a050cacec9e4c105a1ca"}, + {file = "PyMuPDF-1.22.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7734a32a91eea4b502b8f9d2915cdba0a372226e14fb983876d763110dcefef"}, + {file = "PyMuPDF-1.22.5-cp310-cp310-win32.whl", hash = "sha256:c2fd70ca9961f7871810dce1b7d0a42a69eb8ff2d786621123952bd505a6867e"}, + {file = "PyMuPDF-1.22.5-cp310-cp310-win_amd64.whl", hash = "sha256:add310c96df6933cfb4ce3821c9c7b5c133e8aa609a4c9416e1c7af546163488"}, + {file = "PyMuPDF-1.22.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:017aaba511526facfc928e9d95d2c10d28a2821b05b9039bf422031a7da8584e"}, + {file = "PyMuPDF-1.22.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6fe5e44a14864d921fb96669a82f9635846806176f77f1d73c61feb84ebf4d84"}, + {file = "PyMuPDF-1.22.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e74d766f79e41e10c51865233042ab2cc4612ca7942812dca0603f4d0f8f73d"}, + {file = "PyMuPDF-1.22.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8175452fcc99a0af6429d8acd87682a3a70c5879d73532c7327f71ce508a35"}, + {file = "PyMuPDF-1.22.5-cp311-cp311-win32.whl", hash = "sha256:42f59f4999d7f8b35c850050bd965e98c081a7d9b92d5f9dcf30203b30d06876"}, + {file = "PyMuPDF-1.22.5-cp311-cp311-win_amd64.whl", hash = "sha256:3d71c47aa14b73f2df7d03be8c547a05df6c6898d8c63a0f752b26f206eefd3c"}, + {file = "PyMuPDF-1.22.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4bcad7ea4b3ab82c46fe8da27ec738d38c213ed9935ef67d98ed09574d9a234e"}, + {file = "PyMuPDF-1.22.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b04a83ddcb3f7c935c75a1f7f6050c85fe4062a2ea64c47ee6bda788d037761"}, + {file = "PyMuPDF-1.22.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d02ee28663077f15d529b04d27588b174fa937daf73a294df279bbf70c468f5c"}, + {file = "PyMuPDF-1.22.5-cp37-cp37m-win32.whl", hash = "sha256:411fc35f6dae16ec940b6b0406e84be6ff29f93b30908ea1427e2a4bd594d4ba"}, + {file = "PyMuPDF-1.22.5-cp37-cp37m-win_amd64.whl", hash = "sha256:7c8c0f686865e330de90b93d53b100f7f07c2f10f5449ceb721121f459f7cc4a"}, + {file = "PyMuPDF-1.22.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:64ae9f81b8fe0a3e6386a24887a92736793479c5918ecac3b7deac2d02abf1f2"}, + {file = "PyMuPDF-1.22.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7562436dadf8382e59ac3739fbbf9d5b2d807fafc7f28cb884863430e0de6505"}, + {file = "PyMuPDF-1.22.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c22046e5f2cf0d72f9809a967340db1b238fefe58322896bc7c3f3d1d10b42"}, + {file = "PyMuPDF-1.22.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa601dc4116c17a6b09255b031b5a1891e3ac18b50ec536452a725a6b75db8d"}, + {file = "PyMuPDF-1.22.5-cp38-cp38-win32.whl", hash = "sha256:3d0fe749e648f5245059d5f771fb50c1a988a1d2e82268b56377b2176a9fee5d"}, + {file = "PyMuPDF-1.22.5-cp38-cp38-win_amd64.whl", hash = "sha256:4fbc5bfe6ecc53929e3fd0db9846fb7da084ddb4b1fc1063857245fa783974d9"}, + {file = "PyMuPDF-1.22.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:87b36e0797ab7fbb7ef594c7a6e0febc7ffb4101a42ea796726a8288391a3769"}, + {file = "PyMuPDF-1.22.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:01119edb7e4c3dd8c154d237b8ac927bd359eea8d31468f9a89aa308b5bca04e"}, + {file = "PyMuPDF-1.22.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fde02fcb387863873b56730f4b9f65515d87c92c12299f0f0a74b3ccdfe35062"}, + {file = "PyMuPDF-1.22.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30c55814bbf6461aef9b34cb524d1d14857d5ec6ccfbb78ecfb1d07dfc40eeb8"}, + {file = "PyMuPDF-1.22.5-cp39-cp39-win32.whl", hash = "sha256:0542178c3a399282903705a8cc298e7f33f4770605e0a9db344aff5d375bcf0b"}, + {file = "PyMuPDF-1.22.5-cp39-cp39-win_amd64.whl", hash = "sha256:f8ca46a6987e14f58ec8dfda2d2376bacd113c1fec5f58bebf90838bb4408ab9"}, + {file = "PyMuPDF-1.22.5.tar.gz", hash = "sha256:5ec8d5106752297529d0d68d46cfc4ce99914aabd99be843f1599a1842d63fe9"}, ] [[package]] @@ -6680,13 +6803,13 @@ requests = [ [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = true python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] [package.extras] @@ -6694,44 +6817,44 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pypdf" -version = "3.9.1" +version = "3.15.2" description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" optional = true python-versions = ">=3.6" files = [ - {file = "pypdf-3.9.1-py3-none-any.whl", hash = "sha256:5f4abdb4691a8d7631e7f2db09f66cfe3a388a072882d8375c6b1bdc28027c0a"}, - {file = "pypdf-3.9.1.tar.gz", hash = "sha256:c2b7fcfe25fbd04e8da600cb2700267ecee7e8781dc798cce3a4f567143a4df1"}, + {file = "pypdf-3.15.2-py3-none-any.whl", hash = "sha256:f6e598292be34187287a609c72815c1502b3dc2c997b374ba0870ce79d2e975a"}, + {file = "pypdf-3.15.2.tar.gz", hash = "sha256:cdf7d75ebb8901f3352cf9488c5f662c6de9c52e432c429d15cada67ba372fce"}, ] [package.dependencies] typing_extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] -crypto = ["PyCryptodome"] -dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "wheel"] +crypto = ["PyCryptodome", "cryptography"] +dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "pytest-timeout", "wheel"] docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] -full = ["Pillow", "PyCryptodome"] -image = ["Pillow"] +full = ["Pillow (>=8.0.0)", "PyCryptodome", "cryptography"] +image = ["Pillow (>=8.0.0)"] [[package]] name = "pypdfium2" -version = "4.15.0" +version = "4.18.0" description = "Python bindings to PDFium" optional = true python-versions = ">=3.6" files = [ - {file = "pypdfium2-4.15.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:9cc6b28a1cbbefde86782d1d32316634f9f6a111d37515800954b729835d3531"}, - {file = "pypdfium2-4.15.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:024d51840dc21bdd4660133231353504b0eeca520fcf0d5732cb774fd830c8ad"}, - {file = "pypdfium2-4.15.0-py3-none-manylinux_2_26_aarch64.whl", hash = "sha256:13896844b73a22d6890e717f4976578ec1aebaf8086860af63f20d44c553d323"}, - {file = "pypdfium2-4.15.0-py3-none-manylinux_2_26_armv7l.whl", hash = "sha256:792255c4a17394d9a95f4f88d07b13ff18f960832aaf87f7d1f181949e671915"}, - {file = "pypdfium2-4.15.0-py3-none-manylinux_2_26_i686.whl", hash = "sha256:8757c200b50e4ea61f73d4586b1a21df3ec5cf8fe851eb6ccf0efc9e96e42540"}, - {file = "pypdfium2-4.15.0-py3-none-manylinux_2_26_x86_64.whl", hash = "sha256:310ee240cb62baa5f7448efc3345121c9b002f76acfa689fea2f4554d7a1ad06"}, - {file = "pypdfium2-4.15.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:54ca35658f14d9aa0a6e9dab3543909540e02b9fb691507ac86cfcca8f864d5e"}, - {file = "pypdfium2-4.15.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:033270711de410b8cfd8ff1d3778afaade538c157726a09622a950b7e9aed782"}, - {file = "pypdfium2-4.15.0-py3-none-win32.whl", hash = "sha256:99b47d3eadc9c01af3c19760962ea6635c2222260ae3d1f8b0844b4cacdccdcb"}, - {file = "pypdfium2-4.15.0-py3-none-win_amd64.whl", hash = "sha256:1279225608650687cc2de7dd6d2c90ed313fcc948e749f434a798ea26e688d3f"}, - {file = "pypdfium2-4.15.0-py3-none-win_arm64.whl", hash = "sha256:ff9650d4a6638e43e7237d538b621a5004b87f665c4c9e3dc773a484d12ba9bb"}, - {file = "pypdfium2-4.15.0.tar.gz", hash = "sha256:1d7ea82690c5b195c065e714380f9bce11b3fdaac5acfac0508c841ef862ab60"}, + {file = "pypdfium2-4.18.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:aa682c7cd859522e61b7730190e188d5f8298077ec4ddf2c98abde8743500baf"}, + {file = "pypdfium2-4.18.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4dba0f58ab4a4a1ecc280ad6c69c2cb4dc811b168b43455db28e43e09edf780b"}, + {file = "pypdfium2-4.18.0-py3-none-manylinux_2_17_aarch64.whl", hash = "sha256:2d96d6d064126fee88c03a5f5d0b1615f5a4d5fd82e634e545b6f64ac9b1815e"}, + {file = "pypdfium2-4.18.0-py3-none-manylinux_2_17_armv7l.whl", hash = "sha256:cdb00af9b9c13369808206479bead17d2ed58f0ca2a8fef786f165bb734914e3"}, + {file = "pypdfium2-4.18.0-py3-none-manylinux_2_17_i686.whl", hash = "sha256:72659da24f028565929418a0a44e0c1671dc53b60893a0ce5e8588b454feaed8"}, + {file = "pypdfium2-4.18.0-py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:3f816600000723e1ef3a6296ed0f4404fa3f5607c62c0de2fc35ad0b3f300c17"}, + {file = "pypdfium2-4.18.0-py3-none-musllinux_1_1_i686.whl", hash = "sha256:70e1b3e50a153900722b7e80e66c358326f0aa7acf8b100f6bd1728c6cb9a88f"}, + {file = "pypdfium2-4.18.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:6d42b94f316ba5233f65946a9aae143a4b36463b316da18657a4cf415baf7d3a"}, + {file = "pypdfium2-4.18.0-py3-none-win32.whl", hash = "sha256:f3bb10fc8ccde0344fd63f618a4093eb4d19e4ffa85a5e773c98c34c291a3d2f"}, + {file = "pypdfium2-4.18.0-py3-none-win_amd64.whl", hash = "sha256:add05ec5193f573454114d42e12c10d98406623b18727e27e9dc392f975c0f05"}, + {file = "pypdfium2-4.18.0-py3-none-win_arm64.whl", hash = "sha256:9e9a1d5b8605c229ef6a173c0aa3a45a4fb507ae8ebcfe670167da14abfdf62a"}, + {file = "pypdfium2-4.18.0.tar.gz", hash = "sha256:c937121dc475942697fbb3e04ffa7b28d36afc2b76cc9aac22fbd327c6dc6d61"}, ] [[package]] @@ -6810,42 +6933,6 @@ files = [ [package.dependencies] tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - [[package]] name = "pysocks" version = "1.7.1" @@ -6860,12 +6947,12 @@ files = [ [[package]] name = "pyspark" -version = "3.4.0" +version = "3.4.1" description = "Apache Spark Python API" optional = true python-versions = ">=3.7" files = [ - {file = "pyspark-3.4.0.tar.gz", hash = "sha256:167a23e11854adb37f8602de6fcc3a4f96fd5f1e323b9bb83325f38408c5aafd"}, + {file = "pyspark-3.4.1.tar.gz", hash = "sha256:72cd66ab8cf61a75854e5a753f75bea35ee075c3a96f9de4e2a66d02ec7fc652"}, ] [package.dependencies] @@ -6895,13 +6982,13 @@ Pillow = ">=8.0.0" [[package]] name = "pytest" -version = "7.3.2" +version = "7.4.0" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.2-py3-none-any.whl", hash = "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295"}, - {file = "pytest-7.3.2.tar.gz", hash = "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -7028,13 +7115,13 @@ watchdog = ">=2.0.0" [[package]] name = "python-arango" -version = "7.5.9" +version = "7.6.0" description = "Python Driver for ArangoDB" optional = true python-versions = ">=3.8" files = [ - {file = "python-arango-7.5.9.tar.gz", hash = "sha256:c16e5b0bfa7a662015e1708f723c5c324e05a32cf98169229f01fd20200cd0db"}, - {file = "python_arango-7.5.9-py3-none-any.whl", hash = "sha256:aa8587420e7b704c646bf7791b8149674ee562ec0202ba2363100a9cb5dec00f"}, + {file = "python-arango-7.6.0.tar.gz", hash = "sha256:36c94e1ce155c507578a61245af6f30544e5946b8f8d1de33196f35cdbaee522"}, + {file = "python_arango-7.6.0-py3-none-any.whl", hash = "sha256:a92d9636a1ab6a240a206dc05703ae54f267088f7d243c1fd31f60255e5af2fa"}, ] [package.dependencies] @@ -7088,6 +7175,71 @@ files = [ {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, ] +[[package]] +name = "python-rapidjson" +version = "1.10" +description = "Python wrapper around rapidjson" +optional = true +python-versions = ">=3.6" +files = [ + {file = "python-rapidjson-1.10.tar.gz", hash = "sha256:acfecbf5edb91ec72a20a125de7f56b8c2f6161eff4c65382c8ee6a2484d3540"}, + {file = "python_rapidjson-1.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1db7b0af882999f5685eb7046a0f3b3aca5d55a3e84b3089747d29a4ec6fdade"}, + {file = "python_rapidjson-1.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a87c8c8b615513f9dc414af1554140589036d14840f5e1f1845965e1c0a080e1"}, + {file = "python_rapidjson-1.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0a2f5c4abe529ca2764343416e35710a263832533b7bdc76c3285efb5b5ecc8"}, + {file = "python_rapidjson-1.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40467c3a6d8f070cc4d196fe46a79ed59d1a13a4d3fdc6a0325a21816600e5a7"}, + {file = "python_rapidjson-1.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df4e7237a3e77666ccb9b437013294e6aa3968528f7c61f60f6f38eea0f8f79"}, + {file = "python_rapidjson-1.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:99a5215f24ff1fa6cc67ee275a6852aa56d934d3b8cd7a40197feb632b54fd76"}, + {file = "python_rapidjson-1.10-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3dbea0ee9fa1cd6ecc13a949f6bb94013639d39cdb56f58df4ab61130d35e57c"}, + {file = "python_rapidjson-1.10-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:6d1d0c5da3bd5f701b1aed550e1e7bd59b16ae642877cddf18815006cf998f9a"}, + {file = "python_rapidjson-1.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:072f76c1f1483bcc4056d7d3a8b0319bf841a73e955f188302094b62b2163bf9"}, + {file = "python_rapidjson-1.10-cp310-cp310-win32.whl", hash = "sha256:c95d466307a2140a7687a575103980c6e81c9f62d19556cafad3d6b2932b7eb1"}, + {file = "python_rapidjson-1.10-cp310-cp310-win_amd64.whl", hash = "sha256:454ffda58cc6fed64d983b1b8ae4b39a563b4fd671dae9132e06450025898539"}, + {file = "python_rapidjson-1.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fff343076fbeee0cd7e4e3fb9472f2d567a127ec7b8b5b7ecba6bf7960a3ce07"}, + {file = "python_rapidjson-1.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:686482c67727edad4b6d0c753bc159f35134a5a623e9651c4b7c008ef2996252"}, + {file = "python_rapidjson-1.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ef7d55688b7123d62690b193537cc048fa9f35cfa43d249fedc0d9fd398890a"}, + {file = "python_rapidjson-1.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f27c0601792533ab6e98452961d61566480dc155da19d2a358a5fd9a85d9321"}, + {file = "python_rapidjson-1.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95176e35e3bacb8a1a27f563e815b5b57c717992c871b1c25fd76a835fbba32c"}, + {file = "python_rapidjson-1.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47a0ec20886b8be86af307c10d699a447e22979ed7dd1f2b7ed5cb7496b3d920"}, + {file = "python_rapidjson-1.10-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f7968c0cb09d9a76aa2483556ba46ab42634baf216cb2f2c7cd6bf77119a33c1"}, + {file = "python_rapidjson-1.10-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5faab270a4dd49216ceaca7169682680b2f5df8311c1ed259e4612d9d0cf61b7"}, + {file = "python_rapidjson-1.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:81b797934dc037810f5f98af138b55a3b6f18dd569cc5e8f81fe79956a4717ca"}, + {file = "python_rapidjson-1.10-cp311-cp311-win32.whl", hash = "sha256:6c1d62cc58a61629fc5e216fb7b3a1b02787c98fded874a7b474b1e6325e377e"}, + {file = "python_rapidjson-1.10-cp311-cp311-win_amd64.whl", hash = "sha256:29d31fc4254f1a4dca420e58bd1331e990fc2959d09ff2daa7934d52732a8491"}, + {file = "python_rapidjson-1.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:718f4e217b511cfbf9166f55ccf4bf4e4538495bee403e390cf89791c0debc26"}, + {file = "python_rapidjson-1.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:541bbb96353cf3fe2bdb29e727087226532be4e4573daad6f042cfdea533a564"}, + {file = "python_rapidjson-1.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50f0402a6899c6a177d4a37152deefcd59c61e44bef56b71e8d006a186c86286"}, + {file = "python_rapidjson-1.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c035e17744d6d6fba073b550b0040a74e55f2ad33fd798df206ff6879b41ad10"}, + {file = "python_rapidjson-1.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da970bde42309a74a5556e696673ea11c4545b8bee5081b84265ded460b2e9ef"}, + {file = "python_rapidjson-1.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7437a649821008aa456f2fbec737880d7f9bdda7ec94cc1743a43ccf32b5d26"}, + {file = "python_rapidjson-1.10-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:362d969bbd277f78bf0b1ffaa810857ea40351146b827f896f8d49e9c25fc99c"}, + {file = "python_rapidjson-1.10-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:409256e7748c4ab7f17b3793c7a78ca01914c487644fc42140d116ed4dec8c4f"}, + {file = "python_rapidjson-1.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a34a7e2853456fe50ba2ee22e38e7841e55eee10021d4496cce62285f148e8e7"}, + {file = "python_rapidjson-1.10-cp37-cp37m-win32.whl", hash = "sha256:bc4a97940e5afa60a598483d0eb863b26e4810aaf030d92a4301f5fc183e1b6d"}, + {file = "python_rapidjson-1.10-cp37-cp37m-win_amd64.whl", hash = "sha256:89586b67f9c69b66885774acebf3d018e7b8f93cea2b3cffa306ec9d37877594"}, + {file = "python_rapidjson-1.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2e38082b1a8ce3e2bd55821852c0cd643cdabe6497fd9c054f6b47a099afbea0"}, + {file = "python_rapidjson-1.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0955ef22fabb36b26fcad702ae54c1bce2bc2a74b1883c42d251d72011d0d426"}, + {file = "python_rapidjson-1.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a9db03c68ab0158bcdf80299b2c980186d148aa3e05d5650fea5148a425a29a"}, + {file = "python_rapidjson-1.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fde8ab0f06debaa06d93085f19dc3ec3db53f22883f1625dd32b96a87e7009de"}, + {file = "python_rapidjson-1.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23539c9f7d85d64a00d3cb44c7d9ab3be2184d4da42a5f3263dcfd1d0203ee43"}, + {file = "python_rapidjson-1.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8bfd484285f3477acef0bb45abd2b80b6252e35a5a53395ce48f0327cbe43c23"}, + {file = "python_rapidjson-1.10-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8b0ed643ebaa8ddf3f40422752efe83abda29aa30a9e6866ccd9dd591b5057d0"}, + {file = "python_rapidjson-1.10-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:5aeca661a0f229f1312fb3ad3e1a5c6736d49942d80d4931810158559eb8f119"}, + {file = "python_rapidjson-1.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8a68ed066e8f0878b7112f943cf35ba9e5217395bcdd8cb478cde01871e2701c"}, + {file = "python_rapidjson-1.10-cp38-cp38-win32.whl", hash = "sha256:d286be6f63446776c4958bb37824c683194b4878fc9cd5b7255134fb5a6ba536"}, + {file = "python_rapidjson-1.10-cp38-cp38-win_amd64.whl", hash = "sha256:aece5270c6e6d5c3d54586c9a5fb9677d70d7019744a59560c5c369c7b9bba25"}, + {file = "python_rapidjson-1.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc09c5ad0fe71f262cdcc5655409f132f1560a8af80e76e7757945ce401fdbab"}, + {file = "python_rapidjson-1.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f6447bd7a8ff5135ab7e372b48a174d3c560d5b322e32bd465e8458e6e4593"}, + {file = "python_rapidjson-1.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22ede69213885391b46cc14596bfd4cd1a5c6f34a2db6600fb08b03982dbc7b7"}, + {file = "python_rapidjson-1.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a9425129623718a04b885a12190faa23e7997c4e8632054e18df7ea473f746d"}, + {file = "python_rapidjson-1.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60e10f32e1a8d155448842934cbe71eb620b4b4a0cb3627ba4c4856e27556534"}, + {file = "python_rapidjson-1.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8d23caab17b87ed5b82e28cdc19172ba1ca65c982e3fff387961d3f33710031f"}, + {file = "python_rapidjson-1.10-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f07d4fcdcfd64bdad0143b9705c5d5089677ebddf60ac6c1f8074a34b1c70cf9"}, + {file = "python_rapidjson-1.10-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:87b991c7ae435489c56a46cef228d2b65a3df689ee4fe24fab69c791c841f633"}, + {file = "python_rapidjson-1.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3706a5c4f21073c04be133c36565efc6e3f5646a03c8d19af78c19d7c70eb708"}, + {file = "python_rapidjson-1.10-cp39-cp39-win32.whl", hash = "sha256:47f9078ea6884f700166a8728d863609fec62232e66a33b8fb4a7706ce7c731c"}, + {file = "python_rapidjson-1.10-cp39-cp39-win_amd64.whl", hash = "sha256:9e4921ab7002ae9faad7f439a7c50aa195039f177e9e51a76c34c97966c79a79"}, +] + [[package]] name = "pytz" version = "2023.3" @@ -7163,152 +7315,167 @@ files = [ [[package]] name = "pywinpty" -version = "2.0.10" +version = "2.0.11" description = "Pseudo terminal support for Windows from Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, - {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, - {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, - {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, - {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, - {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, + {file = "pywinpty-2.0.11-cp310-none-win_amd64.whl", hash = "sha256:452f10ac9ff8ab9151aa8cea9e491a9612a12250b1899278c6a56bc184afb47f"}, + {file = "pywinpty-2.0.11-cp311-none-win_amd64.whl", hash = "sha256:6701867d42aec1239bc0fedf49a336570eb60eb886e81763db77ea2b6c533cc3"}, + {file = "pywinpty-2.0.11-cp38-none-win_amd64.whl", hash = "sha256:0ffd287751ad871141dc9724de70ea21f7fc2ff1af50861e0d232cf70739d8c4"}, + {file = "pywinpty-2.0.11-cp39-none-win_amd64.whl", hash = "sha256:e4e7f023c28ca7aa8e1313e53ba80a4d10171fe27857b7e02f99882dfe3e8638"}, + {file = "pywinpty-2.0.11.tar.gz", hash = "sha256:e244cffe29a894876e2cd251306efd0d8d64abd5ada0a46150a4a71c0b9ad5c5"}, ] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] name = "pyzmq" -version = "25.1.0" +version = "25.1.1" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, ] [package.dependencies] @@ -7396,103 +7563,103 @@ dev = ["pytest"] [[package]] name = "rapidfuzz" -version = "3.1.1" +version = "3.2.0" description = "rapid fuzzy string matching" optional = true python-versions = ">=3.7" files = [ - {file = "rapidfuzz-3.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:17e4cbe6632aae7c35101c4b7c498e83f6eacf61be0def4ff98167df30dc69ca"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:167dbce2da6bb5b73d43e53434c5a9d7d1214b658b315420e44044782f4c482b"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdee4f4d04761ce167538adbefa01a64e7cab949d89aa09df39ef0d5e859fb2a"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e77ed7d0bd8d9be530c462c921904ada8d3417671eed749784c5a315af334d"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdd2ab5ab56fcaf839a9f58caa8756dbfeba0b3dc187850b763d0a1e6ee9c97a"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0843c53d54d5b7d6122d8f1d7574d8c91a7aacc5c316f74d6e33d98aec82949d"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b3e953dcef0302eeb4fe8c7c4907e50d175199fc07da05ad6bd1d8d141ff138"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec5523d5c08c639cd4e301d42f3ad7c6fb061a1f1cd6b5b627e59af345edfed7"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b4995792e106c3f1ab6f56dd6089918b065888e2e55a71e3fea8d0f66bf30989"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cdbf9a76ea47f14026daaed43a2c2150ab0e9a4d5396909f028380f33e61c522"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f25d1975e846d07990cf946a5927a932aa7cccd308ae9979b03a58ff1cd80087"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e0755f5ac6c3d1dc2505eb2e6eaf5508ff17b42c084406714fbabf2d50d098b6"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de784bbe06d32e66617cd20766c37aae2438902d54b3fa608d2e0a929ca705f4"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-win32.whl", hash = "sha256:ef6c38040d868dcc0132fad377aafeb5b2da71354759e77f41ae599316df2dee"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:7c74fde444bcd13ef3a803c578b28f33b4f9edf368f46ca3de57fda456065967"}, - {file = "rapidfuzz-3.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:e549da8d68ad4ee385c918ea8b9efeda875df9edf6c6b48df927bd061c00bfef"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:58ca539cc6ce385d650138a9b1908b05622c2dd08a23d5aea4890523ef3774d5"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91946c496e6f380939dbea14ff6ce6de87480445c09d03964f5374101462594b"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f2024f83a9300440e845b441e71726471f7567021c1d80796ca02e71c5f0dc2"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17b017f9e1b88dfd6d9b03170ef8e86477de0d9d37fbfcbe72ca070cacbe1b65"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6772eb7cc4429f1eae5a9b41e5b0b1af8f0d50727c6e338d9ad5bceee01da5a"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c089ce856919e03f4dd8f9168d60ac580d30cd0451fd60dcdef73010eca68973"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f2cd9a3760080876fc59edb26926e51d6db44dea65e85f1eb04aa5f58c3bc41"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f32791ee045a7b3d6a56208a55d996d5f7a32fdb688f5c5ee899cb7589539eb"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:68d910048b36613701ea671de68f701e2c1ba2839295238def840ff1fc1b15f4"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6f767d4823002e65c06ea273f952fda2b88775e1c2d508564f04d32cdd7f65b2"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:10313075642a9f1f948d356f4f0803ae28a496d7967b466b9cae1a4be8aa4df3"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:1465ea085154378e69bf4bc5e27bdac5c94684416882ace31865232adc9239a2"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:53e3c588e7ea158fa80095dd0ff53f49e2ede9a8d71a3a5b964ca045d845a9b9"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-win32.whl", hash = "sha256:cb08db5c122fea4196483b82f7596e50ef9cab1770f7696c197bf0815ac4dd17"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:b7c65112c87568274d399ad7a62902cef17801c2bd047b162e79e43758b3ce27"}, - {file = "rapidfuzz-3.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:ea3e46a534de97a6cad2018cb950492a0fcacad380e35440ce3c1c8fef96a261"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a8bb256b34fcad4f3fa00be6b57fe35bcb54f031911195929145c67d9738ffec"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51f21f37aec6bc117e9083181ddc3cbbcbf56b6506492b128d8e836d3545ca80"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a371846f45ed9d24927a8d5222884536c1e171543396b36250fafb2e848bc92"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25eea5c8006b6c8747ca204675c9e939f3c4d27167fb43b2aa211443d34f9abd"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db5e71e5a810d2f1163c914e01b3ba241409a98286ac4850ff26076115ae401b"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c07e16ab38e717931319cff1340debbf2ef940a1cda4eb70e323079b62df306"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aadc5a8b9859737a8f87831215b7fab0c04afeb960bb987c528421a4e6dfb8b6"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0de229cb613be060580c71c1674acbde57921c7ed33d7a726e071a2562924113"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b1bf8aba99b267aad0a01dfb44ee39803676007724abcfb72129c350476b2341"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d3264e4a02e4148e30078104fb0c1b6c8eb166ddc5ebe843a22433f58f87dc47"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:712331c1c70c79a219c2ac233b4e25e75ffad51042840d147d5e94519c7d8a1a"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:6ede2d42ad55bd4e7a3394e98c5f58ddace78775493391732d32be61268a4116"}, - {file = "rapidfuzz-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a5c47b5153f25eb512dbb91f9850225d2dcfb3404a1c48406726c7732b0726"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:51bb8f7aa4fe45618e75cdccf08491c752a7f137ffbf7d3afd1809791ac8c326"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:788fb03c5acb5b48f5f918f4cbb5dc072498becf018c64e7e27d6b76e63e68b8"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dc7f25e20781c8d42e813516ee4ff9043ecce4a8e25fc94ee6732a83d81c1c99"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4a751f216fd1222a4a8c7ceff5180872a156202c3bdca1b337e5a5b09298dfd"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83b48b789f2da1688882cba595c40179194ab15ec17ea1d4c9de9ee239649904"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a6f5cd9f1282da49b8d0747c40f3fea2d64ab5e4c2cc2295baf87ff7a0d062"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5fe8054c244bf63be2380efc275edd86da3a706460d42911dc3ff914f3260a5"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4d509e9aa011e1be5e4da7c5062dc4fc3688714687110536925980b3d03ac6"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ccc1b5b467766110085c80bb9311d233fccc8ed1ce965aebba3125e1bab04cba"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7e181411958d04d5b437a0981e87815e8f1b1909f5ae0e339246d3bc464f53e7"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:c53cf36cdb10819b7154fefdbffbef442ba567d9c1ca74a7e76fd759ace45e6c"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:851b44130393139cb336aa54c681d595d75a3160b7be330f3acc0c3b9dabce70"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49d900da023eeb3bfbe9feee126312eb9fd0458129aa5a581e4d8d8bf4483d14"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-win32.whl", hash = "sha256:6c0e96821029c46847df4ff266ea283a2b6163a4f76a4567f9986934e9c4410c"}, - {file = "rapidfuzz-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7af18372f576e36e93f4662bdf64043ac23dfa02d7f768d7e7e1d0211bb9cb35"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8b966344ed4122a71ab8ccdca2954db1ce0d8049cb9bcac58db07558f9d9ec32"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a293370448f2e46fdc6e086ac99923015bdc53973a65d3df35aefc685e1a5809"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:351d253fdee62d6d0e80c75f0505accc1ce8cc73a50779c60986ef21c92f20f9"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e951c874a0e5b375b2af9b5f264eefc679c0685c166ee0641e703ef0795509b"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4019def8a18bc867ac61f08a542bf474a7a9b3f662f5d5cd169c9135866562f5"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:086a2d84c2e497e3ab160ccf164e319bca874d9383d008fcadf91ede8ac7997f"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d4da453fbd8793ebb11bed396f8a4b9041d6227bf055903447305dd7942312f"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f56af1d46fbeaaa0dc50901c2dc439c7a455cfdac2f1acf6cffeb65ae82c48"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7726f67e4a0b2b4392f03aa62e16b12a697156c6735df27b21bd3ab561b01659"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d72916d27fb88741bfb576b0b0639354ca00f5e91046171c985262c68a86bbb5"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8c85bb6946fb02231d1e60ab45c36ecee04ecf7f725e094f5beee798b6b7d36d"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:fb7049dff52cded65184a3d2ff45cfd226bff7314f49a8f4b83f943eea9181a7"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:408007b4bc5a0a0cb9bfcdcc8cffa9b71fec6ee53ccdf9c26b57539f7e264ab5"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-win32.whl", hash = "sha256:9dc7154889937ca5a004d17f62b4798e0af52f69c38eb3112dbdb52b006d4419"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:16c506bac2e0a6f6581b334a7802c2f0d8343ec1d77e5cf9452c33d6219abef8"}, - {file = "rapidfuzz-3.1.1-cp39-cp39-win_arm64.whl", hash = "sha256:5e11e11880951e767342b56627ab2dc9d3ef90e2605b656e9b5e6e0beadaaf0f"}, - {file = "rapidfuzz-3.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8b8f32463781e4703965c9cf7a609a19a74478f332e0d62cd9d0e7a9db91321"}, - {file = "rapidfuzz-3.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b408ac3c7f8c3414bfd5c6044ca4bb385b390bcf5eae3ad884cef48628c131ae"}, - {file = "rapidfuzz-3.1.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ff1a517de2b1e80ddf1a3037a6ebca9925154c1af70751518d50d5c332e1ec8"}, - {file = "rapidfuzz-3.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e23665be5918f979180130babedab9317fbb34cdae237c7defad7e86bc684e"}, - {file = "rapidfuzz-3.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:15260263a0c7bffac934a53b6622d77e06e10929ee4d2e62ac6f70c13988f351"}, - {file = "rapidfuzz-3.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f7acc5c9c7cf567372de5b6c817f93db508e7b9bd7f29bd6187df8d2cc60ced5"}, - {file = "rapidfuzz-3.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79f5a3ab7ff6c46336f38690f0564bc7689cefa180257ed9078c42f75b10c9d2"}, - {file = "rapidfuzz-3.1.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:362e366e79fcc9a8866b41f20ef4d2987a06f8b134096e659594c059aa8a6d88"}, - {file = "rapidfuzz-3.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:819d9317c3d86b508d87ab1bca5867f3abc18b902c822bc57366ccc6330a030b"}, - {file = "rapidfuzz-3.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4a64ddfb7084b678da7778c1263aee2baae5a2ca55ec5589a022defc38103eb1"}, - {file = "rapidfuzz-3.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8243bb4bb4db7c3501932ced6a978b284e19c3619b6802455e47bfd0905adb81"}, - {file = "rapidfuzz-3.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39c7d0dbd77a7f28ff85a1dff2afb2ed73e5cd81cca3f654450ed339a271c0ab"}, - {file = "rapidfuzz-3.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4afab735bb0ac3ec9bafcc35376ed336d26af6140c4d81e4c869e77df77ecd5"}, - {file = "rapidfuzz-3.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69d503a7641b5a63aa53c7aca0b857d38f48cd7bae39f8563679b324e3d2d47a"}, - {file = "rapidfuzz-3.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ef3ad80458e47723812976a2ea1282ff207ad20e6cb19da1917f76699bd5aaa5"}, - {file = "rapidfuzz-3.1.1.tar.gz", hash = "sha256:a06a08be3cb7d7df7993dd16e84aaf59bd5a7ff98a9f1b3e893d18b273a71c64"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f5787f1cc456207dee1902804209e1a90df67e88517213aeeb1b248822413b4c"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e8d91137b0b5a6ef06c3979b6302265129dee1741486b6baa241ac63a632bea7"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c130e73e0079f403b7c3dbf6f85816a3773971c3e639f7289f8b4337b8fd70fe"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e18059188bfe3cdbc3462aeec2fa3302b08717e04ca34e2cc6e02fb3c0280d8"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:37bb6bd6a79d5524f121ff2a7d7df4491519b3f43565dccd4596bd75aa73ab7c"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca0d6aee42effaf2e8883d2181196dd0957b1af5731b0763f10f994c32c823db"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49fc2cbbf05bfa1af3fe4c0e0c8e5c8ac118d6b6ddfb0081cff48ad53734f7ac"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd4fdee46f6ba7d254dba8e7e8f33012c964fc891a06b036b0fd20cab0db301"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ab2863732eafd1cc58f249f145c20ad13d4c902d3ef3a369b00438c05e5bfb55"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a9658c545de62ac948027092ba7f4e8507ebc5c9aef964eca654409c58f207f0"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5f3e36cfadaf29f081ad4ca476e320b639d610e930e0557f395780c9b2bdb135"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:239ffc04328e14f5e4097102bd934352a43d5912acf34fb7d3e3fe306de92787"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b56ce39ba0a77501d491bc20a2266989ae0264452758b004950ee5f4c10c641f"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-win32.whl", hash = "sha256:dbebd639579ab113644699fe0c536ae00aba15b224e40a79987684333d1104a5"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:88e99229c4df99a7e5810d4d361033b44e29d8eb4faaddcfb8e4bdcb604cf40a"}, + {file = "rapidfuzz-3.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:8e39c4e2e85828aa6c39cc7f30e2917d991b40190a2a3af1fa02396a3362a54e"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2f2e618389427c5e8304357a78f83df22558e61f11bc21aeb95dd544c274d330"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a2a6babfe4d3ce2eadd0079ee7861cb5f1584845c5a3394edead85457e7d7464"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f223deb06895c9c136b40cd8fd7e96ee745c3bb9ed502d7367f6ad9ab6fdd40e"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de6962b45f761355fa4b37de635e4df467d57530732a40d82e748a5bc911731"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76953516cb3b75fb1234c5a90e0b86be4525f055a9e276237adb1ffe40dca536"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1e04861dddbb477500449dc67fb037656a049b6f78c4c434c6000e64aa42bb4"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff6e725eec9c769f9d22126c80a6ada90275c0d693eca2b35d5933178bda5a2"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f21ce33242e579ba255c8a8b438782164acaa55bf188d9410298c40cbaa07d5"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:986a7aad18768b920bb710e15ed7629d1da0af31589348c0a51d152820efc05d"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6e98f0a6fac14b7b9893147deceae12131f6ff169ae1c973635ef97617949c8f"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5dd5c4b9f5cd8a8271a90d1bab643028e7172808c68ed5d8dde661a3e51098e3"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:e336b0a81c5a8e689edf6928136d19e791733a66509026d9acbaa148238186e0"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8fa44afb731535a803c4c15ee846257fef050768af96d1d6c0eadb30285d0f7b"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-win32.whl", hash = "sha256:d04ad155dbecc0c143912f691d38d4790e290c2ce5411b146c0e00d4f4afd26f"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:b9e79e27344af95a71a3bb6cd3562581da5d0780ff847a13ad69ee622d940d3c"}, + {file = "rapidfuzz-3.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:dc53747e73f34e8f3a3c1b0bc5b437b90a2c69d873e97781aa7c06543201409a"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:613c1043332eeba0c0910de71af221ac10d820b4fa9615b0083c733b90a757f9"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0907f87beca70e44f78e318eede2416ddba19ec43d28af9248617e8a1741ef3"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcfd184e0b5c58497cc3d961f49ac07ae1656d161c6c4d06230d267ae4e11f00"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a7d53a2f1ccfb169be26fa3824b1b185420592c75853f16c6b7115315ea6784"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2eac585803c4e8132ed5f4a150621db05c418304982c88cf706abdded65e1632"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc859f654b350def5df2ebc6d09f822b04399823e3dad1c3f2e8776c825fcde7"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8a165f64c528edc0bbbd09c76d64efd4dbe4240fd1961710b69586ef40486e79"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:56a392b655597ecf40535b56bfb7c0856c10c0abc0cbc369fd25a1665420710b"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:5863b176da42b1bb450a28375ef1502f81fbecd210a5aae295d7f2221284ad41"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:8f8590c39a3f745b314f2697b140c8f8600fe7ecfb2101e9e4ec6e7716c66827"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:da00990adf1fbc0904f22409b3451473fa465a0ef49f3075703c206080aa31b2"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:2504205552bf568ac478f17dd612d0e31c4a82c645c66209a442df7e572b5adc"}, + {file = "rapidfuzz-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:af3ac648232c109e36c8b941106d726969972644aa3ef55218c5988aa1daea03"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:04d22f6058ce5d620ec4ecd771e44cfa77d571137d6c6547df57bdfc44ee2a98"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac7ddcd372ed202d1b59b117506da695b291f135435cfbf3e71490aa8e687173"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fd3fca0224b84350f73eab1fb5728c58fd25ee4f20e512607c7d83f9bc836d3f"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bdb1f92c4666c7e1d3c21268b931cf3f06f32af98dfdeb37641159b15fa31dd"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:871052405c465a45b53a3dc854a8be62079f42cdbb052651ff0b65e2452131e6"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb9bb1af5680741cf974f510fb3894907a1b308e819aff3d9ea10b5326e8a5f6"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84ce2e010677835fa5ba591419e4404f11a1446f33eec3724a2bff557ae5144a"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c13107e0fdca5ccae70659f45646d57453338a9dfc6b152fb7372e4bf73466a0"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:538027685a1a8f1699e329f6443951267f169bfa149298734ea679db8f0e7171"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3557736672115d082979a8a12f884ed5b24268f4471fee85cfb2ec7212b68607"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6bc5e3da74644cf75663f5b438e0ae79b67d1f96d082cda771b0ecfed0528f40"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d2d0fc98d9d7bba44f929d201c2c2c35eb69ea2ffef43d939b297dafef934625"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2bf85a3bf34f27383691e8af0fd148b2a3a89f1444d4640d04ef58030f596ee0"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-win32.whl", hash = "sha256:cf5ea3f1d65a0bee707245a0096c3a6f769b3ad6f1b9afc7176dfb73eb0ac98f"}, + {file = "rapidfuzz-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:54906095444ea8b0a4013f3799b3f2c380205d7f60b9c55774e7d2264fa8d9c6"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6d44218823533e0d47770feef86c73c90a6f7e8d4923eafabf56a1fa3444eda0"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:87c3d4077e61c66d5dd11198a317f83db8e8cf034239baa16e4384037b611652"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc0e1142350566349c41173685988d942ebc89578f25ee27750d261e7d79e1ce"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de44a378751fdfb19ddf6af412b3395db4b21ab61f40139f815c82f1a1611b50"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0983b30c7b289f540b11cdb550e301b3f2e8f0ef9df866aa24a16f6cd96041"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adfffb79288437006be412d74e28cddd7c5e6cc9f84a34aa9c356b13dc1ad2c9"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a284386652efb3b7d41ed5dd101ab4ce5936f585c52a47fa9838fc0342235700"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c546c83d6bc9006b86f56921b92c3e16d8ddeb4e1663653e755a5d8a3ac258da"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:53b3575fa398a5021192c1592dce98965560ad00690be3ade056eab99288562c"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:366ade5d0067dc6281e2a6c9e5c91bbfe023b09cef86894de8fe480b4696e3bf"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f946dec03cc2c77bc091d186c007d1e957d1f16a4d68a181f5fa75aea40bdf87"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:045e5cccb0e792005d5465de0ea4621b9b67778580e558f266984704e68b0087"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fd80288b9538c87209893f0934563c20b6a43acf30693794bcc111b294447ee9"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-win32.whl", hash = "sha256:a359436754ed5dd10d88706f076caa7f8e5c1469bf5ebba1897dc87aa9ff953e"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:75df3d9b895910ee810b2c96c8626cc2b5b63bb237762db36ff79fb466eccc43"}, + {file = "rapidfuzz-3.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:893833a903875a50acdbcb7ed33b5426ba47412bd18b3eb80d56d982b641dc59"}, + {file = "rapidfuzz-3.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3002c3660180747243cccb40c95ade1960e6665b340f211a114f5994b345ab53"}, + {file = "rapidfuzz-3.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa50de7e0f95e1400b2bf38cfeb6e40cf87c862537871c2f7b2050b5db0a9dfc"}, + {file = "rapidfuzz-3.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54842a578a2a8e5258812a9032ffb55e6f1185490fd160cae64e57b4dc342297"}, + {file = "rapidfuzz-3.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:108861623838cd574b0faa3309ce8525c2086159de7f9e23ac263a987c070ebd"}, + {file = "rapidfuzz-3.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d39128415f0b52be08c15eeee5f79288189933a4d6fa5dc5fff11e20614b7989"}, + {file = "rapidfuzz-3.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3af2b75635f33ffab84e295773c84a176d4cba75311d836ad79b6795e9da11ac"}, + {file = "rapidfuzz-3.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68c678f7f3ca3d83d1e1dd7fb7db3232037d9eef12a47f1d5fe248a76ca47571"}, + {file = "rapidfuzz-3.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25d2bd257034e910df0951cdeff337dbd086d7d90af3ed9f6721e7bba9fc388a"}, + {file = "rapidfuzz-3.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c7f20e68cad26fc140c6f2ac9e8f2632a0cd66e407ba3ea4ace63c669fd4719"}, + {file = "rapidfuzz-3.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f09fd9dc73180deb9ca1c4fbd9cc27378f0ab6ee74e97318c38c5080708702b6"}, + {file = "rapidfuzz-3.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:af7914fc7683f921492f32314cfbe915a5376cc08a982e09084cbd9b866c9fd4"}, + {file = "rapidfuzz-3.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08a242c4b909abbcfa44504dc5041d5eeca4cd088ae51afd6a52b4dc61684fa2"}, + {file = "rapidfuzz-3.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b07afaca28398b93d727a2565491c455896898b66daee4664acde4af94e557"}, + {file = "rapidfuzz-3.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24e4c4a031c50e4eeb4787263319a0ac5bed20f4a263d28eac060150e3ba0018"}, + {file = "rapidfuzz-3.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d19c2853a464c7b98cc408654412fd875b030f78023ccbefc4ba9eec754e07e7"}, + {file = "rapidfuzz-3.2.0.tar.gz", hash = "sha256:448d031d9960fea7826d42bd4284156fc68d3b55a6946eb34ca5c6acf960577b"}, ] [package.extras] @@ -7535,13 +7702,13 @@ networkx = ["networkx (>=2.0.0,<3.0.0)"] [[package]] name = "redis" -version = "4.5.5" +version = "4.6.0" description = "Python client for Redis database and key-value store" optional = true python-versions = ">=3.7" files = [ - {file = "redis-4.5.5-py3-none-any.whl", hash = "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119"}, - {file = "redis-4.5.5.tar.gz", hash = "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880"}, + {file = "redis-4.6.0-py3-none-any.whl", hash = "sha256:e2b03db868160ee4591de3cb90d40ebb50a90dd302138775937f6a42b7ed183c"}, + {file = "redis-4.6.0.tar.gz", hash = "sha256:585dc516b9eb042a619ef0a39c3d7d55fe81bdb4df09a52c9cdde0d07bf1aa7d"}, ] [package.dependencies] @@ -7551,112 +7718,127 @@ async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2 hiredis = ["hiredis (>=1.0.0)"] ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + [[package]] name = "regex" -version = "2023.6.3" +version = "2023.8.8" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, + {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, + {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, + {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, + {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, + {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, + {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, + {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, + {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, + {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, + {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, + {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, + {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, + {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, + {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, + {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, ] [[package]] name = "requests" -version = "2.28.2" +version = "2.31.0" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] @@ -7664,7 +7846,7 @@ certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7", optional = true, markers = "extra == \"socks\""} -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -7779,13 +7961,13 @@ files = [ [[package]] name = "rich" -version = "13.4.2" +version = "13.5.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = true python-versions = ">=3.7.0" files = [ - {file = "rich-13.4.2-py3-none-any.whl", hash = "sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec"}, - {file = "rich-13.4.2.tar.gz", hash = "sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898"}, + {file = "rich-13.5.2-py3-none-any.whl", hash = "sha256:146a90b3b6b47cac4a73c12866a499e9817426423f57c5a66949c086191a8808"}, + {file = "rich-13.5.2.tar.gz", hash = "sha256:fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"}, ] [package.dependencies] @@ -7796,6 +7978,112 @@ typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9 [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] +[[package]] +name = "rpds-py" +version = "0.9.2" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.9.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7"}, + {file = "rpds_py-0.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6"}, + {file = "rpds_py-0.9.2-cp310-none-win32.whl", hash = "sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764"}, + {file = "rpds_py-0.9.2-cp310-none-win_amd64.whl", hash = "sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e"}, + {file = "rpds_py-0.9.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3"}, + {file = "rpds_py-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de"}, + {file = "rpds_py-0.9.2-cp311-none-win32.whl", hash = "sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab"}, + {file = "rpds_py-0.9.2-cp311-none-win_amd64.whl", hash = "sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298"}, + {file = "rpds_py-0.9.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386"}, + {file = "rpds_py-0.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d"}, + {file = "rpds_py-0.9.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d"}, + {file = "rpds_py-0.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e"}, + {file = "rpds_py-0.9.2-cp38-none-win32.whl", hash = "sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920"}, + {file = "rpds_py-0.9.2-cp38-none-win_amd64.whl", hash = "sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044"}, + {file = "rpds_py-0.9.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260"}, + {file = "rpds_py-0.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26"}, + {file = "rpds_py-0.9.2-cp39-none-win32.whl", hash = "sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0"}, + {file = "rpds_py-0.9.2-cp39-none-win_amd64.whl", hash = "sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe"}, + {file = "rpds_py-0.9.2.tar.gz", hash = "sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945"}, +] + [[package]] name = "rsa" version = "4.9" @@ -7838,13 +8126,13 @@ files = [ [[package]] name = "s3transfer" -version = "0.6.1" +version = "0.6.2" description = "An Amazon S3 Transfer Manager" optional = true python-versions = ">= 3.7" files = [ - {file = "s3transfer-0.6.1-py3-none-any.whl", hash = "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346"}, - {file = "s3transfer-0.6.1.tar.gz", hash = "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9"}, + {file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, + {file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, ] [package.dependencies] @@ -7855,59 +8143,72 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] [[package]] name = "safetensors" -version = "0.3.1" +version = "0.3.2" description = "Fast and Safe Tensor serialization" optional = true python-versions = "*" files = [ - {file = "safetensors-0.3.1-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:2ae9b7dd268b4bae6624729dac86deb82104820e9786429b0583e5168db2f770"}, - {file = "safetensors-0.3.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:08c85c1934682f1e2cd904d38433b53cd2a98245a7cc31f5689f9322a2320bbf"}, - {file = "safetensors-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba625c7af9e1c5d0d91cb83d2fba97d29ea69d4db2015d9714d24c7f6d488e15"}, - {file = "safetensors-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b57d5890c619ec10d9f1b6426b8690d0c9c2868a90dc52f13fae6f6407ac141f"}, - {file = "safetensors-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c9f562ea696d50b95cadbeb1716dc476714a87792ffe374280c0835312cbfe2"}, - {file = "safetensors-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c115951b3a865ece8d98ee43882f2fd0a999c0200d6e6fec24134715ebe3b57"}, - {file = "safetensors-0.3.1-cp310-cp310-win32.whl", hash = "sha256:118f8f7503ea312fc7af27e934088a1b589fb1eff5a7dea2cd1de6c71ee33391"}, - {file = "safetensors-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:54846eaae25fded28a7bebbb66be563cad221b4c80daee39e2f55df5e5e0266f"}, - {file = "safetensors-0.3.1-cp311-cp311-macosx_10_11_universal2.whl", hash = "sha256:5af82e10946c4822506db0f29269f43147e889054704dde994d4e22f0c37377b"}, - {file = "safetensors-0.3.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:626c86dd1d930963c8ea7f953a3787ae85322551e3a5203ac731d6e6f3e18f44"}, - {file = "safetensors-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12e30677e6af1f4cc4f2832546e91dbb3b0aa7d575bfa473d2899d524e1ace08"}, - {file = "safetensors-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d534b80bc8d39945bb902f34b0454773971fe9e5e1f2142af451759d7e52b356"}, - {file = "safetensors-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ddd0ddd502cf219666e7d30f23f196cb87e829439b52b39f3e7da7918c3416df"}, - {file = "safetensors-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997a2cc14023713f423e6d16536d55cb16a3d72850f142e05f82f0d4c76d383b"}, - {file = "safetensors-0.3.1-cp311-cp311-win32.whl", hash = "sha256:6ae9ca63d9e22f71ec40550207bd284a60a6b4916ae6ca12c85a8d86bf49e0c3"}, - {file = "safetensors-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:62aa7421ca455418423e35029524489480adda53e3f702453580180ecfebe476"}, - {file = "safetensors-0.3.1-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:6d54b3ed367b6898baab75dfd057c24f36ec64d3938ffff2af981d56bfba2f42"}, - {file = "safetensors-0.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:262423aeda91117010f8c607889066028f680fbb667f50cfe6eae96f22f9d150"}, - {file = "safetensors-0.3.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10efe2513a8327fd628cea13167089588acc23093ba132aecfc536eb9a4560fe"}, - {file = "safetensors-0.3.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:689b3d6a7ebce70ee9438267ee55ea89b575c19923876645e927d08757b552fe"}, - {file = "safetensors-0.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14cd9a87bc73ce06903e9f8ee8b05b056af6f3c9f37a6bd74997a16ed36ff5f4"}, - {file = "safetensors-0.3.1-cp37-cp37m-win32.whl", hash = "sha256:a77cb39624480d5f143c1cc272184f65a296f573d61629eff5d495d2e0541d3e"}, - {file = "safetensors-0.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9eff3190bfbbb52eef729911345c643f875ca4dbb374aa6c559675cfd0ab73db"}, - {file = "safetensors-0.3.1-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:05cbfef76e4daa14796db1bbb52072d4b72a44050c368b2b1f6fd3e610669a89"}, - {file = "safetensors-0.3.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:c49061461f4a81e5ec3415070a3f135530834c89cbd6a7db7cd49e3cb9d9864b"}, - {file = "safetensors-0.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22cf7e73ca42974f098ce0cf4dd8918983700b6b07a4c6827d50c8daefca776e"}, - {file = "safetensors-0.3.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04f909442d6223ff0016cd2e1b2a95ef8039b92a558014627363a2e267213f62"}, - {file = "safetensors-0.3.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c573c5a0d5d45791ae8c179e26d74aff86e719056591aa7edb3ca7be55bc961"}, - {file = "safetensors-0.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6994043b12e717cf2a6ba69077ac41f0d3675b2819734f07f61819e854c622c7"}, - {file = "safetensors-0.3.1-cp38-cp38-win32.whl", hash = "sha256:158ede81694180a0dbba59422bc304a78c054b305df993c0c6e39c6330fa9348"}, - {file = "safetensors-0.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:afdc725beff7121ea8d39a7339f5a6abcb01daa189ea56290b67fe262d56e20f"}, - {file = "safetensors-0.3.1-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:cba910fcc9e5e64d32d62b837388721165e9c7e45d23bc3a38ad57694b77f40d"}, - {file = "safetensors-0.3.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:a4f7dbfe7285573cdaddd85ef6fa84ebbed995d3703ab72d71257944e384612f"}, - {file = "safetensors-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54aed0802f9eaa83ca7b1cbb986bfb90b8e2c67b6a4bcfe245627e17dad565d4"}, - {file = "safetensors-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34b75a766f3cfc99fd4c33e329b76deae63f5f388e455d863a5d6e99472fca8e"}, - {file = "safetensors-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a0f31904f35dc14919a145b2d7a2d8842a43a18a629affe678233c4ea90b4af"}, - {file = "safetensors-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcf527ecc5f58907fd9031510378105487f318cc91ecdc5aee3c7cc8f46030a8"}, - {file = "safetensors-0.3.1-cp39-cp39-win32.whl", hash = "sha256:e2f083112cf97aa9611e2a05cc170a2795eccec5f6ff837f4565f950670a9d83"}, - {file = "safetensors-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:5f4f614b8e8161cd8a9ca19c765d176a82b122fa3d3387b77862145bfe9b4e93"}, - {file = "safetensors-0.3.1.tar.gz", hash = "sha256:571da56ff8d0bec8ae54923b621cda98d36dcef10feb36fd492c4d0c2cd0e869"}, + {file = "safetensors-0.3.2-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:4c7827b64b1da3f082301b5f5a34331b8313104c14f257099a12d32ac621c5cd"}, + {file = "safetensors-0.3.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b6a66989075c2891d743153e8ba9ca84ee7232c8539704488f454199b8b8f84d"}, + {file = "safetensors-0.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:670d6bc3a3b377278ce2971fa7c36ebc0a35041c4ea23b9df750a39380800195"}, + {file = "safetensors-0.3.2-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:67ef2cc747c88e3a8d8e4628d715874c0366a8ff1e66713a9d42285a429623ad"}, + {file = "safetensors-0.3.2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:564f42838721925b5313ae864ba6caa6f4c80a9fbe63cf24310c3be98ab013cd"}, + {file = "safetensors-0.3.2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:7f80af7e4ab3188daaff12d43d078da3017a90d732d38d7af4eb08b6ca2198a5"}, + {file = "safetensors-0.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec30d78f20f1235b252d59cbb9755beb35a1fde8c24c89b3c98e6a1804cfd432"}, + {file = "safetensors-0.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16063d94d8f600768d3c331b1e97964b1bf3772e19710105fe24ec5a6af63770"}, + {file = "safetensors-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbb44e140bf2aeda98d9dde669dbec15f7b77f96a9274469b91a6cf4bcc5ec3b"}, + {file = "safetensors-0.3.2-cp310-cp310-win32.whl", hash = "sha256:2961c1243fd0da46aa6a1c835305cc4595486f8ac64632a604d0eb5f2de76175"}, + {file = "safetensors-0.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c813920482c337d1424d306e1b05824a38e3ef94303748a0a287dea7a8c4f805"}, + {file = "safetensors-0.3.2-cp311-cp311-macosx_10_11_universal2.whl", hash = "sha256:707df34bd9b9047e97332136ad98e57028faeccdb9cfe1c3b52aba5964cc24bf"}, + {file = "safetensors-0.3.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:23d1d9f74208c9dfdf852a9f986dac63e40092385f84bf0789d599efa8e6522f"}, + {file = "safetensors-0.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:becc5bb85b2947eae20ed23b407ebfd5277d9a560f90381fe2c42e6c043677ba"}, + {file = "safetensors-0.3.2-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:c1913c6c549b1805e924f307159f0ee97b73ae3ce150cd2401964da015e0fa0b"}, + {file = "safetensors-0.3.2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:30a75707be5cc9686490bde14b9a371cede4af53244ea72b340cfbabfffdf58a"}, + {file = "safetensors-0.3.2-cp311-cp311-macosx_13_0_universal2.whl", hash = "sha256:54ad6af663e15e2b99e2ea3280981b7514485df72ba6d014dc22dae7ba6a5e6c"}, + {file = "safetensors-0.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37764b3197656ef507a266c453e909a3477dabc795962b38e3ad28226f53153b"}, + {file = "safetensors-0.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4939067736783acd8391d83cd97d6c202f94181951ce697d519f9746381b6a39"}, + {file = "safetensors-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada0fac127ff8fb04834da5c6d85a8077e6a1c9180a11251d96f8068db922a17"}, + {file = "safetensors-0.3.2-cp311-cp311-win32.whl", hash = "sha256:155b82dbe2b0ebff18cde3f76b42b6d9470296e92561ef1a282004d449fa2b4c"}, + {file = "safetensors-0.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:a86428d196959619ce90197731be9391b5098b35100a7228ef4643957648f7f5"}, + {file = "safetensors-0.3.2-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:91e796b6e465d9ffaca4c411d749f236c211e257f3a8e9b25a5ffc1a42d3bfa7"}, + {file = "safetensors-0.3.2-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:c1f8ab41ed735c5b581f451fd15d9602ff51aa88044bfa933c5fa4b1d0c644d1"}, + {file = "safetensors-0.3.2-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:e6a8ff5652493598c45cd27f5613c193d3f15e76e0f81613d399c487a7b8cc50"}, + {file = "safetensors-0.3.2-cp37-cp37m-macosx_13_0_x86_64.whl", hash = "sha256:bc9cfb3c9ea2aec89685b4d656f9f2296f0f0d67ecf2bebf950870e3be89b3db"}, + {file = "safetensors-0.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ace5d471e3d78e0d93f952707d808b5ab5eac77ddb034ceb702e602e9acf2be9"}, + {file = "safetensors-0.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de3e20a388b444381bcda1a3193cce51825ddca277e4cf3ed1fe8d9b2d5722cd"}, + {file = "safetensors-0.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d7d70d48585fe8df00725aa788f2e64fd24a4c9ae07cd6be34f6859d0f89a9c"}, + {file = "safetensors-0.3.2-cp37-cp37m-win32.whl", hash = "sha256:6ff59bc90cdc857f68b1023be9085fda6202bbe7f2fd67d06af8f976d6adcc10"}, + {file = "safetensors-0.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8b05c93da15fa911763a89281906ca333ed800ab0ef1c7ce53317aa1a2322f19"}, + {file = "safetensors-0.3.2-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:94857abc019b49a22a0065cc7741c48fb788aa7d8f3f4690c092c56090227abe"}, + {file = "safetensors-0.3.2-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:8969cfd9e8d904e8d3c67c989e1bd9a95e3cc8980d4f95e4dcd43c299bb94253"}, + {file = "safetensors-0.3.2-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:da482fa011dc88fe7376d8f8b42c0ccef2f260e0cbc847ceca29c708bf75a868"}, + {file = "safetensors-0.3.2-cp38-cp38-macosx_13_0_x86_64.whl", hash = "sha256:f54148ac027556eb02187e9bc1556c4d916c99ca3cb34ca36a7d304d675035c1"}, + {file = "safetensors-0.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caec25fedbcf73f66c9261984f07885680f71417fc173f52279276c7f8a5edd3"}, + {file = "safetensors-0.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50224a1d99927ccf3b75e27c3d412f7043280431ab100b4f08aad470c37cf99a"}, + {file = "safetensors-0.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa98f49e95f02eb750d32c4947e7d5aa43883149ebd0414920866446525b70f0"}, + {file = "safetensors-0.3.2-cp38-cp38-win32.whl", hash = "sha256:33409df5e28a83dc5cc5547a3ac17c0f1b13a1847b1eb3bc4b3be0df9915171e"}, + {file = "safetensors-0.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:e04a7cbbb3856159ab99e3adb14521544f65fcb8548cce773a1435a0f8d78d27"}, + {file = "safetensors-0.3.2-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:f39f3d951543b594c6bc5082149d994c47ca487fd5d55b4ce065ab90441aa334"}, + {file = "safetensors-0.3.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:7c864cf5dcbfb608c5378f83319c60cc9c97263343b57c02756b7613cd5ab4dd"}, + {file = "safetensors-0.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:14e8c19d6dc51d4f70ee33c46aff04c8ba3f95812e74daf8036c24bc86e75cae"}, + {file = "safetensors-0.3.2-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:41b10b0a6dfe8fdfbe4b911d64717d5647e87fbd7377b2eb3d03fb94b59810ea"}, + {file = "safetensors-0.3.2-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:042a60f633c3c7009fdf6a7c182b165cb7283649d2a1e9c7a4a1c23454bd9a5b"}, + {file = "safetensors-0.3.2-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:fafd95e5ef41e8f312e2a32b7031f7b9b2a621b255f867b221f94bb2e9f51ae8"}, + {file = "safetensors-0.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ed77cf358abce2307f03634694e0b2a29822e322a1623e0b1aa4b41e871bf8b"}, + {file = "safetensors-0.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d344e8b2681a33aafc197c90b0def3229b3317d749531c72fa6259d0caa5c8c"}, + {file = "safetensors-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87ff0024ef2e5722a79af24688ce4a430f70601d0cf712a744105ed4b8f67ba5"}, + {file = "safetensors-0.3.2-cp39-cp39-win32.whl", hash = "sha256:827af9478b78977248ba93e2fd97ea307fb63f463f80cef4824460f8c2542a52"}, + {file = "safetensors-0.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9b09f27c456efa301f98681ea14b12f81f2637889f6336223ccab71e42c34541"}, + {file = "safetensors-0.3.2.tar.gz", hash = "sha256:2dbd34554ed3b99435a0e84df077108f5334c8336b5ed9cb8b6b98f7b10da2f6"}, ] [package.extras] -all = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "flax (>=0.6.3)", "h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "isort (>=5.5.4)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "numpy (>=1.21.6)", "paddlepaddle (>=2.4.1)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "setuptools-rust (>=1.5.2)", "tensorflow (>=2.11.0)", "torch (>=1.10)"] -dev = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "flax (>=0.6.3)", "h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "isort (>=5.5.4)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "numpy (>=1.21.6)", "paddlepaddle (>=2.4.1)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "setuptools-rust (>=1.5.2)", "tensorflow (>=2.11.0)", "torch (>=1.10)"] +all = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "flax (>=0.6.3)", "h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "isort (>=5.5.4)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "numpy (>=1.21.6)", "paddlepaddle (>=2.4.1)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "setuptools-rust (>=1.5.2)", "tensorflow (==2.11.0)", "torch (>=1.10)"] +dev = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "flax (>=0.6.3)", "h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "isort (>=5.5.4)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "numpy (>=1.21.6)", "paddlepaddle (>=2.4.1)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "setuptools-rust (>=1.5.2)", "tensorflow (==2.11.0)", "torch (>=1.10)"] jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)"] numpy = ["numpy (>=1.21.6)"] paddlepaddle = ["paddlepaddle (>=2.4.1)"] +pinned-tf = ["tensorflow (==2.11.0)"] quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] tensorflow = ["tensorflow (>=2.11.0)"] testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "numpy (>=1.21.6)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "setuptools-rust (>=1.5.2)"] @@ -7915,45 +8216,45 @@ torch = ["torch (>=1.10)"] [[package]] name = "scikit-learn" -version = "1.2.2" +version = "1.3.0" description = "A set of python modules for machine learning and data mining" optional = true python-versions = ">=3.8" files = [ - {file = "scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, - {file = "scikit_learn-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f"}, - {file = "scikit_learn-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb"}, - {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d"}, - {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584"}, - {file = "scikit_learn-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c"}, - {file = "scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f"}, - {file = "scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590"}, - {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233"}, - {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c"}, - {file = "scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c"}, - {file = "scikit_learn-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51"}, - {file = "scikit_learn-1.2.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49"}, - {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1"}, - {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744"}, - {file = "scikit_learn-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20"}, - {file = "scikit_learn-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd"}, - {file = "scikit_learn-1.2.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3"}, - {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad"}, - {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89"}, - {file = "scikit_learn-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3"}, + {file = "scikit-learn-1.3.0.tar.gz", hash = "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a"}, + {file = "scikit_learn-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:981287869e576d42c682cf7ca96af0c6ac544ed9316328fd0d9292795c742cf5"}, + {file = "scikit_learn-1.3.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:436aaaae2c916ad16631142488e4c82f4296af2404f480e031d866863425d2a2"}, + {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7e28d8fa47a0b30ae1bd7a079519dd852764e31708a7804da6cb6f8b36e3630"}, + {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80c08834a473d08a204d966982a62e11c976228d306a2648c575e3ead12111"}, + {file = "scikit_learn-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:552fd1b6ee22900cf1780d7386a554bb96949e9a359999177cf30211e6b20df6"}, + {file = "scikit_learn-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79970a6d759eb00a62266a31e2637d07d2d28446fca8079cf9afa7c07b0427f8"}, + {file = "scikit_learn-1.3.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:850a00b559e636b23901aabbe79b73dc604b4e4248ba9e2d6e72f95063765603"}, + {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee04835fb016e8062ee9fe9074aef9b82e430504e420bff51e3e5fffe72750ca"}, + {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d953531f5d9f00c90c34fa3b7d7cfb43ecff4c605dac9e4255a20b114a27369"}, + {file = "scikit_learn-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:151ac2bf65ccf363664a689b8beafc9e6aae36263db114b4ca06fbbbf827444a"}, + {file = "scikit_learn-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a885a9edc9c0a341cab27ec4f8a6c58b35f3d449c9d2503a6fd23e06bbd4f6a"}, + {file = "scikit_learn-1.3.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9877af9c6d1b15486e18a94101b742e9d0d2f343d35a634e337411ddb57783f3"}, + {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c470f53cea065ff3d588050955c492793bb50c19a92923490d18fcb637f6383a"}, + {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6e2d7389542eae01077a1ee0318c4fec20c66c957f45c7aac0c6eb0fe3c612"}, + {file = "scikit_learn-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:3a11936adbc379a6061ea32fa03338d4ca7248d86dd507c81e13af428a5bc1db"}, + {file = "scikit_learn-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:998d38fcec96584deee1e79cd127469b3ad6fefd1ea6c2dfc54e8db367eb396b"}, + {file = "scikit_learn-1.3.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ded35e810438a527e17623ac6deae3b360134345b7c598175ab7741720d7ffa7"}, + {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8102d5036e28d08ab47166b48c8d5e5810704daecf3a476a4282d562be9a28"}, + {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7617164951c422747e7c32be4afa15d75ad8044f42e7d70d3e2e0429a50e6718"}, + {file = "scikit_learn-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:1d54fb9e6038284548072df22fd34777e434153f7ffac72c8596f2d6987110dd"}, ] [package.dependencies] joblib = ">=1.1.1" numpy = ">=1.17.3" -scipy = ">=1.3.2" +scipy = ">=1.5.0" threadpoolctl = ">=2.0.0" [package.extras] benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] -examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] -tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy (>=0.961)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=5.3.1)", "pytest-cov (>=2.9.0)", "scikit-image (>=0.16.2)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] +tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"] [[package]] name = "scipy" @@ -7993,6 +8294,17 @@ dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +[[package]] +name = "semver" +version = "3.0.1" +description = "Python helper for Semantic Versioning (https://semver.org)" +optional = true +python-versions = ">=3.7" +files = [ + {file = "semver-3.0.1-py3-none-any.whl", hash = "sha256:2a23844ba1647362c7490fe3995a86e097bb590d16f0f32dfc383008f19e4cdf"}, + {file = "semver-3.0.1.tar.gz", hash = "sha256:9ec78c5447883c67b97f98c3b6212796708191d22e4ad30f4570f840171cbce1"}, +] + [[package]] name = "send2trash" version = "1.8.2" @@ -8277,39 +8589,36 @@ files = [ [[package]] name = "soxr" -version = "0.3.5" +version = "0.3.6" description = "High quality, one-dimensional sample-rate conversion library" optional = true python-versions = ">=3.6" files = [ - {file = "soxr-0.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21c3aa3b2e12351b4310eea9d56cf52ec0769e6832f911ee6ba32f85b7c92baa"}, - {file = "soxr-0.3.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac3d7abc96082ff18a31fb1d678ddc0562f0c5e6d91f1cf0024b044989f63e93"}, - {file = "soxr-0.3.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:145e1e9d1b873a59ce0b5aa463ccacc40cf4bb74d9d8e6cef23433c752bfecea"}, - {file = "soxr-0.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a376b3678801ffc1d0b9ae918b958be29d5884ca1b4bbeab32e29c567723bb3"}, - {file = "soxr-0.3.5-cp310-cp310-win32.whl", hash = "sha256:907e2eb176bdefec40cc8f6015b7cef7f3d525a34219b3580b603ee696cb25c6"}, - {file = "soxr-0.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:0a6dbf9c7b7a3642916aba264c1d0b872b2e173be56204ed1895dbe381a32077"}, - {file = "soxr-0.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:22c08a41e8eee99241fc0e9afb510f9bc7ada4a149d469b8891b596281a27db3"}, - {file = "soxr-0.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdacbe4ce4a1001043f1f8f0744480e294f5c5106e7861fd7033a83a869ba371"}, - {file = "soxr-0.3.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b9acd5c42159eac4a90807524d9aa450d6ea0c750df94455c151165896d922e"}, - {file = "soxr-0.3.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44b5d30f4e0d98b6d0034c00b04d5571ad070ce5cf3772f93193095b01b373de"}, - {file = "soxr-0.3.5-cp311-cp311-win32.whl", hash = "sha256:677d5f44e85fdf0fdef33cd0e6087470732dd2e08fa73286c3659814110d1183"}, - {file = "soxr-0.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:a479984dd17bf0b50fb9fd659eba54a2dc59bf6eba9c29bb3a4a79ecec7dc9a4"}, - {file = "soxr-0.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a2eb4f273ca14d7cfa882b234a03497d0e5dfd6f769a488a0962fe500450838c"}, - {file = "soxr-0.3.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a254c5e1adddb1204d8f327158b6c11a854908a10b5782103f38a67156108334"}, - {file = "soxr-0.3.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5766727dfee4d3616edd2a866a9a0d2f272c01545bed165c5a2676fbfd278723"}, - {file = "soxr-0.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2578664c6f94329685d864cdcae59794121bcbd808441572b2ffd01e7adc45dd"}, - {file = "soxr-0.3.5-cp38-cp38-win32.whl", hash = "sha256:8a6f03804f48d986610eab8ca2b52e50b495f40ec13507741cd95f00ef7c2cb6"}, - {file = "soxr-0.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:592e9393e433501769a7e36b10460f4578c8e4ec3cddeec1aaaea4688e3558ef"}, - {file = "soxr-0.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:93adbf04f51c7a5113059395633c2647f73bf195fa820256e1dd4da78af59275"}, - {file = "soxr-0.3.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:37c4ec7ce275f284b0bf9741e5e6844a211ba1a850b2bf1c6a47769cdd3d109e"}, - {file = "soxr-0.3.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18d5f3151fe4a88dfc37447bc6c397072aedcf36aeffb325cc817350ac5ad78e"}, - {file = "soxr-0.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:549a8358ba3b99a75588453c96aaa802e0c84d40957bdbe1f820f14f83a052ca"}, - {file = "soxr-0.3.5-cp39-cp39-win32.whl", hash = "sha256:799df1875803dc9c4a4d3a7c285b8c1cb34b40dc39dba7ac7bac85d072f936a5"}, - {file = "soxr-0.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:4dd3f61929eb304c109f1f3b6cc8243e3a1a46d636d5bd86b5a7f50609ecd7d6"}, - {file = "soxr-0.3.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:028af32bd4ce4b4c8183bb36da99e23ae954a114034d74538b4cae1bf40a0555"}, - {file = "soxr-0.3.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1299e2aae4d659e222bcbbaca69a51ee99571486070ed49a393725ea6010a8e9"}, - {file = "soxr-0.3.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:162f4e8b9a014c6819b4db6def2d43f7f4d97432ae33f2edfc8e5d0c97cf1cb3"}, - {file = "soxr-0.3.5.tar.gz", hash = "sha256:b6b60f6381c98249a2f2a594e9234b647b78856c76c060597d53ed27b6efd249"}, + {file = "soxr-0.3.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8f64bc45a30ee6d9765cc4b1fdb6b9d5ec7d2880fc42a2e968c662ed3abe83c7"}, + {file = "soxr-0.3.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8fe418fcee2173422b5c25ca4d9e03a86dd9d08f1502b0077987e2018ac943df"}, + {file = "soxr-0.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9074ee0901057353455febc5fe91a83dae1f97ade4e96acc8b95bd3d70cb495"}, + {file = "soxr-0.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0b01688e7e591411a3499a62427a87236be31c84d6a88afd381947568f445df"}, + {file = "soxr-0.3.6-cp310-cp310-win_amd64.whl", hash = "sha256:03834c82977dc8976a183e22dfc9dd0f65198f416ac79f6bb13310e63c795662"}, + {file = "soxr-0.3.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:97a89e3798f22bd04c475b30c041ee2f2e223effb4f80a71d4f5e278f7939138"}, + {file = "soxr-0.3.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:705af37f7a63d3abecf9121bff392241636b403bcf6e232fb527d0b108aa8700"}, + {file = "soxr-0.3.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e73f8b9fb5ac3ad26155a6c789284bea1de98701c184e0ecb9cb328e9f81dfc2"}, + {file = "soxr-0.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1add0aeed67f2396d7b4cefa36887ba8db1a185791f085c12aafa82e96d6fdf"}, + {file = "soxr-0.3.6-cp311-cp311-win_amd64.whl", hash = "sha256:ba651652a64623a61ea86717357dcbf4d71f7f3695da979056ca257890f47d10"}, + {file = "soxr-0.3.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c17f5efa78575afdbb854afbead11be5b209340e0ba801073ea4af31eeb567e7"}, + {file = "soxr-0.3.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:475f86acd92e97275b86940afabf0f108252b6a684fc724cef8019308d234162"}, + {file = "soxr-0.3.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5d31d750886651137664cf55283e96a6f324d914d137f758d339d08a18347d"}, + {file = "soxr-0.3.6-cp37-cp37m-win_amd64.whl", hash = "sha256:15277be23858ae9e1eeaec8151bbcd41ebf70c35ea067bb5e897f6834804256c"}, + {file = "soxr-0.3.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac7da6054eff748f414cfaa8172249c492da7e88dde6aa97bfb2272d87727060"}, + {file = "soxr-0.3.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd1874aa176b5ae755f26c5bd7d9d45217839719a4343862d2fe72e50c57dd16"}, + {file = "soxr-0.3.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c40a25ae9520d7752e7ece07c3ec2bc58f30893c20a58c9d7a5311e7499290"}, + {file = "soxr-0.3.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ad635ee478635efca9457b811bba373272319b45a1941d7f9d9ac8c2e98b3bc"}, + {file = "soxr-0.3.6-cp38-cp38-win_amd64.whl", hash = "sha256:dcf107a32d971e329b330a8f2026fedb118e39f5d549f65743184f8ec5d38204"}, + {file = "soxr-0.3.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:385a37d39813e1d633229bcd94ab6bd76b27b779d38f2f6cbc390926f3965d31"}, + {file = "soxr-0.3.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2a78c61bf65b2e9d5612cbcab449a4a070ea84a18ff0757a840e0fa49b574225"}, + {file = "soxr-0.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79872546786c3d05ff90260197863811532823fcfb58aeb647e916c6aa57299d"}, + {file = "soxr-0.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c72ab44bfd72ecadb0a29e38487c241eb69a9867d3476e528c64e957fc06ff7"}, + {file = "soxr-0.3.6-cp39-cp39-win_amd64.whl", hash = "sha256:2b2dd2e2625b4b98360cd1607d72e4bd2eac60de3a18244b8a4d45f9168a4541"}, + {file = "soxr-0.3.6.tar.gz", hash = "sha256:6b3d98da77353b5bbb4401cef83cec7f1538844dc27c7badf89c2855b43f42b4"}, ] [package.dependencies] @@ -8321,60 +8630,60 @@ test = ["pytest"] [[package]] name = "sqlalchemy" -version = "2.0.16" +version = "2.0.20" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7641f6ed2682de84d77c4894cf2e43700f3cf7a729361d7f9cac98febf3d8614"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8d3cbdb2f07fb0e4b897dc1df39166735e194fb946f28f26f4c9f9801c8b24f7"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08a791c75d6154d46914d1e23bd81d9455f2950ec1de81f2723848c593d2c8b"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91eb8f89fcce8f709f8a4d65d265bc48a80264ee14c7c9e955f3222f19b4b39c"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fc1dae11bd5167f9eb53b3ccad24a79813004612141e76de21cf4c028dc30b34"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b2801f85c5c0293aa710f8aa5262c707a83c1c203962ae5a22b4d9095e71aa9d"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-win32.whl", hash = "sha256:c5e333b81fe10d14efebd4e9429b7bb865ed9463ca8bef07a7136dfa1fd4a37b"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-win_amd64.whl", hash = "sha256:f387b496a4c9474d8580195bb2660264a3f295a04d3a9d00f4fa15e9e597427e"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7be04dbe3470fe8dd332fdb48c979887c381ef6c635eddf2dec43d2766111be4"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2938edc512dd1fa48653e14c1655ab46144d4450f0e6b33da7acd8ba77fbfd7"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5a2856e12cf5f54301ddf043bcbf0552561d61555e1bcf348b63f42b8e1eec2"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d320fde566b864adbc19abb40ecb80f4e25d6f084639969bb972d5cca16858"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e85e315725807c127ad8ba3d628fdb861cf9ebfb0e10c39a97c01e257cdd71b"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:63ea36c08792a7a8a08958bc806ecff6b491386feeaf14607c3d9d2d9325e67f"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-win32.whl", hash = "sha256:bdaf89dd82f4a0e1b8b5ffc9cdc0c9551be6175f7eee5af6a838e92ba2e57100"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-win_amd64.whl", hash = "sha256:5a934eff1a2882137be3384826f997db8441d43b61fda3094923e69fffe474be"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fbcc51fdbc89fafe4f4fe66f59372a8be88ded04de34ef438ab04f980beb12d4"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff6496ad5e9dc8baeb93a151cc2f599d01e5f8928a2aaf0b09a06428fdbaf553"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d6ef848e5afcd1bda3e9a843751f845c0ca888b61e669237680e913d84ec206"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3ef876615ff4b53e2033022195830ec4941a6e21068611f8d77de60203b90a98"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8544c6e62eacb77d5106e2055ef10f2407fc0dbd547e879f8745b2032eefd2bc"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-win32.whl", hash = "sha256:2f3b6c31b915159b96b68372212fa77f69230b0a32acab40cf539d2823954f5a"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-win_amd64.whl", hash = "sha256:d0c96592f54edd571e00ba6b1ed5df8263328ca1da9e78088c0ebc93c2e6562c"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a2e9f50a906d0b81292576a9fb458f8cace904c81a67088f4a2ca9ff2856f55d"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dc97238fa44be86971270943a0c21c19ce18b8d1596919048e57912e8abc02cc"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0db6734cb5644c55d0262a813b764c6e2cda1e66e939a488b3d6298cdc7344c2"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:131f0c894c6572cb1bdcf97c92d999d3128c4ff1ca13061296057072f61afe13"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f662cf69484c59f8a3435902c40dfc34d86050bdb15e23d437074ce9f153306b"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b72f4e4def50414164a1d899f2ce4e782a029fad0ed5585981d1611e8ae29a74"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-win32.whl", hash = "sha256:0e4645b260cfe375a0603aa117f0a47680864cf37833129da870919e88b08d8f"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-win_amd64.whl", hash = "sha256:f409f35a0330ab0cb18ece736b86d8b8233c64f4461fcb10993f67afc0ac7e5a"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e19546924f0cf2ec930d1faf318b7365e5827276410a513340f31a2b423e96a4"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ce1fc3f64fd42d5f763d6b83651471f32920338a1ba107a3186211474861af57"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e2569dac4e3cb85365b91ab569d06a221e0e17e65ce59949d00c3958946282b"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61f2035dea56ff1a429077e481496f813378beb02b823d2e3e7eb05bc1a7a8ca"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:81d867c1be5abd49f7e547c108391f371a9d980ba7ec34666c50d683f782b754"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2de1477af7f48c633b8ecb88245aedd811dca88e88aee9e9d787b388abe74c44"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-win32.whl", hash = "sha256:5e8522b49e0e640287308b68f71cc338446bbe1c226c8f81743baa91b0246e92"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-win_amd64.whl", hash = "sha256:43e69c8c1cea0188b7094e22fb93ae1a1890aac748628b7e925024a206f75368"}, - {file = "SQLAlchemy-2.0.16-py3-none-any.whl", hash = "sha256:53081c6fce0d49bb36d05f12dc87e008c9b0df58a163b792c5fc4ac638925f98"}, - {file = "SQLAlchemy-2.0.16.tar.gz", hash = "sha256:1e2caba78e7d1f5003e88817b7a1754d4e58f4a8f956dc423bf8e304c568ab09"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759b51346aa388c2e606ee206c0bc6f15a5299f6174d1e10cadbe4530d3c7a98"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1506e988ebeaaf316f183da601f24eedd7452e163010ea63dbe52dc91c7fc70e"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5768c268df78bacbde166b48be788b83dddaa2a5974b8810af422ddfe68a9bc8"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3f0dd6d15b6dc8b28a838a5c48ced7455c3e1fb47b89da9c79cc2090b072a50"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:243d0fb261f80a26774829bc2cee71df3222587ac789b7eaf6555c5b15651eed"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb6d77c31e1bf4268b4d61b549c341cbff9842f8e115ba6904249c20cb78a61"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-win32.whl", hash = "sha256:bcb04441f370cbe6e37c2b8d79e4af9e4789f626c595899d94abebe8b38f9a4d"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-win_amd64.whl", hash = "sha256:d32b5ffef6c5bcb452723a496bad2d4c52b346240c59b3e6dba279f6dcc06c14"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd81466bdbc82b060c3c110b2937ab65ace41dfa7b18681fdfad2f37f27acdd7"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6fe7d61dc71119e21ddb0094ee994418c12f68c61b3d263ebaae50ea8399c4d4"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4e571af672e1bb710b3cc1a9794b55bce1eae5aed41a608c0401885e3491179"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3364b7066b3c7f4437dd345d47271f1251e0cfb0aba67e785343cdbdb0fff08c"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1be86ccea0c965a1e8cd6ccf6884b924c319fcc85765f16c69f1ae7148eba64b"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1d35d49a972649b5080557c603110620a86aa11db350d7a7cb0f0a3f611948a0"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-win32.whl", hash = "sha256:27d554ef5d12501898d88d255c54eef8414576f34672e02fe96d75908993cf53"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-win_amd64.whl", hash = "sha256:411e7f140200c02c4b953b3dbd08351c9f9818d2bd591b56d0fa0716bd014f1e"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3c6aceebbc47db04f2d779db03afeaa2c73ea3f8dcd3987eb9efdb987ffa09a3"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d3f175410a6db0ad96b10bfbb0a5530ecd4fcf1e2b5d83d968dd64791f810ed"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea8186be85da6587456c9ddc7bf480ebad1a0e6dcbad3967c4821233a4d4df57"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c3d99ba99007dab8233f635c32b5cd24fb1df8d64e17bc7df136cedbea427897"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:76fdfc0f6f5341987474ff48e7a66c3cd2b8a71ddda01fa82fedb180b961630a"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-win32.whl", hash = "sha256:d3793dcf5bc4d74ae1e9db15121250c2da476e1af8e45a1d9a52b1513a393459"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-win_amd64.whl", hash = "sha256:79fde625a0a55220d3624e64101ed68a059c1c1f126c74f08a42097a72ff66a9"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:599ccd23a7146e126be1c7632d1d47847fa9f333104d03325c4e15440fc7d927"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1a58052b5a93425f656675673ef1f7e005a3b72e3f2c91b8acca1b27ccadf5f4"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79543f945be7a5ada9943d555cf9b1531cfea49241809dd1183701f94a748624"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63e73da7fb030ae0a46a9ffbeef7e892f5def4baf8064786d040d45c1d6d1dc5"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ce5e81b800a8afc870bb8e0a275d81957e16f8c4b62415a7b386f29a0cb9763"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb0d3e94c2a84215532d9bcf10229476ffd3b08f481c53754113b794afb62d14"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-win32.whl", hash = "sha256:8dd77fd6648b677d7742d2c3cc105a66e2681cc5e5fb247b88c7a7b78351cf74"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-win_amd64.whl", hash = "sha256:6f8a934f9dfdf762c844e5164046a9cea25fabbc9ec865c023fe7f300f11ca4a"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:26a3399eaf65e9ab2690c07bd5cf898b639e76903e0abad096cd609233ce5208"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4cde2e1096cbb3e62002efdb7050113aa5f01718035ba9f29f9d89c3758e7e4e"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b09ba72e4e6d341bb5bdd3564f1cea6095d4c3632e45dc69375a1dbe4e26ec"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b74eeafaa11372627ce94e4dc88a6751b2b4d263015b3523e2b1e57291102f0"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:77d37c1b4e64c926fa3de23e8244b964aab92963d0f74d98cbc0783a9e04f501"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:eefebcc5c555803065128401a1e224a64607259b5eb907021bf9b175f315d2a6"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-win32.whl", hash = "sha256:3423dc2a3b94125094897118b52bdf4d37daf142cbcf26d48af284b763ab90e9"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-win_amd64.whl", hash = "sha256:5ed61e3463021763b853628aef8bc5d469fe12d95f82c74ef605049d810f3267"}, + {file = "SQLAlchemy-2.0.20-py3-none-any.whl", hash = "sha256:63a368231c53c93e2b67d0c5556a9836fdcd383f7e3026a39602aad775b14acf"}, + {file = "SQLAlchemy-2.0.20.tar.gz", hash = "sha256:ca8a5ff2aa7f3ade6c498aaafce25b1eaeabe4e42b73e25519183e4566a16fc6"}, ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\""} typing-extensions = ">=4.2.0" [package.extras] -aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] asyncio = ["greenlet (!=0.4.17)"] asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] @@ -8503,13 +8812,13 @@ mpmath = ">=0.19" [[package]] name = "syrupy" -version = "4.0.2" +version = "4.2.1" description = "Pytest Snapshot Test Utility" optional = false python-versions = ">=3.8.1,<4" files = [ - {file = "syrupy-4.0.2-py3-none-any.whl", hash = "sha256:dfd1f0fad298eee753de4f2471d4346412c4435885c4b7beea648d4934c6620a"}, - {file = "syrupy-4.0.2.tar.gz", hash = "sha256:3c75ab6866580679b2cb9abe78e74c3e2011fffc6333651c6beb2a78a716ab80"}, + {file = "syrupy-4.2.1-py3-none-any.whl", hash = "sha256:4054878270184979a20e78b17a19f5f19eb62c6cbdc3adac6f432a528ddeb099"}, + {file = "syrupy-4.2.1.tar.gz", hash = "sha256:8c2f4e0c4416780f21f3cd696c64b046d79ddff43522d6a9a4ad7a4f48e9a594"}, ] [package.dependencies] @@ -8518,13 +8827,12 @@ pytest = ">=7.0.0,<8.0.0" [[package]] name = "telethon" -version = "1.28.5" +version = "1.29.3" description = "Full-featured Telegram client library for Python 3" optional = true python-versions = ">=3.5" files = [ - {file = "Telethon-1.28.5-py3-none-any.whl", hash = "sha256:edc42fd58b8e1569830d3ead564cafa60fd51d684f03ee2a1fdd5f77a5a10438"}, - {file = "Telethon-1.28.5.tar.gz", hash = "sha256:b3990ec22351a3f3e1af376729c985025bbdd3bdabdde8c156112c3d3dfe1941"}, + {file = "Telethon-1.29.3.tar.gz", hash = "sha256:cac3091ab61bdd2286bdfb72fb3ab7cc86a9e8d3327ff8fec56d215e05009e1e"}, ] [package.dependencies] @@ -8536,13 +8844,13 @@ cryptg = ["cryptg"] [[package]] name = "tenacity" -version = "8.2.2" +version = "8.2.3" description = "Retry code until it succeeds" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, - {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, + {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, + {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, ] [package.extras] @@ -8550,214 +8858,203 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] [[package]] name = "tensorboard" -version = "2.11.2" +version = "2.13.0" description = "TensorBoard lets you watch Tensors Flow" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tensorboard-2.11.2-py3-none-any.whl", hash = "sha256:cbaa2210c375f3af1509f8571360a19ccc3ded1d9641533414874b5deca47e89"}, + {file = "tensorboard-2.13.0-py3-none-any.whl", hash = "sha256:ab69961ebddbddc83f5fa2ff9233572bdad5b883778c35e4fe94bf1798bd8481"}, ] [package.dependencies] absl-py = ">=0.4" google-auth = ">=1.6.3,<3" -google-auth-oauthlib = ">=0.4.1,<0.5" -grpcio = ">=1.24.3" +google-auth-oauthlib = ">=0.5,<1.1" +grpcio = ">=1.48.2" markdown = ">=2.6.8" numpy = ">=1.12.0" -protobuf = ">=3.9.2,<4" +protobuf = ">=3.19.6" requests = ">=2.21.0,<3" setuptools = ">=41.0.0" -tensorboard-data-server = ">=0.6.0,<0.7.0" -tensorboard-plugin-wit = ">=1.6.0" +tensorboard-data-server = ">=0.7.0,<0.8.0" werkzeug = ">=1.0.1" wheel = ">=0.26" [[package]] name = "tensorboard-data-server" -version = "0.6.1" +version = "0.7.1" description = "Fast data loading for TensorBoard" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tensorboard_data_server-0.6.1-py3-none-any.whl", hash = "sha256:809fe9887682d35c1f7d1f54f0f40f98bb1f771b14265b453ca051e2ce58fca7"}, - {file = "tensorboard_data_server-0.6.1-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:fa8cef9be4fcae2f2363c88176638baf2da19c5ec90addb49b1cde05c95c88ee"}, - {file = "tensorboard_data_server-0.6.1-py3-none-manylinux2010_x86_64.whl", hash = "sha256:d8237580755e58eff68d1f3abefb5b1e39ae5c8b127cc40920f9c4fb33f4b98a"}, -] - -[[package]] -name = "tensorboard-plugin-wit" -version = "1.8.1" -description = "What-If Tool TensorBoard plugin." -optional = true -python-versions = "*" -files = [ - {file = "tensorboard_plugin_wit-1.8.1-py3-none-any.whl", hash = "sha256:ff26bdd583d155aa951ee3b152b3d0cffae8005dc697f72b44a8e8c2a77a8cbe"}, + {file = "tensorboard_data_server-0.7.1-py3-none-any.whl", hash = "sha256:9938bd39f5041797b33921066fba0eab03a0dd10d1887a05e62ae58841ad4c3f"}, + {file = "tensorboard_data_server-0.7.1-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:be8d016a1aa394e6198280d4a3dc37898f56467310c5f5e617cac10a783e055a"}, + {file = "tensorboard_data_server-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:255c02b7f5b03dd5c0a88c928e563441ff39e1d4b4a234cdbe09f016e53d9594"}, ] [[package]] name = "tensorflow" -version = "2.11.1" +version = "2.13.0" description = "TensorFlow is an open source machine learning framework for everyone." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tensorflow-2.11.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:ac0e46c5de7985def49e4f688a0ca4180949a4d5dc62b89e9c6640db3c3982ba"}, - {file = "tensorflow-2.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45b1669c523fa6dc240688bffe79f08dfbb76bf5e23a7fe10e722ba658637a44"}, - {file = "tensorflow-2.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a96595e0c068d54717405fa12f36b4a5bb0a9fc53fb9065155a92cff944b35b"}, - {file = "tensorflow-2.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:13197f18f31a52d3f2eac28743d1b06abb8efd86017f184110a1b16841b745b1"}, - {file = "tensorflow-2.11.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9f030f1bc9e7763fa03ec5738323c42021ababcd562fe861b3a3f41e9ff10e43"}, - {file = "tensorflow-2.11.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f12855c1e8373c1327650061fd6a9a3d3772e1bac8241202ea8ccb56213d005"}, - {file = "tensorflow-2.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cd4279cb500074a8ab28af116af7f060f0b015651bef552769d51e55d6fd5c"}, - {file = "tensorflow-2.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:f5a2f75f28cd5fb615a5306f2091eac7da3a8fff949ab8804ec06b8e3682f837"}, - {file = "tensorflow-2.11.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ea93246ad6c90ff0422f06a82164836fe8098989a8a65c3b02c720eadbe15dde"}, - {file = "tensorflow-2.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ba6b3c2f68037e965a19427a1f2a5f0351b7ceae6c686938a8485b08e1e1f3"}, - {file = "tensorflow-2.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ddd5c61f68d8125c985370de96a24a80aee5e3f1604efacec7e1c34ca72de24"}, - {file = "tensorflow-2.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d8834df3f72d7eab56bc2f34f2e52b82d705776b80b36bf5470b7538c9865c"}, + {file = "tensorflow-2.13.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:89125443e998548059c4e4a129dfab2b1ff7f2fd4c8eaed97842c3cd9b663101"}, + {file = "tensorflow-2.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5e0fdadec59de3d11c5b5129ddc38e739bde7aa13095b82e19d4380e14d04999"}, + {file = "tensorflow-2.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ad6a7ff49b4a690fbf37a5adaf28ba2686350a859c5f13c58dc8d2cc670375"}, + {file = "tensorflow-2.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8f0b69ee2f800399fc6bc7ec55fecfa33662d136e425485959d90638f32a32a"}, + {file = "tensorflow-2.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb2ff1129c93e853c19897d6a22ed0ec56387f5c6290ec03dec1c6f7b80bc396"}, + {file = "tensorflow-2.13.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:6fff426661d286a4c634da44275d2ea2b951f392f3e65c8603681e7cb040586a"}, + {file = "tensorflow-2.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:076d953a1508dc58bf95f30f58bcc9ee364b1353c61e143cb20c2dada91afb05"}, + {file = "tensorflow-2.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2978b39e8b3919059b5fd9e28508d50a77965d06ed0b537ed71c97de22dabdf"}, + {file = "tensorflow-2.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19ee67901702b26787ad685cca65730c163c101c0c2f238a2584d714e0fa8c25"}, + {file = "tensorflow-2.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:00060c5516a61e30c51936084ebc37091d116efe9ae74b2818cbd8b2006218e7"}, + {file = "tensorflow-2.13.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:948003b5a23b72b3d89746d729e62ec5f01e47460f05521b2211d95069f569ba"}, + {file = "tensorflow-2.13.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:06559eeaa69e6561cccbe2d02b015bcec663e875c8bbc4643f55692476e52147"}, + {file = "tensorflow-2.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbb83561bb7d55859eaefc70c674e58713d4e10c10927423ed836a5289bbfa86"}, + {file = "tensorflow-2.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2822ac48c38d69b7fb104e606dacbd763c4bf5d3b20791f25be16a5076d01912"}, + {file = "tensorflow-2.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:9c04bc3023b6c4cfb9ee9759c3f03f21993891b4c345df52eb5519204fbf28c0"}, + {file = "tensorflow-2.13.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:7a08c0e2938ed5b642a8787678123827477b81d316055d5073fff82fa183eb82"}, + {file = "tensorflow-2.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:e0cf94d36ceaba8f158c6e15404a81fd5b3aa4cb04147c674cf55bd1aec78154"}, + {file = "tensorflow-2.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de77306c0c22c9d8754f54700752ac3a1efee895c5357308e6594436404bfbc0"}, + {file = "tensorflow-2.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72d68b8c2f382e2d01b956c8ba516c0a7d5dad98111dd351bf82bfa646aa1c72"}, + {file = "tensorflow-2.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:fa7abe265cc3ebccc9b405a280bf674824c6d85df5e6ccfa985987b3c9d265b4"}, ] [package.dependencies] absl-py = ">=1.0.0" astunparse = ">=1.6.0" -flatbuffers = ">=2.0" +flatbuffers = ">=23.1.21" gast = ">=0.2.1,<=0.4.0" google-pasta = ">=0.1.1" grpcio = ">=1.24.3,<2.0" h5py = ">=2.9.0" -keras = ">=2.11.0,<2.12" +keras = ">=2.13.1,<2.14" libclang = ">=13.0.0" -numpy = ">=1.20" +numpy = ">=1.22,<=1.24.3" opt-einsum = ">=2.3.2" packaging = "*" -protobuf = ">=3.9.2,<3.20" +protobuf = ">=3.20.3,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" setuptools = "*" six = ">=1.12.0" -tensorboard = ">=2.11,<2.12" -tensorflow-estimator = ">=2.11.0,<2.12" +tensorboard = ">=2.13,<2.14" +tensorflow-estimator = ">=2.13.0,<2.14" tensorflow-io-gcs-filesystem = {version = ">=0.23.1", markers = "platform_machine != \"arm64\" or platform_system != \"Darwin\""} termcolor = ">=1.1.0" -typing-extensions = ">=3.6.6" +typing-extensions = ">=3.6.6,<4.6.0" wrapt = ">=1.11.0" [[package]] name = "tensorflow-estimator" -version = "2.11.0" +version = "2.13.0" description = "TensorFlow Estimator." optional = true python-versions = ">=3.7" files = [ - {file = "tensorflow_estimator-2.11.0-py2.py3-none-any.whl", hash = "sha256:ea3b64acfff3d9a244f06178c9bdedcbdd3f125b67d0888dba8229498d06468b"}, + {file = "tensorflow_estimator-2.13.0-py2.py3-none-any.whl", hash = "sha256:6f868284eaa654ae3aa7cacdbef2175d0909df9fcf11374f5166f8bf475952aa"}, ] [[package]] name = "tensorflow-hub" -version = "0.13.0" +version = "0.14.0" description = "TensorFlow Hub is a library to foster the publication, discovery, and consumption of reusable parts of machine learning models." optional = true python-versions = "*" files = [ - {file = "tensorflow_hub-0.13.0-py2.py3-none-any.whl", hash = "sha256:3544f4fd9fd99e4eeb6da1b5b5320e4a2dbdef7f9bb778f66f76d6790f32dd65"}, + {file = "tensorflow_hub-0.14.0-py2.py3-none-any.whl", hash = "sha256:519c6b56c4d304667fbd8ce66bd637e6a750c901215468db2cc6bfd0739bb0b0"}, ] [package.dependencies] numpy = ">=1.12.0" protobuf = ">=3.19.6" -[package.extras] -make-image-classifier = ["keras-preprocessing[image]"] -make-nearest-neighbour-index = ["annoy", "apache-beam"] - [[package]] name = "tensorflow-io-gcs-filesystem" -version = "0.32.0" +version = "0.33.0" description = "TensorFlow IO" optional = true python-versions = ">=3.7, <3.12" files = [ - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:74a7e25e83d4117a7ebb09a3f247553a5497393ab48c3ee0cf0d17b405026817"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:045d51bba586390d0545fcd8a18727d62b175eb142f6f4c6d719d39de40774cd"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db682e9a510c27dd35710ba5a2c62c371e25b727741b2fe3a920355fa501e947"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:7f15fd22e592661b10de317be2f42a0f84be7bfc5e6a565fcfcb04b60d625b78"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:336d9b3fe6b55aea149c4f6aa1fd6ffaf27d4e5c37e55a182340b47caba38846"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:842f5f09cd756bdb3b4d0b5571b3a6f72fd534d42da938b9acf0ef462995eada"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:1ce80e1555d6ee88dda67feddf366cc8b30252b5837a7a17303df7b06a71fc2e"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05e65d3cb6c93a7929b384d86c6369c63cbbab8a770440a3d95e094878403f9f"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:21de7dcc06eb1e7de3c022b0072d90ba35ef886578149663437aa7a6fb5bf6b3"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:79fdd02103b8ae9f8b89af41f744c013fa1caaea709de19833917795e3063857"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5635df0bbe40f971dc1b946e3372744b0bdfda45c38ffcd28ef53a32bb8da4da"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:122be149e5f6a030f5c2901be0cc3cb07619232f7b03889e2cdf3da1c0d4f92f"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8214cdf85bea694160f9035ff395221c1e25e119784ccb4c104919b1f5dec84e"}, - {file = "tensorflow_io_gcs_filesystem-0.32.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28202492d904a6e280cf27560791e87ac1c7566000db82065d63a70c27008af2"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:2dd49262831ee20f03fd3f5d2c679e7111cd1575e0ad60f60b5632f2da555bfc"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e1d833f6856aec465652c0d7a75a7c28cf83b132b8351ba0c4df4e05136c403"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8295a65fd4fa731b06b31fab223e3ba11369430537169934a17f7bcc07dfef76"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:58f953665620725c842de8f4074c14779bf11d9081e4d0d8f2b75145de9ee20a"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac69d8ba4d27435a5e199248b3a3befc19e65d86a97a52a19ee1f43195f51207"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c793e313e9cfed6caa328ec1a162844006a4bc016ba1d116813d7541938a9"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:99c063f766fdb431d555f17fa185979195abb0477445f054fe16567bfd340fd7"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfa1df21535f7c945041fda99da2940a56b67d86e20aa2ac8cde3d371bc08659"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8d3ddd86a0f7cf4d35f2401d5b28d574d0f296b4e4349c69c671f7b83fc6ce8f"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4657f92dcc2474adc773bf69b836818b416c22cfadaac05b9b64f2a53f3009ee"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf4fc3a44f75b7dccb7b40ca709872bf7f0e812522f82aa7881ecdc0d86af48"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:68db367697353184667bbd94faf53a58e7b695acb905f23da1e8ccad8bd6b451"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a57e64cd5d22085f9b475df9d12086a894eb8861524970c8839a2ec315841a20"}, + {file = "tensorflow_io_gcs_filesystem-0.33.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7916ca0accdd259c3fbee1b1f0816d61d6e8a639aa5bc1d4cdfbaf63b344623"}, ] [package.extras] -tensorflow = ["tensorflow (>=2.12.0,<2.13.0)"] -tensorflow-aarch64 = ["tensorflow-aarch64 (>=2.12.0,<2.13.0)"] -tensorflow-cpu = ["tensorflow-cpu (>=2.12.0,<2.13.0)"] -tensorflow-gpu = ["tensorflow-gpu (>=2.12.0,<2.13.0)"] -tensorflow-rocm = ["tensorflow-rocm (>=2.12.0,<2.13.0)"] +tensorflow = ["tensorflow (>=2.13.0,<2.14.0)"] +tensorflow-aarch64 = ["tensorflow-aarch64 (>=2.13.0,<2.14.0)"] +tensorflow-cpu = ["tensorflow-cpu (>=2.13.0,<2.14.0)"] +tensorflow-gpu = ["tensorflow-gpu (>=2.13.0,<2.14.0)"] +tensorflow-rocm = ["tensorflow-rocm (>=2.13.0,<2.14.0)"] [[package]] name = "tensorflow-macos" -version = "2.11.0" +version = "2.13.0" description = "TensorFlow is an open source machine learning framework for everyone." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tensorflow_macos-2.11.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0bdbd1bb564d01bd735d6d11451f0658c3dd8187369ee9dd3ed6de6bbdd6df53"}, - {file = "tensorflow_macos-2.11.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:66eb67915cf418eddd3b4c158132609efd50895fa09fd55e4b2f14a3ab85bd34"}, - {file = "tensorflow_macos-2.11.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:6810731e2c8353123f6c9c944d2765b58a2226e7eb9fec1e360f73977c6c6aa4"}, - {file = "tensorflow_macos-2.11.0-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:881b36d97b67d24197250a091c52c31db14aecfdbf1ac20418a148ec37321978"}, - {file = "tensorflow_macos-2.11.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8d56b0d0bd140008b0cc4877804c9c310e1e2735444fa99bc7c88ffb2909153d"}, - {file = "tensorflow_macos-2.11.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:db97cd91b905bd01069069f07325a2a291705222eb4914148b9574090a5815ae"}, + {file = "tensorflow_macos-2.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:331cc23682374ca5f3f92e069bd7fbb6e4d48a50278a9cd05e5b33f16d9a31e7"}, + {file = "tensorflow_macos-2.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5dca8291125c0151bf426a2789689e02c623ce4540432cf66a073d361d3d6870"}, + {file = "tensorflow_macos-2.13.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b0cea604f50a032dc426d7a6a91dc53a9df001cfa94fc814972e9d4cf062d31b"}, + {file = "tensorflow_macos-2.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:d9571357a39cc8cdecfd22e67dfdcebf840be67a88a8c7464bd3b9b3e0aad446"}, ] [package.dependencies] absl-py = ">=1.0.0" astunparse = ">=1.6.0" -flatbuffers = ">=2.0" +flatbuffers = ">=23.1.21" gast = ">=0.2.1,<=0.4.0" google-pasta = ">=0.1.1" grpcio = ">=1.24.3,<2.0" h5py = ">=2.9.0" -keras = ">=2.11.0,<2.12" +keras = ">=2.13.1,<2.14" libclang = ">=13.0.0" -numpy = ">=1.20" +numpy = ">=1.22,<=1.24.3" opt-einsum = ">=2.3.2" packaging = "*" -protobuf = ">=3.9.2,<3.20" +protobuf = ">=3.20.3,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" setuptools = "*" six = ">=1.12.0" -tensorboard = ">=2.11,<2.12" -tensorflow-estimator = ">=2.11.0,<2.12" +tensorboard = ">=2.13,<2.14" +tensorflow-estimator = ">=2.13.0,<2.14" termcolor = ">=1.1.0" -typing-extensions = ">=3.6.6" +typing-extensions = ">=3.6.6,<4.6.0" wrapt = ">=1.11.0" [[package]] name = "tensorflow-text" -version = "2.11.0" +version = "2.13.0" description = "TF.Text is a TensorFlow library of text related ops, modules, and subgraphs." optional = true python-versions = "*" files = [ - {file = "tensorflow_text-2.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9d4797e331da37419f2b19159fbc0f125ed60467340e9a209ab8f8d65856704"}, - {file = "tensorflow_text-2.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4abede4191820ae6d5a7c74f02c335a5f2e2df174eaa38b481b2b82a3330152"}, - {file = "tensorflow_text-2.11.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:49194f85e03a2e3f017ac8e0e3d3927104fa20e6e883b43087cff032fe2cbe14"}, - {file = "tensorflow_text-2.11.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3ea14efeb1d627ed5098e791e95bb98ee6f9f928f9eda785205e184cc20b428"}, - {file = "tensorflow_text-2.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a207ceea4c71a932c35e4d208d7b8c3edc65a5ba0eebfdc9233fc8da546625c9"}, - {file = "tensorflow_text-2.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:506fbea82a1ec566d7d0f771adad589c44727d904311103169466d88236ec2c8"}, - {file = "tensorflow_text-2.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cf0033bf47872b57d46f78d7058db5676f396a9327fa4d063a2c73cce43586ae"}, - {file = "tensorflow_text-2.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56693df33461ab0e7f32549010ca38a8d01291fd67142e0396d0aeb9fcad2e09"}, + {file = "tensorflow_text-2.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef7694623a79793a1db0ac66ab834596ea40f4fe5c7fdd92e402537c9e496bf7"}, + {file = "tensorflow_text-2.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94589df89c531f4c2c61029203c45d1f299f3204b47c3a1aa8ff636e7f58dadf"}, + {file = "tensorflow_text-2.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:142b35fc7f633250db2c4810e0e60eadc015292c7dde3fff6189213056f8fd7d"}, + {file = "tensorflow_text-2.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8af4379cfe8f454d3e8ad38627153e20d852a5ba10591b47c9dbb64490ae4f16"}, + {file = "tensorflow_text-2.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d764c90ecceb9b603170a5c9b448b1cd369709c24d230913be83156ac4e3a431"}, + {file = "tensorflow_text-2.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b98316df6dd576e62a7a56bd093d1488446d84831bacd1cbb46eb339585fd381"}, ] [package.dependencies] -tensorflow = {version = ">=2.11.0,<2.12", markers = "platform_machine != \"arm64\" or platform_system != \"Darwin\""} +tensorflow = {version = ">=2.13.0,<2.14", markers = "platform_machine != \"arm64\" or platform_system != \"Darwin\""} tensorflow-hub = ">=0.8.0" -tensorflow-macos = {version = ">=2.11.0,<2.12", markers = "platform_machine == \"arm64\" and platform_system == \"Darwin\""} +tensorflow-macos = {version = ">=2.13.0,<2.14", markers = "platform_machine == \"arm64\" and platform_system == \"Darwin\""} [package.extras] -tensorflow-cpu = ["tensorflow-cpu (>=2.11.0,<2.12)"] +tensorflow-cpu = ["tensorflow-cpu (>=2.12.0,<2.13)"] tests = ["absl-py", "pytest", "tensorflow-datasets (>=3.2.0)"] [[package]] @@ -8810,13 +9107,13 @@ pyphen = "*" [[package]] name = "threadpoolctl" -version = "3.1.0" +version = "3.2.0" description = "threadpoolctl" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "threadpoolctl-3.1.0-py3-none-any.whl", hash = "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b"}, - {file = "threadpoolctl-3.1.0.tar.gz", hash = "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380"}, + {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"}, + {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, ] [[package]] @@ -9091,40 +9388,40 @@ scipy = ["scipy"] [[package]] name = "tornado" -version = "6.3.2" +version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, - {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, - {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, - {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, ] [[package]] name = "tqdm" -version = "4.65.0" +version = "4.66.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -9146,18 +9443,18 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] [[package]] name = "transformers" -version = "4.30.2" +version = "4.32.0" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = true -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "transformers-4.30.2-py3-none-any.whl", hash = "sha256:c332e3a3097f9ed89ce556b403251235931c00237b8bc2d7adaa19d226c13f1d"}, - {file = "transformers-4.30.2.tar.gz", hash = "sha256:f4a8aac4e1baffab4033f4a345b0d7dc7957d12a4f1ba969afea08205a513045"}, + {file = "transformers-4.32.0-py3-none-any.whl", hash = "sha256:32d8adf0ed76285508e7fd66657b4448ec1f882599ae6bf6f9c36bd7bf798402"}, + {file = "transformers-4.32.0.tar.gz", hash = "sha256:ca510f9688d2fe7347abbbfbd13f2f6dcd3c8349870c8d0ed98beed5f579b354"}, ] [package.dependencies] filelock = "*" -huggingface-hub = ">=0.14.1,<1.0" +huggingface-hub = ">=0.15.1,<1.0" numpy = ">=1.17" packaging = ">=20.0" pyyaml = ">=5.1" @@ -9168,20 +9465,20 @@ tokenizers = ">=0.11.1,<0.11.3 || >0.11.3,<0.14" tqdm = ">=4.27" [package.extras] -accelerate = ["accelerate (>=0.20.2)"] -agents = ["Pillow", "accelerate (>=0.20.2)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.9,!=1.12.0)"] -all = ["Pillow", "accelerate (>=0.20.2)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.6.9)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf (<=3.20.3)", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision"] +accelerate = ["accelerate (>=0.20.3)"] +agents = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.9,!=1.12.0)"] +all = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.14)", "tensorflow-text (<2.14)", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] codecarbon = ["codecarbon (==1.2.0)"] -deepspeed = ["accelerate (>=0.20.2)", "deepspeed (>=0.8.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.20.2)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.8.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf (<=3.20.3)", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow", "accelerate (>=0.20.2)", "av (==9.2.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.6.9)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf (<=3.20.3)", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf (<=3.20.3)", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow", "accelerate (>=0.20.2)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf (<=3.20.3)", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -docs = ["Pillow", "accelerate (>=0.20.2)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.6.9)", "hf-doc-builder", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf (<=3.20.3)", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision"] +deepspeed = ["accelerate (>=0.20.3)", "deepspeed (>=0.9.3)"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.20.3)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorflow (>=2.6,<2.14)", "tensorflow-text (<2.14)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorflow (>=2.6,<2.14)", "tensorflow-text (<2.14)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (<10.0.0)", "accelerate (>=0.20.3)", "beautifulsoup4", "black (>=23.1,<24.0)", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune]", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (>=0.0.241,<=0.0.259)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "timeout-decorator", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +docs = ["Pillow (<10.0.0)", "accelerate (>=0.20.3)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune]", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.14)", "tensorflow-text (<2.14)", "tf2onnx", "timm", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "torchaudio", "torchvision"] docs-specific = ["hf-doc-builder"] fairscale = ["fairscale (>0.3)"] -flax = ["flax (>=0.4.1,<=0.6.9)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "optax (>=0.0.8,<=0.1.4)"] +flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] ftfy = ["ftfy"] integrations = ["optuna", "ray[tune]", "sigopt"] @@ -9195,23 +9492,44 @@ quality = ["GitPython (<3.1.19)", "black (>=23.1,<24.0)", "datasets (!=2.5.0)", ray = ["ray[tune]"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] sagemaker = ["sagemaker (>=2.31.0)"] -sentencepiece = ["protobuf (<=3.20.3)", "sentencepiece (>=0.1.91,!=0.1.92)"] -serving = ["fastapi", "pydantic", "starlette", "uvicorn"] +sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"] +serving = ["fastapi", "pydantic (<2)", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf (<=3.20.3)", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "timeout-decorator"] -tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx"] -tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.4,<2.13)", "tensorflow-text (<2.13)", "tf2onnx"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "black (>=23.1,<24.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "timeout-decorator"] +tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.6,<2.14)", "tensorflow-text (<2.14)", "tf2onnx"] +tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.6,<2.14)", "tensorflow-text (<2.14)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] timm = ["timm"] tokenizers = ["tokenizers (>=0.11.1,!=0.11.3,<0.14)"] -torch = ["accelerate (>=0.20.2)", "torch (>=1.9,!=1.12.0)"] +torch = ["accelerate (>=0.20.3)", "torch (>=1.9,!=1.12.0)"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -torch-vision = ["Pillow", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.14.1,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf (<=3.20.3)", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "tqdm (>=4.27)"] +torch-vision = ["Pillow (<10.0.0)", "torchvision"] +torchhub = ["filelock", "huggingface-hub (>=0.15.1,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.14)", "torch (>=1.9,!=1.12.0)", "tqdm (>=4.27)"] video = ["av (==9.2.0)", "decord (==0.6.0)"] -vision = ["Pillow"] +vision = ["Pillow (<10.0.0)"] + +[[package]] +name = "tritonclient" +version = "2.34.0" +description = "Python client library and utilities for communicating with Triton Inference Server" +optional = true +python-versions = "*" +files = [ + {file = "tritonclient-2.34.0-py3-none-any.whl", hash = "sha256:876ff68aba141eeb047fdc1eeeebef42c47126c40cbd3f92b3800c8afe55dbcc"}, + {file = "tritonclient-2.34.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:ce5845f94f8a014f6de1ca13e07049c31b4bdffca594bbe0654a6db58eb2ce4b"}, + {file = "tritonclient-2.34.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:57fd1016bd52f9c5a4e62d01ce37e59925575a9d293d091c6a91d8ee468cd804"}, +] + +[package.dependencies] +numpy = ">=1.19.1" +python-rapidjson = ">=0.9.1" + +[package.extras] +all = ["aiohttp (>=3.8.1,<4.0.0)", "geventhttpclient (>=1.4.4,<=2.0.2)", "grpcio (>=1.41.0)", "numpy (>=1.19.1)", "packaging (>=14.1)", "protobuf (>=3.5.0,<4)", "python-rapidjson (>=0.9.1)"] +grpc = ["grpcio (>=1.41.0)", "numpy (>=1.19.1)", "packaging (>=14.1)", "protobuf (>=3.5.0,<4)", "python-rapidjson (>=0.9.1)"] +http = ["aiohttp (>=3.8.1,<4.0.0)", "geventhttpclient (>=1.4.4,<=2.0.2)", "numpy (>=1.19.1)", "python-rapidjson (>=0.9.1)"] [[package]] name = "types-chardet" @@ -9226,24 +9544,24 @@ files = [ [[package]] name = "types-protobuf" -version = "4.23.0.1" +version = "4.24.0.1" description = "Typing stubs for protobuf" optional = false python-versions = "*" files = [ - {file = "types-protobuf-4.23.0.1.tar.gz", hash = "sha256:7bd5ea122a057b11a82b785d9de464932a1e9175fe977a4128adef11d7f35547"}, - {file = "types_protobuf-4.23.0.1-py3-none-any.whl", hash = "sha256:c926104f69ea62103846681b35b690d8d100ecf86c6cdda16c850a1313a272e4"}, + {file = "types-protobuf-4.24.0.1.tar.gz", hash = "sha256:90adea3b693d6a40d8ef075c58fe6b5cc6e01fe1496301a7e6fc70398dcff92e"}, + {file = "types_protobuf-4.24.0.1-py3-none-any.whl", hash = "sha256:df203a204e4ae97d4cca4c9cf725262579dd7857a19f9e7fc74871ccfa073c01"}, ] [[package]] name = "types-pyopenssl" -version = "23.2.0.0" +version = "23.2.0.2" description = "Typing stubs for pyOpenSSL" optional = false python-versions = "*" files = [ - {file = "types-pyOpenSSL-23.2.0.0.tar.gz", hash = "sha256:43e307e8dfb3a7a8208a19874ca060305f460c529d4eaca8a2669ea89499f244"}, - {file = "types_pyOpenSSL-23.2.0.0-py3-none-any.whl", hash = "sha256:ba803a99440b0c2e9ab4e197084aeefc55bdfe8a580d367b2aa4210810a21240"}, + {file = "types-pyOpenSSL-23.2.0.2.tar.gz", hash = "sha256:6a010dac9ecd42b582d7dd2cc3e9e40486b79b3b64bb2fffba1474ff96af906d"}, + {file = "types_pyOpenSSL-23.2.0.2-py3-none-any.whl", hash = "sha256:19536aa3debfbe25a918cf0d898e9f5fbbe6f3594a429da7914bf331deb1b342"}, ] [package.dependencies] @@ -9251,35 +9569,35 @@ cryptography = ">=35.0.0" [[package]] name = "types-pytz" -version = "2023.3.0.0" +version = "2023.3.0.1" description = "Typing stubs for pytz" optional = false python-versions = "*" files = [ - {file = "types-pytz-2023.3.0.0.tar.gz", hash = "sha256:ecdc70d543aaf3616a7e48631543a884f74205f284cefd6649ddf44c6a820aac"}, - {file = "types_pytz-2023.3.0.0-py3-none-any.whl", hash = "sha256:4fc2a7fbbc315f0b6630e0b899fd6c743705abe1094d007b0e612d10da15e0f3"}, + {file = "types-pytz-2023.3.0.1.tar.gz", hash = "sha256:1a7b8d4aac70981cfa24478a41eadfcd96a087c986d6f150d77e3ceb3c2bdfab"}, + {file = "types_pytz-2023.3.0.1-py3-none-any.whl", hash = "sha256:65152e872137926bb67a8fe6cc9cfd794365df86650c5d5fdc7b167b0f38892e"}, ] [[package]] name = "types-pyyaml" -version = "6.0.12.10" +version = "6.0.12.11" description = "Typing stubs for PyYAML" optional = false python-versions = "*" files = [ - {file = "types-PyYAML-6.0.12.10.tar.gz", hash = "sha256:ebab3d0700b946553724ae6ca636ea932c1b0868701d4af121630e78d695fc97"}, - {file = "types_PyYAML-6.0.12.10-py3-none-any.whl", hash = "sha256:662fa444963eff9b68120d70cda1af5a5f2aa57900003c2006d7626450eaae5f"}, + {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, + {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, ] [[package]] name = "types-redis" -version = "4.5.5.2" +version = "4.6.0.5" description = "Typing stubs for redis" optional = false python-versions = "*" files = [ - {file = "types-redis-4.5.5.2.tar.gz", hash = "sha256:2fe82f374d9dddf007deaf23d81fddcfd9523d9522bf11523c5c43bc5b27099e"}, - {file = "types_redis-4.5.5.2-py3-none-any.whl", hash = "sha256:bf8692252038dbe03b007ca4fde87d3ae8e10610854a6858e3bf5d01721a7c4b"}, + {file = "types-redis-4.6.0.5.tar.gz", hash = "sha256:5f179d10bd3ca995a8134aafcddfc3e12d52b208437c4529ef27e68acb301f38"}, + {file = "types_redis-4.6.0.5-py3-none-any.whl", hash = "sha256:4f662060247a2363c7a8f0b7e52915d68960870ff16a749a891eabcf87ed0be4"}, ] [package.dependencies] @@ -9288,13 +9606,13 @@ types-pyOpenSSL = "*" [[package]] name = "types-requests" -version = "2.31.0.1" +version = "2.31.0.2" description = "Typing stubs for requests" optional = false python-versions = "*" files = [ - {file = "types-requests-2.31.0.1.tar.gz", hash = "sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac"}, - {file = "types_requests-2.31.0.1-py3-none-any.whl", hash = "sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3"}, + {file = "types-requests-2.31.0.2.tar.gz", hash = "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40"}, + {file = "types_requests-2.31.0.2-py3-none-any.whl", hash = "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a"}, ] [package.dependencies] @@ -9302,35 +9620,35 @@ types-urllib3 = "*" [[package]] name = "types-toml" -version = "0.10.8.6" +version = "0.10.8.7" description = "Typing stubs for toml" optional = false python-versions = "*" files = [ - {file = "types-toml-0.10.8.6.tar.gz", hash = "sha256:6d3ac79e36c9ee593c5d4fb33a50cca0e3adceb6ef5cff8b8e5aef67b4c4aaf2"}, - {file = "types_toml-0.10.8.6-py3-none-any.whl", hash = "sha256:de7b2bb1831d6f7a4b554671ffe5875e729753496961b3e9b202745e4955dafa"}, + {file = "types-toml-0.10.8.7.tar.gz", hash = "sha256:58b0781c681e671ff0b5c0319309910689f4ab40e8a2431e205d70c94bb6efb1"}, + {file = "types_toml-0.10.8.7-py3-none-any.whl", hash = "sha256:61951da6ad410794c97bec035d59376ce1cbf4453dc9b6f90477e81e4442d631"}, ] [[package]] name = "types-urllib3" -version = "1.26.25.13" +version = "1.26.25.14" description = "Typing stubs for urllib3" optional = false python-versions = "*" files = [ - {file = "types-urllib3-1.26.25.13.tar.gz", hash = "sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5"}, - {file = "types_urllib3-1.26.25.13-py3-none-any.whl", hash = "sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c"}, + {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, + {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, ] [[package]] name = "typing-extensions" -version = "4.7.1" +version = "4.5.0" description = "Backported and Experimental Type Hints for Python 3.7+" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] [[package]] @@ -9361,13 +9679,13 @@ files = [ [[package]] name = "tzlocal" -version = "4.3" +version = "4.3.1" description = "tzinfo object for the local timezone" optional = true python-versions = ">=3.7" files = [ - {file = "tzlocal-4.3-py3-none-any.whl", hash = "sha256:b44c4388f3d34f25862cfbb387578a4d70fec417649da694a132f628a23367e2"}, - {file = "tzlocal-4.3.tar.gz", hash = "sha256:3f21d09e1b2aa9f2dacca12da240ca37de3ba5237a93addfd6d593afe9073355"}, + {file = "tzlocal-4.3.1-py3-none-any.whl", hash = "sha256:67d7e7f4ce0a98e9dfde2e02474c60fe846ed032d78b555c554c2e9cba472d84"}, + {file = "tzlocal-4.3.1.tar.gz", hash = "sha256:ee32ef8c20803c19a96ed366addd3d4a729ef6309cb5c7359a0cc2eeeb7fa46a"}, ] [package.dependencies] @@ -9380,17 +9698,17 @@ devenv = ["black", "check-manifest", "flake8", "pyroma", "pytest (>=4.3)", "pyte [[package]] name = "uri-template" -version = "1.2.0" +version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"}, - {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"}, + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, ] [package.extras] -dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "mypy", "pep8-naming"] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] [[package]] name = "uritemplate" @@ -9421,65 +9739,32 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "validators" -version = "0.20.0" -description = "Python Data Validation for Humans™." +version = "0.21.0" +description = "Python Data Validation for Humans™" optional = true -python-versions = ">=3.4" +python-versions = ">=3.8,<4.0" files = [ - {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, + {file = "validators-0.21.0-py3-none-any.whl", hash = "sha256:3470db6f2384c49727ee319afa2e97aec3f8fad736faa6067e0fd7f9eaf2c551"}, + {file = "validators-0.21.0.tar.gz", hash = "sha256:245b98ab778ed9352a7269c6a8f6c2a839bed5b2a7e3e60273ce399d247dd4b3"}, ] -[package.dependencies] -decorator = ">=3.4.0" - -[package.extras] -test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] - [[package]] name = "vcrpy" -version = "4.3.1" +version = "5.1.0" description = "Automatically mock your HTTP interactions to simplify and speed up testing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "vcrpy-4.3.1-py2.py3-none-any.whl", hash = "sha256:35398f1b373f32340f39d735ea45f40d679ace316f3dddf8cbcbc2f120e6d1d0"}, - {file = "vcrpy-4.3.1.tar.gz", hash = "sha256:24e2d450bf1c2f9f9b4246ee91beb7d58f862a9f2f030514b14783b83c5146ec"}, + {file = "vcrpy-5.1.0-py2.py3-none-any.whl", hash = "sha256:605e7b7a63dcd940db1df3ab2697ca7faf0e835c0852882142bafb19649d599e"}, + {file = "vcrpy-5.1.0.tar.gz", hash = "sha256:bbf1532f2618a04f11bce2a99af3a9647a32c880957293ff91e0a5f187b6b3d2"}, ] [package.dependencies] PyYAML = "*" -six = ">=1.5" urllib3 = {version = "<2", markers = "python_version < \"3.10\""} wrapt = "*" yarl = "*" -[[package]] -name = "vowpal-wabbit-next" -version = "0.6.0" -description = "Experimental python bindings for VowpalWabbit" -optional = true -python-versions = ">=3.7" -files = [ - {file = "vowpal-wabbit-next-0.6.0.tar.gz", hash = "sha256:f0381614d99fac6a0f52e995ee0bfc7b681054f397bea7ff08b8a523d5315a54"}, - {file = "vowpal_wabbit_next-0.6.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:cfbb831cfe9eb81185aff7cdca437ae17c6d9aca8d74e26c326e3ef4ee8e81e7"}, - {file = "vowpal_wabbit_next-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d31829778f9c600f5c121f614516ca1bc9ede5d1bc77b1eb3b59b32d9138db9"}, - {file = "vowpal_wabbit_next-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:714347606ab302a2f72870b6ae6dce58de4bec1b489f4bd65d80a8e326e1db8a"}, - {file = "vowpal_wabbit_next-0.6.0-cp311-cp311-macosx_10_13_universal2.whl", hash = "sha256:3a8482d5c0b9357fdb36b62d659e6b74e93aeab165b910292572a98e91d7a014"}, - {file = "vowpal_wabbit_next-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e4349099b938102f51fb6fedf035bc1deacb2971cd2a48641ca7d45186efda0"}, - {file = "vowpal_wabbit_next-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:c8f58cdc49f270b1bed6f0fdd7520c8ba1b328de5cd8a2760c0ec70a630de92e"}, - {file = "vowpal_wabbit_next-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8b7052ce7212fd1cae8ffd966e240c814f3c1df08fd612437d48f0f23e7694c"}, - {file = "vowpal_wabbit_next-0.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d24d9c380d0e9b41151337c7f9e2a33ec5bfd738fdee9f65c1a40e486234aca3"}, - {file = "vowpal_wabbit_next-0.6.0-cp38-cp38-macosx_10_13_universal2.whl", hash = "sha256:0d77a8c55249ec9a7f404939ecc6948db0527e522e8a7ae149ec7cd29b3ade04"}, - {file = "vowpal_wabbit_next-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa2f52f1267fbc26c7757335f9c76a0f00b112971e04c85b8a9bc9e82300597"}, - {file = "vowpal_wabbit_next-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d04f91200ecae73196d9f5601853d63afce8c1c8a0d310a608e8ddfa3b190cb"}, - {file = "vowpal_wabbit_next-0.6.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:2df4a652729c0db34afd8fb4fc49b0090d6f061e2d49899e5f092fd4c3d23253"}, - {file = "vowpal_wabbit_next-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c289a260ab759f04903b441701cff66ea74d6c061d966caaba0c65ac12d05528"}, - {file = "vowpal_wabbit_next-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d022cab07274f227df159a81bccf034def7dd54ad70392ee98743ffa4953072"}, -] - -[package.dependencies] -numpy = "*" - [[package]] name = "watchdog" version = "3.0.0" @@ -9532,13 +9817,13 @@ files = [ [[package]] name = "weaviate-client" -version = "3.20.1" +version = "3.23.0" description = "A python native Weaviate client" optional = true python-versions = ">=3.8" files = [ - {file = "weaviate-client-3.20.1.tar.gz", hash = "sha256:752912423f6334575c3feffcc98e5604e2d4b3bd3baddbff57d38db23bec3e9f"}, - {file = "weaviate_client-3.20.1-py3-none-any.whl", hash = "sha256:175f1665d9f1e580dcfa48cfd4dab1e49925d1655b0b4720d0f2ee7709c956f6"}, + {file = "weaviate-client-3.23.0.tar.gz", hash = "sha256:3ffd7f1460c9e32755d84d4f5fc63dfc0bd990dbe2c3dc20d5c68119d467680e"}, + {file = "weaviate_client-3.23.0-py3-none-any.whl", hash = "sha256:3d3bb75c1d96b2b71e213c5eb885ae3e3f42e4304955383c467d100187d9ff8e"}, ] [package.dependencies] @@ -9578,29 +9863,108 @@ files = [ [[package]] name = "websocket-client" -version = "1.6.0" +version = "1.6.2" description = "WebSocket client for Python with low level API options" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.0.tar.gz", hash = "sha256:e84c7eafc66aade6d1967a51dfd219aabdf81d15b9705196e11fd81f48666b78"}, - {file = "websocket_client-1.6.0-py3-none-any.whl", hash = "sha256:72d7802608745b0a212f79b478642473bd825777d8637b6c8c421bf167790d4f"}, + {file = "websocket-client-1.6.2.tar.gz", hash = "sha256:53e95c826bf800c4c465f50093a8c4ff091c7327023b10bfaff40cf1ef170eaa"}, + {file = "websocket_client-1.6.2-py3-none-any.whl", hash = "sha256:ce54f419dfae71f4bdba69ebe65bf7f0a93fe71bc009ad3a010aacc3eebad537"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] +[[package]] +name = "websockets" +version = "11.0.3" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = true +python-versions = ">=3.7" +files = [ + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, + {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, + {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, + {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, + {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, + {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, + {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, + {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, + {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, + {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, + {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, + {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, + {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, + {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, +] + [[package]] name = "werkzeug" -version = "2.3.6" +version = "2.3.7" description = "The comprehensive WSGI web application library." optional = true python-versions = ">=3.8" files = [ - {file = "Werkzeug-2.3.6-py3-none-any.whl", hash = "sha256:935539fa1413afbb9195b24880778422ed620c0fc09670945185cce4d91a8890"}, - {file = "Werkzeug-2.3.6.tar.gz", hash = "sha256:98c774df2f91b05550078891dee5f0eb0cb797a522c757a2452b9cee5b202330"}, + {file = "werkzeug-2.3.7-py3-none-any.whl", hash = "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528"}, + {file = "werkzeug-2.3.7.tar.gz", hash = "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8"}, ] [package.dependencies] @@ -9621,27 +9985,27 @@ files = [ [[package]] name = "wheel" -version = "0.40.0" +version = "0.41.2" description = "A built-package format for Python" optional = true python-versions = ">=3.7" files = [ - {file = "wheel-0.40.0-py3-none-any.whl", hash = "sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247"}, - {file = "wheel-0.40.0.tar.gz", hash = "sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873"}, + {file = "wheel-0.41.2-py3-none-any.whl", hash = "sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8"}, + {file = "wheel-0.41.2.tar.gz", hash = "sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985"}, ] [package.extras] -test = ["pytest (>=6.0.0)"] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "whylabs-client" -version = "0.5.1" +version = "0.5.4" description = "WhyLabs API client" optional = true python-versions = ">=3.6" files = [ - {file = "whylabs-client-0.5.1.tar.gz", hash = "sha256:f7aacfab7d176812c2eb4cdeb8c52521eed0d30bc2a0836399798197a513cf04"}, - {file = "whylabs_client-0.5.1-py3-none-any.whl", hash = "sha256:dc6958d5bb390f1057fe6f513cbce55c4e71d5f8a1461a7c93eb73814089de33"}, + {file = "whylabs-client-0.5.4.tar.gz", hash = "sha256:d0cccfaac53412362559db7b093f3d2008b68ac8a78109b617c692d59757813f"}, + {file = "whylabs_client-0.5.4-py3-none-any.whl", hash = "sha256:9854a047040fd2d7e84bd8f28a0b1c9e1822a16d8bcaee302d301c0bd1eddf64"}, ] [package.dependencies] @@ -9650,13 +10014,13 @@ urllib3 = ">=1.25.3" [[package]] name = "whylogs" -version = "1.2.3" +version = "1.2.6" description = "Profile and monitor your ML data pipeline end-to-end" optional = true python-versions = ">=3.7.1,<4" files = [ - {file = "whylogs-1.2.3-py3-none-any.whl", hash = "sha256:92cfe02985760c52d25b88bad69001901844ff51c76b62537bce1c31d12c271e"}, - {file = "whylogs-1.2.3.tar.gz", hash = "sha256:d0000f502b1b30c48a5ad9535488370e961e85825dafdd75421447ffff0516e7"}, + {file = "whylogs-1.2.6-py3-none-any.whl", hash = "sha256:9b71d8468396b303539b69003f93d8f5cdad03ad0112df12a697bf662c1baf34"}, + {file = "whylogs-1.2.6.tar.gz", hash = "sha256:e65ef4e6bbd2bfb7302787d71733f53345c4bc0f6ec9e34481178ff4a867a143"}, ] [package.dependencies] @@ -9723,13 +10087,13 @@ files = [ [[package]] name = "widgetsnbextension" -version = "4.0.7" +version = "4.0.8" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" files = [ - {file = "widgetsnbextension-4.0.7-py3-none-any.whl", hash = "sha256:be3228a73bbab189a16be2d4a3cd89ecbd4e31948bfdc64edac17dcdee3cd99c"}, - {file = "widgetsnbextension-4.0.7.tar.gz", hash = "sha256:ea67c17a7cd4ae358f8f46c3b304c40698bc0423732e3f273321ee141232c8be"}, + {file = "widgetsnbextension-4.0.8-py3-none-any.whl", hash = "sha256:2e37f0ce9da11651056280c7efe96f2db052fe8fc269508e3724f5cbd6c93018"}, + {file = "widgetsnbextension-4.0.8.tar.gz", hash = "sha256:9ec291ba87c2dfad42c3d5b6f68713fa18be1acd7476569516b2431682315c17"}, ] [[package]] @@ -9880,13 +10244,13 @@ files = [ [[package]] name = "xata" -version = "1.0.0a7" +version = "1.0.0b0" description = "Python client for Xata.io" optional = true python-versions = ">=3.8,<4.0" files = [ - {file = "xata-1.0.0a7-py3-none-any.whl", hash = "sha256:1427e97bccddfd5fa8fba56ba993b2d78f1dc074e729d06ccc79c48d07bd023a"}, - {file = "xata-1.0.0a7.tar.gz", hash = "sha256:32769ddc22cc091bf133e66b91662185047fff05aa431e7c760b55cd0ddef6c3"}, + {file = "xata-1.0.0b0-py3-none-any.whl", hash = "sha256:10dab3d4382c62e04081ada0c381f80abb6f67f7601239c71b20870846a60472"}, + {file = "xata-1.0.0b0.tar.gz", hash = "sha256:241c6c52398b663da7a5107054d6ec0abca331de88bc2de7b0f0b13971b7b7f4"}, ] [package.dependencies] @@ -9995,18 +10359,18 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.15.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [[package]] name = "zstandard" @@ -10073,7 +10437,7 @@ clarifai = ["clarifai"] cohere = ["cohere"] docarray = ["docarray"] embeddings = ["sentence-transformers"] -extended-testing = ["amazon-textract-caller", "atlassian-python-api", "beautifulsoup4", "bibtexparser", "cassio", "chardet", "esprima", "faiss-cpu", "feedparser", "geopandas", "gitpython", "gql", "html2text", "jinja2", "jq", "lxml", "mwparserfromhell", "mwxml", "newspaper3k", "openai", "openai", "openapi-schema-pydantic", "pandas", "pdfminer-six", "pgvector", "psychicapi", "py-trello", "pymupdf", "pypdf", "pypdfium2", "pyspark", "rank-bm25", "rapidfuzz", "requests-toolbelt", "scikit-learn", "sentence-transformers", "streamlit", "sympy", "telethon", "tqdm", "vowpal-wabbit-next", "xata", "xmltodict"] +extended-testing = ["amazon-textract-caller", "assemblyai", "atlassian-python-api", "beautifulsoup4", "bibtexparser", "cassio", "chardet", "esprima", "faiss-cpu", "feedparser", "geopandas", "gitpython", "gql", "html2text", "jinja2", "jq", "lxml", "markdownify", "mwparserfromhell", "mwxml", "newspaper3k", "openai", "openai", "openapi-schema-pydantic", "pandas", "pdfminer-six", "pgvector", "psychicapi", "py-trello", "pymupdf", "pypdf", "pypdfium2", "pyspark", "rank-bm25", "rapidfuzz", "requests-toolbelt", "scikit-learn", "streamlit", "sympy", "telethon", "tqdm", "xata", "xmltodict"] javascript = ["esprima"] llms = ["clarifai", "cohere", "huggingface_hub", "manifest-ml", "nlpcloud", "openai", "openlm", "torch", "transformers"] openai = ["openai", "tiktoken"] @@ -10083,4 +10447,4 @@ text-helpers = ["chardet"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "706edba1e67116864e3245fe5851902ce987283b4f143fd9e15f094ecad87deb" +content-hash = "43a6bd42efc0baf917418087f788aaf3b1bc793cb4aa81de99c52ed6a7d54d26" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index f60ef26af..1e15dcd7c 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain" -version = "0.0.270" +version = "0.0.274" description = "Building applications with LLMs through composability" authors = [] license = "MIT" @@ -105,7 +105,7 @@ nebula3-python = {version = "^3.4.0", optional = true} mwparserfromhell = {version = "^0.6.4", optional = true} mwxml = {version = "^0.3.3", optional = true} awadb = {version = "^0.3.9", optional = true} -azure-search-documents = {version = "11.4.0b6", optional = true} +azure-search-documents = {version = "11.4.0b8", optional = true} esprima = {version = "^4.0.1", optional = true} streamlit = {version = "^1.18.0", optional = true, python = ">=3.8.1,<3.9.7 || >3.9.7,<4.0"} psychicapi = {version = "^0.8.0", optional = true} @@ -126,6 +126,8 @@ amazon-textract-caller = {version = "<2", optional = true} xata = {version = "^1.0.0a7", optional = true} xmltodict = {version = "^0.13.0", optional = true} vowpal-wabbit-next = {version = "0.6.0", optional = true} +markdownify = {version = "^0.11.6", optional = true} +assemblyai = {version = "^0.17.0", optional = true} [tool.poetry.group.test.dependencies] @@ -298,13 +300,14 @@ all = [ # merge-conflicts extended_testing = [ "amazon-textract-caller", + "assemblyai", "beautifulsoup4", "bibtexparser", "cassio", "chardet", "esprima", "jq", - "pdfminer.six", + "pdfminer-six", "pgvector", "pypdf", "pymupdf", @@ -318,7 +321,7 @@ extended_testing = [ "telethon", "psychicapi", "gql", - "requests_toolbelt", + "requests-toolbelt", "html2text", "py-trello", "scikit-learn", @@ -328,7 +331,7 @@ extended_testing = [ "sympy", "rapidfuzz", "openai", - "rank_bm25", + "rank-bm25", "geopandas", "jinja2", "gitpython", @@ -340,6 +343,7 @@ extended_testing = [ "openapi-schema-pydantic", "vowpal-wabbit-next", "sentence-transformers" + "markdownify", ] [tool.ruff] @@ -391,4 +395,4 @@ ignore-regex = '.*(Stati Uniti|Tense=Pres).*' # whats is a typo but used frequently in queries so kept as is # aapply - async apply # unsecure - typo but part of API, decided to not bother for now -ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon' +ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon,crate' diff --git a/libs/langchain/tests/integration_tests/agent/test_ainetwork_agent.py b/libs/langchain/tests/integration_tests/agent/test_ainetwork_agent.py new file mode 100644 index 000000000..58dd462ba --- /dev/null +++ b/libs/langchain/tests/integration_tests/agent/test_ainetwork_agent.py @@ -0,0 +1,175 @@ +import asyncio +import os +import time +import urllib.request +import uuid +from enum import Enum +from typing import Any +from urllib.error import HTTPError + +import pytest + +from langchain.agents import AgentType, initialize_agent +from langchain.agents.agent_toolkits.ainetwork.toolkit import AINetworkToolkit +from langchain.chat_models import ChatOpenAI +from langchain.tools.ainetwork.utils import authenticate + + +class Match(Enum): + __test__ = False + ListWildcard = 1 + StrWildcard = 2 + DictWildcard = 3 + IntWildcard = 4 + FloatWildcard = 5 + ObjectWildcard = 6 + + @classmethod + def match(cls, value: Any, template: Any) -> bool: + if template is cls.ListWildcard: + return isinstance(value, list) + elif template is cls.StrWildcard: + return isinstance(value, str) + elif template is cls.DictWildcard: + return isinstance(value, dict) + elif template is cls.IntWildcard: + return isinstance(value, int) + elif template is cls.FloatWildcard: + return isinstance(value, float) + elif template is cls.ObjectWildcard: + return True + elif type(value) != type(template): + return False + elif isinstance(value, dict): + if len(value) != len(template): + return False + for k, v in value.items(): + if k not in template or not cls.match(v, template[k]): + return False + return True + elif isinstance(value, list): + if len(value) != len(template): + return False + for i in range(len(value)): + if not cls.match(value[i], template[i]): + return False + return True + else: + return value == template + + +@pytest.mark.requires("ain") +def test_ainetwork_toolkit() -> None: + def get(path: str, type: str = "value", default: Any = None) -> Any: + ref = ain.db.ref(path) + value = asyncio.run( + { + "value": ref.getValue, + "rule": ref.getRule, + "owner": ref.getOwner, + }[type]() + ) + return default if value is None else value + + def validate(path: str, template: Any, type: str = "value") -> bool: + value = get(path, type) + return Match.match(value, template) + + if not os.environ.get("AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY", None): + from ain.account import Account + + account = Account.create() + os.environ["AIN_BLOCKCHAIN_ACCOUNT_PRIVATE_KEY"] = account.private_key + + interface = authenticate(network="testnet") + toolkit = AINetworkToolkit(network="testnet", interface=interface) + llm = ChatOpenAI(model="gpt-4", temperature=0) + agent = initialize_agent( + tools=toolkit.get_tools(), + llm=llm, + verbose=True, + agent=AgentType.OPENAI_FUNCTIONS, + ) + ain = interface + self_address = ain.wallet.defaultAccount.address + co_address = "0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69" + + # Test creating an app + UUID = uuid.UUID( + int=(int(time.time() * 1000) << 64) | (uuid.uuid4().int & ((1 << 64) - 1)) + ) + app_name = f"_langchain_test__{str(UUID).replace('-', '_')}" + agent.run(f"""Create app {app_name}""") + validate(f"/manage_app/{app_name}/config", {"admin": {self_address: True}}) + validate(f"/apps/{app_name}/DB", None, "owner") + + # Test reading owner config + agent.run(f"""Read owner config of /apps/{app_name}/DB .""") + assert ... + + # Test granting owner config + agent.run( + f"""Grant owner authority to {co_address} for edit write rule permission of /apps/{app_name}/DB_co .""" # noqa: E501 + ) + validate( + f"/apps/{app_name}/DB_co", + { + ".owner": { + "owners": { + co_address: { + "branch_owner": False, + "write_function": False, + "write_owner": False, + "write_rule": True, + } + } + } + }, + "owner", + ) + + # Test reading owner config + agent.run(f"""Read owner config of /apps/{app_name}/DB_co .""") + assert ... + + # Test reading owner config + agent.run(f"""Read owner config of /apps/{app_name}/DB .""") + assert ... # Check if owner {self_address} exists + + # Test reading a value + agent.run(f"""Read value in /apps/{app_name}/DB""") + assert ... # empty + + # Test writing a value + agent.run(f"""Write value {{1: 1904, 2: 43}} in /apps/{app_name}/DB""") + validate(f"/apps/{app_name}/DB", {1: 1904, 2: 43}) + + # Test reading a value + agent.run(f"""Read value in /apps/{app_name}/DB""") + assert ... # check value + + # Test reading a rule + agent.run(f"""Read write rule of app {app_name} .""") + assert ... # check rule that self_address exists + + # Test sending AIN + self_balance = get(f"/accounts/{self_address}/balance", default=0) + transaction_history = get(f"/transfer/{self_address}/{co_address}", default={}) + if self_balance < 1: + try: + with urllib.request.urlopen( + f"http://faucet.ainetwork.ai/api/test/{self_address}/" + ) as response: + try_test = response.getcode() + except HTTPError as e: + try_test = e.getcode() + else: + try_test = 200 + + if try_test == 200: + agent.run(f"""Send 1 AIN to {co_address}""") + transaction_update = get(f"/transfer/{self_address}/{co_address}", default={}) + assert any( + transaction_update[key]["value"] == 1 + for key in transaction_update.keys() - transaction_history.keys() + ) diff --git a/libs/langchain/tests/integration_tests/cache/test_redis_cache.py b/libs/langchain/tests/integration_tests/cache/test_redis_cache.py index 5d51a12e8..77b019eff 100644 --- a/libs/langchain/tests/integration_tests/cache/test_redis_cache.py +++ b/libs/langchain/tests/integration_tests/cache/test_redis_cache.py @@ -1,16 +1,27 @@ """Test Redis cache functionality.""" +import uuid +from typing import List + import pytest import langchain from langchain.cache import RedisCache, RedisSemanticCache +from langchain.embeddings.base import Embeddings from langchain.schema import Generation, LLMResult -from tests.integration_tests.vectorstores.fake_embeddings import FakeEmbeddings +from tests.integration_tests.vectorstores.fake_embeddings import ( + ConsistentFakeEmbeddings, + FakeEmbeddings, +) from tests.unit_tests.llms.fake_chat_model import FakeChatModel from tests.unit_tests.llms.fake_llm import FakeLLM REDIS_TEST_URL = "redis://localhost:6379" +def random_string() -> str: + return str(uuid.uuid4()) + + def test_redis_cache_ttl() -> None: import redis @@ -30,12 +41,10 @@ def test_redis_cache() -> None: llm_string = str(sorted([(k, v) for k, v in params.items()])) langchain.llm_cache.update("foo", llm_string, [Generation(text="fizz")]) output = llm.generate(["foo"]) - print(output) expected_output = LLMResult( generations=[[Generation(text="fizz")]], llm_output={}, ) - print(expected_output) assert output == expected_output langchain.llm_cache.redis.flushall() @@ -80,14 +89,90 @@ def test_redis_semantic_cache() -> None: langchain.llm_cache.clear(llm_string=llm_string) -def test_redis_semantic_cache_chat() -> None: - import redis +def test_redis_semantic_cache_multi() -> None: + langchain.llm_cache = RedisSemanticCache( + embedding=FakeEmbeddings(), redis_url=REDIS_TEST_URL, score_threshold=0.1 + ) + llm = FakeLLM() + params = llm.dict() + params["stop"] = None + llm_string = str(sorted([(k, v) for k, v in params.items()])) + langchain.llm_cache.update( + "foo", llm_string, [Generation(text="fizz"), Generation(text="Buzz")] + ) + output = llm.generate( + ["bar"] + ) # foo and bar will have the same embedding produced by FakeEmbeddings + expected_output = LLMResult( + generations=[[Generation(text="fizz"), Generation(text="Buzz")]], + llm_output={}, + ) + assert output == expected_output + # clear the cache + langchain.llm_cache.clear(llm_string=llm_string) - langchain.llm_cache = RedisCache(redis_=redis.Redis.from_url(REDIS_TEST_URL)) + +def test_redis_semantic_cache_chat() -> None: + langchain.llm_cache = RedisSemanticCache( + embedding=FakeEmbeddings(), redis_url=REDIS_TEST_URL, score_threshold=0.1 + ) llm = FakeChatModel() params = llm.dict() params["stop"] = None + llm_string = str(sorted([(k, v) for k, v in params.items()])) with pytest.warns(): llm.predict("foo") llm.predict("foo") - langchain.llm_cache.redis.flushall() + langchain.llm_cache.clear(llm_string=llm_string) + + +@pytest.mark.parametrize("embedding", [ConsistentFakeEmbeddings()]) +@pytest.mark.parametrize( + "prompts, generations", + [ + # Single prompt, single generation + ([random_string()], [[random_string()]]), + # Single prompt, multiple generations + ([random_string()], [[random_string(), random_string()]]), + # Single prompt, multiple generations + ([random_string()], [[random_string(), random_string(), random_string()]]), + # Multiple prompts, multiple generations + ( + [random_string(), random_string()], + [[random_string()], [random_string(), random_string()]], + ), + ], + ids=[ + "single_prompt_single_generation", + "single_prompt_multiple_generations", + "single_prompt_multiple_generations", + "multiple_prompts_multiple_generations", + ], +) +def test_redis_semantic_cache_hit( + embedding: Embeddings, prompts: List[str], generations: List[List[str]] +) -> None: + langchain.llm_cache = RedisSemanticCache( + embedding=embedding, redis_url=REDIS_TEST_URL + ) + + llm = FakeLLM() + params = llm.dict() + params["stop"] = None + llm_string = str(sorted([(k, v) for k, v in params.items()])) + + llm_generations = [ + [ + Generation(text=generation, generation_info=params) + for generation in prompt_i_generations + ] + for prompt_i_generations in generations + ] + for prompt_i, llm_generations_i in zip(prompts, llm_generations): + print(prompt_i) + print(llm_generations_i) + langchain.llm_cache.update(prompt_i, llm_string, llm_generations_i) + llm.generate(prompts) + assert llm.generate(prompts) == LLMResult( + generations=llm_generations, llm_output={} + ) diff --git a/libs/langchain/tests/integration_tests/chains/test_graph_database_arangodb.py b/libs/langchain/tests/integration_tests/chains/test_graph_database_arangodb.py index 32494beb0..d6ce50756 100644 --- a/libs/langchain/tests/integration_tests/chains/test_graph_database_arangodb.py +++ b/libs/langchain/tests/integration_tests/chains/test_graph_database_arangodb.py @@ -55,6 +55,21 @@ def test_connect_arangodb() -> None: assert ["hello_world"] == sample_aql_result +def test_empty_schema_on_no_data() -> None: + """Test that the schema is empty for an empty ArangoDB Database""" + db = get_arangodb_client() + db.delete_graph("GameOfThrones", drop_collections=True, ignore_missing=True) + db.delete_collection("empty_collection", ignore_missing=True) + db.create_collection("empty_collection") + + graph = ArangoGraph(db) + + assert graph.schema == { + "Graph Schema": [], + "Collection Schema": [], + } + + def test_aql_generation() -> None: """Test that AQL statement is correctly generated and executed.""" db = get_arangodb_client() diff --git a/libs/langchain/tests/integration_tests/chat_models/test_anthropic_2.py b/libs/langchain/tests/integration_tests/chat_models/test_anthropic_2.py index 7447ec03e..54b604527 100644 --- a/libs/langchain/tests/integration_tests/chat_models/test_anthropic_2.py +++ b/libs/langchain/tests/integration_tests/chat_models/test_anthropic_2.py @@ -8,6 +8,18 @@ from langchain.chat_models import ChatAnthropic os.environ["ANTHROPIC_API_KEY"] = "foo" +@pytest.mark.requires("anthropic") +def test_anthropic_model_name_param() -> None: + llm = ChatAnthropic(model_name="foo") + assert llm.model == "foo" + + +@pytest.mark.requires("anthropic") +def test_anthropic_model_param() -> None: + llm = ChatAnthropic(model="foo") + assert llm.model == "foo" + + @pytest.mark.requires("anthropic") def test_anthropic_model_kwargs() -> None: llm = ChatAnthropic(model_kwargs={"foo": "bar"}) diff --git a/libs/langchain/tests/integration_tests/chat_models/test_openai.py b/libs/langchain/tests/integration_tests/chat_models/test_openai.py index 19adbf1cd..5c8b0e43e 100644 --- a/libs/langchain/tests/integration_tests/chat_models/test_openai.py +++ b/libs/langchain/tests/integration_tests/chat_models/test_openai.py @@ -1,16 +1,22 @@ """Test ChatOpenAI wrapper.""" - +from typing import Any, List, Optional, Union import pytest +from langchain.callbacks.base import AsyncCallbackHandler from langchain.callbacks.manager import CallbackManager +from langchain.chains.openai_functions import ( + create_openai_fn_chain, +) from langchain.chat_models.openai import ChatOpenAI +from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate from langchain.schema import ( ChatGeneration, ChatResult, LLMResult, ) from langchain.schema.messages import BaseMessage, HumanMessage, SystemMessage +from langchain.schema.output import ChatGenerationChunk, GenerationChunk from tests.unit_tests.callbacks.fake_callback_handler import FakeCallbackHandler @@ -89,6 +95,34 @@ def test_chat_openai_streaming() -> None: assert isinstance(response, BaseMessage) +@pytest.mark.scheduled +def test_chat_openai_streaming_generation_info() -> None: + """Test that generation info is preserved when streaming.""" + + class _FakeCallback(FakeCallbackHandler): + saved_things: dict = {} + + def on_llm_end( + self, + *args: Any, + **kwargs: Any, + ) -> Any: + # Save the generation + self.saved_things["generation"] = args[0] + + callback = _FakeCallback() + callback_manager = CallbackManager([callback]) + chat = ChatOpenAI( + max_tokens=2, + temperature=0, + callback_manager=callback_manager, + ) + list(chat.stream("hi")) + generation = callback.saved_things["generation"] + # `Hello!` is two tokens, assert that that is what is returned + assert generation.generations[0][0].text == "Hello!" + + def test_chat_openai_llm_output_contains_model_name() -> None: """Test llm_output contains model_name.""" chat = ChatOpenAI(max_tokens=10) @@ -161,6 +195,108 @@ async def test_async_chat_openai_streaming() -> None: assert generation.text == generation.message.content +@pytest.mark.scheduled +@pytest.mark.asyncio +async def test_async_chat_openai_streaming_with_function() -> None: + """Test ChatOpenAI wrapper with multiple completions.""" + + class MyCustomAsyncHandler(AsyncCallbackHandler): + def __init__(self) -> None: + super().__init__() + self._captured_tokens: List[str] = [] + self._captured_chunks: List[ + Optional[Union[ChatGenerationChunk, GenerationChunk]] + ] = [] + + def on_llm_new_token( + self, + token: str, + *, + chunk: Optional[Union[ChatGenerationChunk, GenerationChunk]] = None, + **kwargs: Any, + ) -> Any: + self._captured_tokens.append(token) + self._captured_chunks.append(chunk) + + json_schema = { + "title": "Person", + "description": "Identifying information about a person.", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The person's name", + "type": "string", + }, + "age": { + "title": "Age", + "description": "The person's age", + "type": "integer", + }, + "fav_food": { + "title": "Fav Food", + "description": "The person's favorite food", + "type": "string", + }, + }, + "required": ["name", "age"], + } + + callback_handler = MyCustomAsyncHandler() + callback_manager = CallbackManager([callback_handler]) + + chat = ChatOpenAI( + max_tokens=10, + n=1, + callback_manager=callback_manager, + streaming=True, + ) + + prompt_msgs = [ + SystemMessage( + content="You are a world class algorithm for " + "extracting information in structured formats." + ), + HumanMessage( + content="Use the given format to extract " + "information from the following input:" + ), + HumanMessagePromptTemplate.from_template("{input}"), + HumanMessage(content="Tips: Make sure to answer in the correct format"), + ] + prompt = ChatPromptTemplate(messages=prompt_msgs) + + function: Any = { + "name": "output_formatter", + "description": ( + "Output formatter. Should always be used to format your response to the" + " user." + ), + "parameters": json_schema, + } + chain = create_openai_fn_chain( + [function], + chat, + prompt, + output_parser=None, + ) + + message = HumanMessage(content="Sally is 13 years old") + response = await chain.agenerate([{"input": message}]) + + assert isinstance(response, LLMResult) + assert len(response.generations) == 1 + for generations in response.generations: + assert len(generations) == 1 + for generation in generations: + assert isinstance(generation, ChatGeneration) + assert isinstance(generation.text, str) + assert generation.text == generation.message.content + assert len(callback_handler._captured_tokens) > 0 + assert len(callback_handler._captured_chunks) > 0 + assert all([chunk is not None for chunk in callback_handler._captured_chunks]) + + def test_chat_openai_extra_kwargs() -> None: """Test extra kwargs to chat openai.""" # Check that foo is saved in extra_kwargs. diff --git a/libs/langchain/tests/integration_tests/document_loaders/test_joplin.py b/libs/langchain/tests/integration_tests/document_loaders/test_joplin.py index 0b7c8dc19..76a1918b6 100644 --- a/libs/langchain/tests/integration_tests/document_loaders/test_joplin.py +++ b/libs/langchain/tests/integration_tests/document_loaders/test_joplin.py @@ -5,7 +5,7 @@ def test_joplin_loader() -> None: loader = JoplinLoader() docs = loader.load() - assert type(docs) is list - assert type(docs[0].page_content) is str - assert type(docs[0].metadata["source"]) is str - assert type(docs[0].metadata["title"]) is str + assert isinstance(docs, list) + assert isinstance(docs[0].page_content, str) + assert isinstance(docs[0].metadata["source"], str) + assert isinstance(docs[0].metadata["title"], str) diff --git a/libs/langchain/tests/integration_tests/document_loaders/test_polars_dataframe.py b/libs/langchain/tests/integration_tests/document_loaders/test_polars_dataframe.py new file mode 100644 index 000000000..03f507012 --- /dev/null +++ b/libs/langchain/tests/integration_tests/document_loaders/test_polars_dataframe.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +import pytest + +from langchain.document_loaders import PolarsDataFrameLoader +from langchain.schema import Document + +if TYPE_CHECKING: + import polars as pl + + +@pytest.fixture +def sample_data_frame() -> pl.DataFrame: + import polars as pl + + data = { + "text": ["Hello", "World"], + "author": ["Alice", "Bob"], + "date": ["2022-01-01", "2022-01-02"], + } + return pl.DataFrame(data) + + +def test_load_returns_list_of_documents(sample_data_frame: pl.DataFrame) -> None: + loader = PolarsDataFrameLoader(sample_data_frame) + docs = loader.load() + assert isinstance(docs, list) + assert all(isinstance(doc, Document) for doc in docs) + assert len(docs) == 2 + + +def test_load_converts_dataframe_columns_to_document_metadata( + sample_data_frame: pl.DataFrame, +) -> None: + import polars as pl + + loader = PolarsDataFrameLoader(sample_data_frame) + docs = loader.load() + + for i, doc in enumerate(docs): + df: pl.DataFrame = sample_data_frame[i] + assert df is not None + assert doc.metadata["author"] == df.select("author").item() + assert doc.metadata["date"] == df.select("date").item() + + +def test_load_uses_page_content_column_to_create_document_text( + sample_data_frame: pl.DataFrame, +) -> None: + sample_data_frame = sample_data_frame.rename(mapping={"text": "dummy_test_column"}) + loader = PolarsDataFrameLoader( + sample_data_frame, page_content_column="dummy_test_column" + ) + docs = loader.load() + assert docs[0].page_content == "Hello" + assert docs[1].page_content == "World" diff --git a/libs/langchain/tests/integration_tests/embeddings/test_mosaicml.py b/libs/langchain/tests/integration_tests/embeddings/test_mosaicml.py index a04c6f2c1..ae0bec3dd 100644 --- a/libs/langchain/tests/integration_tests/embeddings/test_mosaicml.py +++ b/libs/langchain/tests/integration_tests/embeddings/test_mosaicml.py @@ -34,7 +34,9 @@ def test_mosaicml_embedding_endpoint() -> None: """Test MosaicML embeddings with a different endpoint""" documents = ["foo bar"] embedding = MosaicMLInstructorEmbeddings( - endpoint_url="https://models.hosted-on.mosaicml.hosting/instructor-xl/v1/predict" + endpoint_url=( + "https://models.hosted-on.mosaicml.hosting/instructor-xl/v1/predict" + ) ) output = embedding.embed_documents(documents) assert len(output) == 1 diff --git a/libs/langchain/tests/integration_tests/llms/test_anthropic.py b/libs/langchain/tests/integration_tests/llms/test_anthropic.py index 3604f6196..f68053b2a 100644 --- a/libs/langchain/tests/integration_tests/llms/test_anthropic.py +++ b/libs/langchain/tests/integration_tests/llms/test_anthropic.py @@ -9,6 +9,18 @@ from langchain.schema import LLMResult from tests.unit_tests.callbacks.fake_callback_handler import FakeCallbackHandler +@pytest.mark.requires("anthropic") +def test_anthropic_model_name_param() -> None: + llm = Anthropic(model_name="foo") + assert llm.model == "foo" + + +@pytest.mark.requires("anthropic") +def test_anthropic_model_param() -> None: + llm = Anthropic(model="foo") + assert llm.model == "foo" + + def test_anthropic_call() -> None: """Test valid call to anthropic.""" llm = Anthropic(model="claude-instant-1") @@ -24,7 +36,7 @@ def test_anthropic_streaming() -> None: assert isinstance(generator, Generator) for token in generator: - assert isinstance(token["completion"], str) + assert isinstance(token, str) def test_anthropic_streaming_callback() -> None: diff --git a/libs/langchain/tests/integration_tests/llms/test_mosaicml.py b/libs/langchain/tests/integration_tests/llms/test_mosaicml.py index 2b532ab66..e15fce0fe 100644 --- a/libs/langchain/tests/integration_tests/llms/test_mosaicml.py +++ b/libs/langchain/tests/integration_tests/llms/test_mosaicml.py @@ -1,4 +1,6 @@ """Test MosaicML API wrapper.""" +import re + import pytest from langchain.llms.mosaicml import PROMPT_FOR_GENERATION_FORMAT, MosaicML @@ -13,7 +15,7 @@ def test_mosaicml_llm_call() -> None: def test_mosaicml_endpoint_change() -> None: """Test valid call to MosaicML.""" - new_url = "https://models.hosted-on.mosaicml.hosting/dolly-12b/v1/predict" + new_url = "https://models.hosted-on.mosaicml.hosting/mpt-30b-instruct/v1/predict" llm = MosaicML(endpoint_url=new_url) assert llm.endpoint_url == new_url output = llm("Say foo:") @@ -34,7 +36,7 @@ def test_mosaicml_extra_kwargs() -> None: def test_instruct_prompt() -> None: """Test instruct prompt.""" - llm = MosaicML(inject_instruction_format=True, model_kwargs={"do_sample": False}) + llm = MosaicML(inject_instruction_format=True, model_kwargs={"max_new_tokens": 10}) instruction = "Repeat the word foo" prompt = llm._transform_prompt(instruction) expected_prompt = PROMPT_FOR_GENERATION_FORMAT.format(instruction=instruction) @@ -45,7 +47,7 @@ def test_instruct_prompt() -> None: def test_retry_logic() -> None: """Tests that two queries (which would usually exceed the rate limit) works""" - llm = MosaicML(inject_instruction_format=True, model_kwargs={"do_sample": False}) + llm = MosaicML(inject_instruction_format=True, model_kwargs={"max_new_tokens": 10}) instruction = "Repeat the word foo" prompt = llm._transform_prompt(instruction) expected_prompt = PROMPT_FOR_GENERATION_FORMAT.format(instruction=instruction) @@ -70,9 +72,11 @@ def test_short_retry_does_not_loop() -> None: with pytest.raises( ValueError, - match="Error raised by inference API: Rate limit exceeded: 1 per 1 second", + match=re.escape( + "Error raised by inference API: rate limit exceeded.\nResponse: You have " + "reached maximum request limit.\n" + ), ): - output = llm(prompt) - assert isinstance(output, str) - output = llm(prompt) - assert isinstance(output, str) + for _ in range(10): + output = llm(prompt) + assert isinstance(output, str) diff --git a/libs/langchain/tests/integration_tests/memory/test_xata.py b/libs/langchain/tests/integration_tests/memory/test_xata.py new file mode 100644 index 000000000..88bd158a2 --- /dev/null +++ b/libs/langchain/tests/integration_tests/memory/test_xata.py @@ -0,0 +1,41 @@ +"""Test Xata chat memory store functionality. + +Before running this test, please create a Xata database. +""" + +import json +import os + +from langchain.memory import ConversationBufferMemory +from langchain.memory.chat_message_histories import XataChatMessageHistory +from langchain.schema.messages import _message_to_dict + + +class TestXata: + @classmethod + def setup_class(cls) -> None: + assert os.getenv("XATA_API_KEY"), "XATA_API_KEY environment variable is not set" + assert os.getenv("XATA_DB_URL"), "XATA_DB_URL environment variable is not set" + + def test_xata_chat_memory(self) -> None: + message_history = XataChatMessageHistory( + api_key=os.getenv("XATA_API_KEY", ""), + db_url=os.getenv("XATA_DB_URL", ""), + session_id="integration-test-session", + ) + memory = ConversationBufferMemory( + memory_key="baz", chat_memory=message_history, return_messages=True + ) + # add some messages + memory.chat_memory.add_ai_message("This is me, the AI") + memory.chat_memory.add_user_message("This is me, the human") + + # get the message history from the memory store and turn it into a json + messages = memory.chat_memory.messages + messages_json = json.dumps([_message_to_dict(msg) for msg in messages]) + + assert "This is me, the AI" in messages_json + assert "This is me, the human" in messages_json + + # remove the record from Redis, so the next test run won't pick it up + memory.chat_memory.clear() diff --git a/libs/langchain/tests/integration_tests/retrievers/test_google_cloud_enterprise_search.py b/libs/langchain/tests/integration_tests/retrievers/test_google_cloud_enterprise_search.py index 6bdeccdcc..47f576ac2 100644 --- a/libs/langchain/tests/integration_tests/retrievers/test_google_cloud_enterprise_search.py +++ b/libs/langchain/tests/integration_tests/retrievers/test_google_cloud_enterprise_search.py @@ -11,12 +11,15 @@ PROJECT_ID - set to your Google Cloud project ID SEARCH_ENGINE_ID - the ID of the search engine to use for the test """ +import pytest + from langchain.retrievers.google_cloud_enterprise_search import ( GoogleCloudEnterpriseSearchRetriever, ) from langchain.schema import Document +@pytest.mark.requires("google_api_core") def test_google_cloud_enterprise_search_get_relevant_documents() -> None: """Test the get_relevant_documents() method.""" retriever = GoogleCloudEnterpriseSearchRetriever() diff --git a/libs/langchain/tests/integration_tests/vectorstores/fake_embeddings.py b/libs/langchain/tests/integration_tests/vectorstores/fake_embeddings.py index 550174e2e..d202813f2 100644 --- a/libs/langchain/tests/integration_tests/vectorstores/fake_embeddings.py +++ b/libs/langchain/tests/integration_tests/vectorstores/fake_embeddings.py @@ -52,6 +52,7 @@ class ConsistentFakeEmbeddings(FakeEmbeddings): def embed_query(self, text: str) -> List[float]: """Return consistent embeddings for the text, if seen before, or a constant one if the text is unknown.""" + return self.embed_documents([text])[0] if text not in self.known_texts: return [float(1.0)] * (self.dimensionality - 1) + [float(0.0)] return [float(1.0)] * (self.dimensionality - 1) + [ diff --git a/libs/langchain/tests/integration_tests/vectorstores/qdrant/test_max_marginal_relevance.py b/libs/langchain/tests/integration_tests/vectorstores/qdrant/test_max_marginal_relevance.py index 5a383b36c..71d1643b7 100644 --- a/libs/langchain/tests/integration_tests/vectorstores/qdrant/test_max_marginal_relevance.py +++ b/libs/langchain/tests/integration_tests/vectorstores/qdrant/test_max_marginal_relevance.py @@ -1,6 +1,7 @@ from typing import Optional import pytest +from qdrant_client import models from langchain.schema import Document from langchain.vectorstores import Qdrant @@ -20,6 +21,17 @@ def test_qdrant_max_marginal_relevance_search( vector_name: Optional[str], ) -> None: """Test end to end construction and MRR search.""" + filter = models.Filter( + must=[ + models.FieldCondition( + key=f"{metadata_payload_key}.page", + match=models.MatchValue( + value=2, + ), + ), + ], + ) + texts = ["foo", "bar", "baz"] metadatas = [{"page": i} for i in range(len(texts))] docsearch = Qdrant.from_texts( @@ -40,3 +52,10 @@ def test_qdrant_max_marginal_relevance_search( Document(page_content="foo", metadata={"page": 0}), Document(page_content="baz", metadata={"page": 2}), ] + + output = docsearch.max_marginal_relevance_search( + "foo", k=2, fetch_k=3, lambda_mult=0.0, filter=filter + ) + assert output == [ + Document(page_content="baz", metadata={"page": 2}), + ] diff --git a/libs/langchain/tests/integration_tests/vectorstores/test_elasticsearch.py b/libs/langchain/tests/integration_tests/vectorstores/test_elasticsearch.py index 79b42ddd0..dafba4b1f 100644 --- a/libs/langchain/tests/integration_tests/vectorstores/test_elasticsearch.py +++ b/libs/langchain/tests/integration_tests/vectorstores/test_elasticsearch.py @@ -480,6 +480,8 @@ class TestElasticsearch: document={"text_field": text, "metadata": {}}, ) + docsearch.client.indices.refresh(index=index_name) + def assert_query(query_body: dict, query: str) -> dict: assert query_body == { "knn": { @@ -574,3 +576,34 @@ class TestElasticsearch: docsearch.delete([ids[3]]) output = docsearch.similarity_search("gni", k=10) assert len(output) == 0 + + def test_elasticsearch_indexing_exception_error( + self, + elasticsearch_connection: dict, + index_name: str, + caplog: pytest.LogCaptureFixture, + ) -> None: + """Test bulk exception logging is giving better hints.""" + from elasticsearch.helpers import BulkIndexError + + docsearch = ElasticsearchStore( + embedding=ConsistentFakeEmbeddings(), + **elasticsearch_connection, + index_name=index_name, + ) + + docsearch.client.indices.create( + index=index_name, + mappings={"properties": {}}, + settings={"index": {"default_pipeline": "not-existing-pipeline"}}, + ) + + texts = ["foo"] + + with pytest.raises(BulkIndexError): + docsearch.add_texts(texts) + + error_reason = "pipeline with id [not-existing-pipeline] does not exist" + log_message = f"First error reason: {error_reason}" + + assert log_message in caplog.text diff --git a/libs/langchain/tests/integration_tests/vectorstores/test_epsilla.py b/libs/langchain/tests/integration_tests/vectorstores/test_epsilla.py index af40d698b..33e2e6952 100644 --- a/libs/langchain/tests/integration_tests/vectorstores/test_epsilla.py +++ b/libs/langchain/tests/integration_tests/vectorstores/test_epsilla.py @@ -1,6 +1,4 @@ """Test Epsilla functionality.""" -from pyepsilla import vectordb - from langchain.vectorstores import Epsilla from tests.integration_tests.vectorstores.fake_embeddings import ( FakeEmbeddings, @@ -9,6 +7,8 @@ from tests.integration_tests.vectorstores.fake_embeddings import ( def _test_from_texts() -> Epsilla: + from pyepsilla import vectordb + embeddings = FakeEmbeddings() client = vectordb.Client() return Epsilla.from_texts(fake_texts, embeddings, client) @@ -22,6 +22,8 @@ def test_epsilla() -> None: def test_epsilla_add_texts() -> None: + from pyepsilla import vectordb + embeddings = FakeEmbeddings() client = vectordb.Client() db = Epsilla(client, embeddings) diff --git a/libs/langchain/tests/integration_tests/vectorstores/test_pgvector.py b/libs/langchain/tests/integration_tests/vectorstores/test_pgvector.py index 46c8f11e1..6d6028497 100644 --- a/libs/langchain/tests/integration_tests/vectorstores/test_pgvector.py +++ b/libs/langchain/tests/integration_tests/vectorstores/test_pgvector.py @@ -186,6 +186,34 @@ def test_pgvector_with_filter_in_set() -> None: ] +def test_pgvector_delete_docs() -> None: + """Add and delete documents.""" + texts = ["foo", "bar", "baz"] + metadatas = [{"page": str(i)} for i in range(len(texts))] + docsearch = PGVector.from_texts( + texts=texts, + collection_name="test_collection_filter", + embedding=FakeEmbeddingsWithAdaDimension(), + metadatas=metadatas, + ids=["1", "2", "3"], + connection_string=CONNECTION_STRING, + pre_delete_collection=True, + ) + docsearch.delete(["1", "2"]) + with docsearch._make_session() as session: + records = list(session.query(docsearch.EmbeddingStore).all()) + # ignoring type error since mypy cannot determine whether + # the list is sortable + assert sorted(record.custom_id for record in records) == ["3"] # type: ignore + + docsearch.delete(["2", "3"]) # Should not raise on missing ids + with docsearch._make_session() as session: + records = list(session.query(docsearch.EmbeddingStore).all()) + # ignoring type error since mypy cannot determine whether + # the list is sortable + assert sorted(record.custom_id for record in records) == [] # type: ignore + + def test_pgvector_relevance_score() -> None: """Test to make sure the relevance score is scaled to 0-1.""" texts = ["foo", "bar", "baz"] diff --git a/libs/langchain/tests/integration_tests/vectorstores/test_redis.py b/libs/langchain/tests/integration_tests/vectorstores/test_redis.py index aef3138e8..3b7a4c7ac 100644 --- a/libs/langchain/tests/integration_tests/vectorstores/test_redis.py +++ b/libs/langchain/tests/integration_tests/vectorstores/test_redis.py @@ -1,17 +1,28 @@ """Test Redis functionality.""" -from typing import List +import os +from typing import Any, Dict, List, Optional import pytest from langchain.docstore.document import Document -from langchain.vectorstores.redis import Redis -from tests.integration_tests.vectorstores.fake_embeddings import FakeEmbeddings +from langchain.vectorstores.redis import ( + Redis, + RedisFilter, + RedisNum, + RedisText, +) +from langchain.vectorstores.redis.filters import RedisFilterExpression +from tests.integration_tests.vectorstores.fake_embeddings import ( + ConsistentFakeEmbeddings, + FakeEmbeddings, +) TEST_INDEX_NAME = "test" TEST_REDIS_URL = "redis://localhost:6379" TEST_SINGLE_RESULT = [Document(page_content="foo")] -TEST_SINGLE_WITH_METADATA_RESULT = [Document(page_content="foo", metadata={"a": "b"})] +TEST_SINGLE_WITH_METADATA = {"a": "b"} TEST_RESULT = [Document(page_content="foo"), Document(page_content="foo")] +RANGE_SCORE = pytest.approx(0.0513, abs=0.002) COSINE_SCORE = pytest.approx(0.05, abs=0.002) IP_SCORE = -8.0 EUCLIDEAN_SCORE = 1.0 @@ -23,6 +34,27 @@ def drop(index_name: str) -> bool: ) +def convert_bytes(data: Any) -> Any: + if isinstance(data, bytes): + return data.decode("ascii") + if isinstance(data, dict): + return dict(map(convert_bytes, data.items())) + if isinstance(data, list): + return list(map(convert_bytes, data)) + if isinstance(data, tuple): + return map(convert_bytes, data) + return data + + +def make_dict(values: List[Any]) -> dict: + i = 0 + di = {} + while i < len(values) - 1: + di[values[i]] = values[i + 1] + i += 2 + return di + + @pytest.fixture def texts() -> List[str]: return ["foo", "bar", "baz"] @@ -31,7 +63,7 @@ def texts() -> List[str]: def test_redis(texts: List[str]) -> None: """Test end to end construction and search.""" docsearch = Redis.from_texts(texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL) - output = docsearch.similarity_search("foo", k=1) + output = docsearch.similarity_search("foo", k=1, return_metadata=False) assert output == TEST_SINGLE_RESULT assert drop(docsearch.index_name) @@ -40,30 +72,55 @@ def test_redis_new_vector(texts: List[str]) -> None: """Test adding a new document""" docsearch = Redis.from_texts(texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL) docsearch.add_texts(["foo"]) - output = docsearch.similarity_search("foo", k=2) + output = docsearch.similarity_search("foo", k=2, return_metadata=False) assert output == TEST_RESULT assert drop(docsearch.index_name) def test_redis_from_existing(texts: List[str]) -> None: """Test adding a new document""" - Redis.from_texts( + docsearch = Redis.from_texts( texts, FakeEmbeddings(), index_name=TEST_INDEX_NAME, redis_url=TEST_REDIS_URL ) + schema: Dict = docsearch.schema + + # write schema for the next test + docsearch.write_schema("test_schema.yml") + # Test creating from an existing docsearch2 = Redis.from_existing_index( - FakeEmbeddings(), index_name=TEST_INDEX_NAME, redis_url=TEST_REDIS_URL + FakeEmbeddings(), + index_name=TEST_INDEX_NAME, + redis_url=TEST_REDIS_URL, + schema=schema, ) - output = docsearch2.similarity_search("foo", k=1) + output = docsearch2.similarity_search("foo", k=1, return_metadata=False) assert output == TEST_SINGLE_RESULT +def test_redis_add_texts_to_existing() -> None: + """Test adding a new document""" + # Test creating from an existing with yaml from file + docsearch = Redis.from_existing_index( + FakeEmbeddings(), + index_name=TEST_INDEX_NAME, + redis_url=TEST_REDIS_URL, + schema="test_schema.yml", + ) + docsearch.add_texts(["foo"]) + output = docsearch.similarity_search("foo", k=2, return_metadata=False) + assert output == TEST_RESULT + assert drop(TEST_INDEX_NAME) + # remove the test_schema.yml file + os.remove("test_schema.yml") + + def test_redis_from_texts_return_keys(texts: List[str]) -> None: """Test from_texts_return_keys constructor.""" docsearch, keys = Redis.from_texts_return_keys( texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL ) - output = docsearch.similarity_search("foo", k=1) + output = docsearch.similarity_search("foo", k=1, return_metadata=False) assert output == TEST_SINGLE_RESULT assert len(keys) == len(texts) assert drop(docsearch.index_name) @@ -73,21 +130,124 @@ def test_redis_from_documents(texts: List[str]) -> None: """Test from_documents constructor.""" docs = [Document(page_content=t, metadata={"a": "b"}) for t in texts] docsearch = Redis.from_documents(docs, FakeEmbeddings(), redis_url=TEST_REDIS_URL) - output = docsearch.similarity_search("foo", k=1) - assert output == TEST_SINGLE_WITH_METADATA_RESULT + output = docsearch.similarity_search("foo", k=1, return_metadata=True) + assert "a" in output[0].metadata.keys() + assert "b" in output[0].metadata.values() assert drop(docsearch.index_name) -def test_redis_add_texts_to_existing() -> None: - """Test adding a new document""" - # Test creating from an existing - docsearch = Redis.from_existing_index( - FakeEmbeddings(), index_name=TEST_INDEX_NAME, redis_url=TEST_REDIS_URL +# -- test filters -- # + + +@pytest.mark.parametrize( + "filter_expr, expected_length, expected_nums", + [ + (RedisText("text") == "foo", 1, None), + (RedisFilter.text("text") == "foo", 1, None), + (RedisText("text") % "ba*", 2, ["bar", "baz"]), + (RedisNum("num") > 2, 1, [3]), + (RedisNum("num") < 2, 1, [1]), + (RedisNum("num") >= 2, 2, [2, 3]), + (RedisNum("num") <= 2, 2, [1, 2]), + (RedisNum("num") != 2, 2, [1, 3]), + (RedisFilter.num("num") != 2, 2, [1, 3]), + (RedisFilter.tag("category") == "a", 3, None), + (RedisFilter.tag("category") == "b", 2, None), + (RedisFilter.tag("category") == "c", 2, None), + (RedisFilter.tag("category") == ["b", "c"], 3, None), + ], + ids=[ + "text-filter-equals-foo", + "alternative-text-equals-foo", + "text-filter-fuzzy-match-ba", + "number-filter-greater-than-2", + "number-filter-less-than-2", + "number-filter-greater-equals-2", + "number-filter-less-equals-2", + "number-filter-not-equals-2", + "alternative-number-not-equals-2", + "tag-filter-equals-a", + "tag-filter-equals-b", + "tag-filter-equals-c", + "tag-filter-equals-b-or-c", + ], +) +def test_redis_filters_1( + filter_expr: RedisFilterExpression, + expected_length: int, + expected_nums: Optional[list], +) -> None: + metadata = [ + {"name": "joe", "num": 1, "text": "foo", "category": ["a", "b"]}, + {"name": "john", "num": 2, "text": "bar", "category": ["a", "c"]}, + {"name": "jane", "num": 3, "text": "baz", "category": ["b", "c", "a"]}, + ] + documents = [Document(page_content="foo", metadata=m) for m in metadata] + docsearch = Redis.from_documents( + documents, FakeEmbeddings(), redis_url=TEST_REDIS_URL ) - docsearch.add_texts(["foo"]) - output = docsearch.similarity_search("foo", k=2) - assert output == TEST_RESULT - assert drop(TEST_INDEX_NAME) + + output = docsearch.similarity_search("foo", k=3, filter=filter_expr) + + assert len(output) == expected_length + + if expected_nums is not None: + for out in output: + assert ( + out.metadata["text"] in expected_nums + or int(out.metadata["num"]) in expected_nums + ) + + assert drop(docsearch.index_name) + + +# -- test index specification -- # + + +def test_index_specification_generation() -> None: + index_schema = { + "text": [{"name": "job"}, {"name": "title"}], + "numeric": [{"name": "salary"}], + } + + text = ["foo"] + meta = {"job": "engineer", "title": "principal engineer", "salary": 100000} + docs = [Document(page_content=t, metadata=meta) for t in text] + r = Redis.from_documents( + docs, FakeEmbeddings(), redis_url=TEST_REDIS_URL, index_schema=index_schema + ) + + output = r.similarity_search("foo", k=1, return_metadata=True) + assert output[0].metadata["job"] == "engineer" + assert output[0].metadata["title"] == "principal engineer" + assert int(output[0].metadata["salary"]) == 100000 + + info = convert_bytes(r.client.ft(r.index_name).info()) + attributes = info["attributes"] + assert len(attributes) == 5 + for attr in attributes: + d = make_dict(attr) + if d["identifier"] == "job": + assert d["type"] == "TEXT" + elif d["identifier"] == "title": + assert d["type"] == "TEXT" + elif d["identifier"] == "salary": + assert d["type"] == "NUMERIC" + elif d["identifier"] == "content": + assert d["type"] == "TEXT" + elif d["identifier"] == "content_vector": + assert d["type"] == "VECTOR" + else: + raise ValueError("Unexpected attribute in index schema") + + assert drop(r.index_name) + + +# -- test distance metrics -- # + +cosine_schema: Dict = {"distance_metric": "cosine"} +ip_schema: Dict = {"distance_metric": "IP"} +l2_schema: Dict = {"distance_metric": "L2"} def test_cosine(texts: List[str]) -> None: @@ -96,7 +256,7 @@ def test_cosine(texts: List[str]) -> None: texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL, - distance_metric="COSINE", + vector_schema=cosine_schema, ) output = docsearch.similarity_search_with_score("far", k=2) _, score = output[1] @@ -107,7 +267,7 @@ def test_cosine(texts: List[str]) -> None: def test_l2(texts: List[str]) -> None: """Test Flat L2 distance.""" docsearch = Redis.from_texts( - texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL, distance_metric="L2" + texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL, vector_schema=l2_schema ) output = docsearch.similarity_search_with_score("far", k=2) _, score = output[1] @@ -118,7 +278,7 @@ def test_l2(texts: List[str]) -> None: def test_ip(texts: List[str]) -> None: """Test inner product distance.""" docsearch = Redis.from_texts( - texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL, distance_metric="IP" + texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL, vector_schema=ip_schema ) output = docsearch.similarity_search_with_score("far", k=2) _, score = output[1] @@ -126,29 +286,34 @@ def test_ip(texts: List[str]) -> None: assert drop(docsearch.index_name) -def test_similarity_search_limit_score(texts: List[str]) -> None: +def test_similarity_search_limit_distance(texts: List[str]) -> None: """Test similarity search limit score.""" docsearch = Redis.from_texts( - texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL, distance_metric="COSINE" + texts, + FakeEmbeddings(), + redis_url=TEST_REDIS_URL, ) - output = docsearch.similarity_search_limit_score("far", k=2, score_threshold=0.1) - assert len(output) == 1 - _, score = output[0] - assert score == COSINE_SCORE + output = docsearch.similarity_search(texts[0], k=3, distance_threshold=0.1) + + # can't check score but length of output should be 2 + assert len(output) == 2 assert drop(docsearch.index_name) -def test_similarity_search_with_score_with_limit_score(texts: List[str]) -> None: +def test_similarity_search_with_score_with_limit_distance(texts: List[str]) -> None: """Test similarity search with score with limit score.""" + docsearch = Redis.from_texts( - texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL, distance_metric="COSINE" + texts, ConsistentFakeEmbeddings(), redis_url=TEST_REDIS_URL ) - output = docsearch.similarity_search_with_relevance_scores( - "far", k=2, score_threshold=0.1 + output = docsearch.similarity_search_with_score( + texts[0], k=3, distance_threshold=0.1, return_metadata=True ) - assert len(output) == 1 - _, score = output[0] - assert score == COSINE_SCORE + + assert len(output) == 2 + for out, score in output: + if out.page_content == texts[1]: + score == COSINE_SCORE assert drop(docsearch.index_name) @@ -156,6 +321,48 @@ def test_delete(texts: List[str]) -> None: """Test deleting a new document""" docsearch = Redis.from_texts(texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL) ids = docsearch.add_texts(["foo"]) - got = docsearch.delete(ids=ids) + got = docsearch.delete(ids=ids, redis_url=TEST_REDIS_URL) assert got assert drop(docsearch.index_name) + + +def test_redis_as_retriever() -> None: + texts = ["foo", "foo", "foo", "foo", "bar"] + docsearch = Redis.from_texts( + texts, ConsistentFakeEmbeddings(), redis_url=TEST_REDIS_URL + ) + + retriever = docsearch.as_retriever(search_type="similarity", search_kwargs={"k": 3}) + results = retriever.get_relevant_documents("foo") + assert len(results) == 3 + assert all([d.page_content == "foo" for d in results]) + + assert drop(docsearch.index_name) + + +def test_redis_retriever_distance_threshold() -> None: + texts = ["foo", "bar", "baz"] + docsearch = Redis.from_texts(texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL) + + retriever = docsearch.as_retriever( + search_type="similarity_distance_threshold", + search_kwargs={"k": 3, "distance_threshold": 0.1}, + ) + results = retriever.get_relevant_documents("foo") + assert len(results) == 2 + + assert drop(docsearch.index_name) + + +def test_redis_retriever_score_threshold() -> None: + texts = ["foo", "bar", "baz"] + docsearch = Redis.from_texts(texts, FakeEmbeddings(), redis_url=TEST_REDIS_URL) + + retriever = docsearch.as_retriever( + search_type="similarity_score_threshold", + search_kwargs={"k": 3, "score_threshold": 0.91}, + ) + results = retriever.get_relevant_documents("foo") + assert len(results) == 2 + + assert drop(docsearch.index_name) diff --git a/libs/langchain/tests/unit_tests/chains/test_qa_with_sources.py b/libs/langchain/tests/unit_tests/chains/test_qa_with_sources.py index e69d9b5cd..56daf0068 100644 --- a/libs/langchain/tests/unit_tests/chains/test_qa_with_sources.py +++ b/libs/langchain/tests/unit_tests/chains/test_qa_with_sources.py @@ -12,6 +12,21 @@ from tests.unit_tests.llms.fake_llm import FakeLLM "This Agreement is governed by English law.\n", "28-pl", ), + ( + "This Agreement is governed by English law.\nSources: 28-pl", + "This Agreement is governed by English law.\n", + "28-pl", + ), + ( + "This Agreement is governed by English law.\nsource: 28-pl", + "This Agreement is governed by English law.\n", + "28-pl", + ), + ( + "This Agreement is governed by English law.\nSource: 28-pl", + "This Agreement is governed by English law.\n", + "28-pl", + ), ( "This Agreement is governed by English law.\n" "SOURCES: 28-pl\n\n" diff --git a/libs/langchain/tests/unit_tests/chat_loaders/__init__.py b/libs/langchain/tests/unit_tests/chat_loaders/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/libs/langchain/tests/unit_tests/chat_loaders/data/telegram_chat_html/messages.html b/libs/langchain/tests/unit_tests/chat_loaders/data/telegram_chat_html/messages.html new file mode 100644 index 000000000..a90ba5449 --- /dev/null +++ b/libs/langchain/tests/unit_tests/chat_loaders/data/telegram_chat_html/messages.html @@ -0,0 +1,166 @@ + + + + + + +Exported Data + + + + + + + + + + +
    + + + +
    + +
    + +
    + +
    +23 August 2023 +
    + +
    + +
    + +
    + +
    + +
    +bA +
    + +
    + +
    + +
    + +
    +13:11 +
    + +
    +Jimmeny Marvelton +
    + +
    +i refuse to converse with you +
    + +
    + +
    + +
    + +
    + +
    + +
    +WF +
    + +
    + +
    + +
    + +
    +13:13 +
    + +
    + Batman & Robin +
    + +
    +Hi nemesis +
    + +
    + +
    + +
    + +
    + +
    + +
    +bA +
    + +
    + +
    + +
    + +
    +13:15 +
    + +
    +Jimmeny Marvelton +
    + +
    +we meet again +
    + +
    + +
    + +
    + +
    + +
    +13:15 +
    + +
    +you will not trick me this time +
    + +
    + +
    + +
    + +
    + +
    + + + + diff --git a/libs/langchain/tests/unit_tests/chat_loaders/data/telegram_chat_json/result.json b/libs/langchain/tests/unit_tests/chat_loaders/data/telegram_chat_json/result.json new file mode 100644 index 000000000..e40d6a1f4 --- /dev/null +++ b/libs/langchain/tests/unit_tests/chat_loaders/data/telegram_chat_json/result.json @@ -0,0 +1,67 @@ +{ + "name": "Jimmeny", + "type": "personal_chat", + "id": 5965280513, + "messages": [ + { + "id": 1, + "type": "message", + "date": "2023-08-23T13:11:23", + "date_unixtime": "1692821483", + "from": "Jimmeny Marvelton", + "from_id": "user123450513", + "text": "i refuse to converse with you", + "text_entities": [ + { + "type": "plain", + "text": "i refuse to converse with you" + } + ] + }, + { + "id": 2, + "type": "message", + "date": "2023-08-23T13:13:20", + "date_unixtime": "1692821600", + "from": "Batman & Robin", + "from_id": "user6565661032", + "text": "Hi nemesis", + "text_entities": [ + { + "type": "plain", + "text": "Hi nemesis" + } + ] + }, + { + "id": 3, + "type": "message", + "date": "2023-08-23T13:15:35", + "date_unixtime": "1692821735", + "from": "Jimmeny Marvelton", + "from_id": "user123450513", + "text": "we meet again", + "text_entities": [ + { + "type": "plain", + "text": "we meet again" + } + ] + }, + { + "id": 4, + "type": "message", + "date": "2023-08-23T13:15:53", + "date_unixtime": "1692821753", + "from": "Jimmeny Marvelton", + "from_id": "user123450513", + "text": "you will not trick me this time", + "text_entities": [ + { + "type": "plain", + "text": "you will not trick me this time" + } + ] + } + ] +} \ No newline at end of file diff --git a/libs/langchain/tests/unit_tests/chat_loaders/data/whatsapp_chat.txt b/libs/langchain/tests/unit_tests/chat_loaders/data/whatsapp_chat.txt new file mode 100644 index 000000000..54056c435 --- /dev/null +++ b/libs/langchain/tests/unit_tests/chat_loaders/data/whatsapp_chat.txt @@ -0,0 +1,12 @@ +[8/15/23, 9:12:33 AM] Dr. Feather: ‎Messages and calls are end-to-end encrypted. No one outside of this chat, not even WhatsApp, can read or listen to them. +[8/15/23, 9:12:43 AM] Dr. Feather: I spotted a rare Hyacinth Macaw yesterday in the Amazon Rainforest. Such a magnificent creature! +‎[8/15/23, 9:12:48 AM] Dr. Feather: ‎image omitted +[8/15/23, 9:13:15 AM] Jungle Jane: That's stunning! Were you able to observe its behavior? +‎[8/15/23, 9:13:23 AM] Dr. Feather: ‎image omitted +[8/15/23, 9:14:02 AM] Dr. Feather: Yes, it seemed quite social with other macaws. They're known for their playful nature. +[8/15/23, 9:14:15 AM] Jungle Jane: How's the research going on parrot communication? +‎[8/15/23, 9:14:30 AM] Dr. Feather: ‎image omitted +[8/15/23, 9:14:50 AM] Dr. Feather: It's progressing well. We're learning so much about how they use sound and color to communicate. +[8/15/23, 9:15:10 AM] Jungle Jane: That's fascinating! Can't wait to read your paper on it. +[8/15/23, 9:15:20 AM] Dr. Feather: Thank you! I'll send you a draft soon. +[8/15/23, 9:25:16 PM] Jungle Jane: Looking forward to it! Keep up the great work. diff --git a/libs/langchain/tests/unit_tests/chat_loaders/test_slack.py b/libs/langchain/tests/unit_tests/chat_loaders/test_slack.py new file mode 100644 index 000000000..cdf569d60 --- /dev/null +++ b/libs/langchain/tests/unit_tests/chat_loaders/test_slack.py @@ -0,0 +1,24 @@ +import pathlib + +from langchain.chat_loaders import slack, utils + + +def test_slack_chat_loader() -> None: + chat_path = ( + pathlib.Path(__file__).parents[2] + / "integration_tests" + / "examples" + / "slack_export.zip" + ) + loader = slack.SlackChatLoader(str(chat_path)) + + chat_sessions = list( + utils.map_ai_messages(loader.lazy_load(), sender="U0500003428") + ) + assert chat_sessions, "Chat sessions should not be empty" + + assert chat_sessions[1]["messages"], "Chat messages should not be empty" + + assert ( + "Example message" in chat_sessions[1]["messages"][0].content + ), "Chat content mismatch" diff --git a/libs/langchain/tests/unit_tests/chat_loaders/test_telegram.py b/libs/langchain/tests/unit_tests/chat_loaders/test_telegram.py new file mode 100644 index 000000000..7984adc19 --- /dev/null +++ b/libs/langchain/tests/unit_tests/chat_loaders/test_telegram.py @@ -0,0 +1,97 @@ +"""Test the telegram chat loader.""" +import pathlib +import tempfile +import zipfile +from typing import Sequence + +import pytest + +from langchain import schema +from langchain.chat_loaders import telegram, utils + + +def _assert_messages_are_equal( + actual_messages: Sequence[schema.BaseMessage], + expected_messages: Sequence[schema.BaseMessage], +) -> None: + assert len(actual_messages) == len(expected_messages) + for actual, expected in zip(actual_messages, expected_messages): + assert actual.content == expected.content + assert ( + actual.additional_kwargs["sender"] == expected.additional_kwargs["sender"] + ) + + +def _check_telegram_chat_loader(path: str) -> None: + _data_dir = pathlib.Path(__file__).parent / "data" + source_path = _data_dir / path + # Create a zip file from the directory in a temp directory + with tempfile.TemporaryDirectory() as temp_dir_: + temp_dir = pathlib.Path(temp_dir_) + if path.endswith(".zip"): + # Make a new zip file + zip_path = temp_dir / "telegram_chat.zip" + with zipfile.ZipFile(zip_path, "w") as zip_file: + original_path = _data_dir / path.replace(".zip", "") + for file_path in original_path.iterdir(): + zip_file.write(file_path, arcname=file_path.name) + source_path = zip_path + loader = telegram.TelegramChatLoader(str(source_path)) + chat_sessions_ = loader.lazy_load() + chat_sessions_ = utils.merge_chat_runs(chat_sessions_) + chat_sessions = list( + utils.map_ai_messages(chat_sessions_, sender="Batman & Robin") + ) + assert len(chat_sessions) == 1 + session = chat_sessions[0] + assert len(session["messages"]) > 0 + assert session["messages"][0].content == "i refuse to converse with you" + expected_content = [ + schema.HumanMessage( + content="i refuse to converse with you", + additional_kwargs={ + "sender": "Jimmeny Marvelton", + "events": [{"message_time": "23.08.2023 13:11:23 UTC-08:00"}], + }, + ), + schema.AIMessage( + content="Hi nemesis", + additional_kwargs={ + "sender": "Batman & Robin", + "events": [{"message_time": "23.08.2023 13:13:20 UTC-08:00"}], + }, + ), + schema.HumanMessage( + content="we meet again\n\nyou will not trick me this time", + additional_kwargs={ + "sender": "Jimmeny Marvelton", + "events": [{"message_time": "23.08.2023 13:15:35 UTC-08:00"}], + }, + ), + ] + _assert_messages_are_equal(session["messages"], expected_content) + + +@pytest.mark.parametrize( + "path", + [ + "telegram_chat_json", + "telegram_chat_json.zip", + "telegram_chat_json/result.json", + ], +) +def test_telegram_chat_loader(path: str) -> None: + _check_telegram_chat_loader(path) + + +@pytest.mark.skip(reason="requires bs4 but marking it as such doesn't seem to work") +@pytest.mark.parametrize( + "path", + [ + "telegram_chat_json", + "telegram_chat_json.zip", + "telegram_chat_json/result.json", + ], +) +def test_telegram_chat_loader_html(path: str) -> None: + _check_telegram_chat_loader(path) diff --git a/libs/langchain/tests/unit_tests/chat_loaders/test_whatsapp.py b/libs/langchain/tests/unit_tests/chat_loaders/test_whatsapp.py new file mode 100644 index 000000000..9263a80b1 --- /dev/null +++ b/libs/langchain/tests/unit_tests/chat_loaders/test_whatsapp.py @@ -0,0 +1,20 @@ +import pathlib + +from langchain.chat_loaders import utils, whatsapp + + +def test_whatsapp_chat_loader() -> None: + chat_path = pathlib.Path(__file__).parent / "data" / "whatsapp_chat.txt" + loader = whatsapp.WhatsAppChatLoader(str(chat_path)) + + chat_sessions = list( + utils.map_ai_messages(loader.lazy_load(), sender="Dr. Feather") + ) + assert chat_sessions, "Chat sessions should not be empty" + + assert chat_sessions[0]["messages"], "Chat messages should not be empty" + + assert ( + "I spotted a rare Hyacinth Macaw yesterday in the Amazon Rainforest." + " Such a magnificent creature!" in chat_sessions[0]["messages"][0].content + ), "Chat content mismatch" diff --git a/libs/langchain/tests/unit_tests/chat_models/test_openai.py b/libs/langchain/tests/unit_tests/chat_models/test_openai.py index b417d82e9..c23372472 100644 --- a/libs/langchain/tests/unit_tests/chat_models/test_openai.py +++ b/libs/langchain/tests/unit_tests/chat_models/test_openai.py @@ -6,9 +6,7 @@ from unittest.mock import MagicMock, patch import pytest from langchain.adapters.openai import convert_dict_to_message -from langchain.chat_models.openai import ( - ChatOpenAI, -) +from langchain.chat_models.openai import ChatOpenAI from langchain.schema.messages import ( AIMessage, FunctionMessage, @@ -17,6 +15,14 @@ from langchain.schema.messages import ( ) +@pytest.mark.requires("openai") +def test_openai_model_param() -> None: + llm = ChatOpenAI(model="foo") + assert llm.model_name == "foo" + llm = ChatOpenAI(model_name="foo") + assert llm.model_name == "foo" + + def test_function_message_dict_to_function_message() -> None: content = json.dumps({"result": "Example #1"}) name = "test_function" diff --git a/libs/langchain/tests/unit_tests/document_loaders/parsers/test_public_api.py b/libs/langchain/tests/unit_tests/document_loaders/parsers/test_public_api.py index 84f2db36b..f1037064b 100644 --- a/libs/langchain/tests/unit_tests/document_loaders/parsers/test_public_api.py +++ b/libs/langchain/tests/unit_tests/document_loaders/parsers/test_public_api.py @@ -5,6 +5,7 @@ def test_parsers_public_api_correct() -> None: """Test public API of parsers for breaking changes.""" assert set(__all__) == { "BS4HTMLParser", + "DocAIParser", "GrobidParser", "LanguageParser", "OpenAIWhisperParser", diff --git a/libs/langchain/tests/unit_tests/document_loaders/test_assemblyai.py b/libs/langchain/tests/unit_tests/document_loaders/test_assemblyai.py new file mode 100644 index 000000000..550a2c0d1 --- /dev/null +++ b/libs/langchain/tests/unit_tests/document_loaders/test_assemblyai.py @@ -0,0 +1,48 @@ +import pytest +from pytest_mock import MockerFixture + +from langchain.document_loaders import AssemblyAIAudioTranscriptLoader +from langchain.document_loaders.assemblyai import TranscriptFormat + + +@pytest.mark.requires("assemblyai") +def test_initialization() -> None: + loader = AssemblyAIAudioTranscriptLoader( + file_path="./testfile.mp3", api_key="api_key" + ) + assert loader.file_path == "./testfile.mp3" + assert loader.transcript_format == TranscriptFormat.TEXT + + +@pytest.mark.requires("assemblyai") +def test_load(mocker: MockerFixture) -> None: + mocker.patch( + "assemblyai.Transcriber.transcribe", + return_value=mocker.MagicMock( + text="Test transcription text", json_response={"id": "1"}, error=None + ), + ) + + loader = AssemblyAIAudioTranscriptLoader( + file_path="./testfile.mp3", api_key="api_key" + ) + docs = loader.load() + assert len(docs) == 1 + assert docs[0].page_content == "Test transcription text" + assert docs[0].metadata == {"id": "1"} + + +@pytest.mark.requires("assemblyai") +def test_transcription_error(mocker: MockerFixture) -> None: + mocker.patch( + "assemblyai.Transcriber.transcribe", + return_value=mocker.MagicMock(error="Test error"), + ) + + loader = AssemblyAIAudioTranscriptLoader( + file_path="./testfile.mp3", api_key="api_key" + ) + + expected_error = "Could not transcribe file: Test error" + with pytest.raises(ValueError, match=expected_error): + loader.load() diff --git a/libs/langchain/tests/unit_tests/document_loaders/test_confluence.py b/libs/langchain/tests/unit_tests/document_loaders/test_confluence.py index 42de78598..0048a8fba 100644 --- a/libs/langchain/tests/unit_tests/document_loaders/test_confluence.py +++ b/libs/langchain/tests/unit_tests/document_loaders/test_confluence.py @@ -6,7 +6,7 @@ import pytest import requests from langchain.docstore.document import Document -from langchain.document_loaders.confluence import ConfluenceLoader +from langchain.document_loaders.confluence import ConfluenceLoader, ContentFormat @pytest.fixture @@ -152,6 +152,40 @@ class TestConfluenceLoader: assert mock_confluence.cql.call_count == 0 assert mock_confluence.get_page_child_by_type.call_count == 0 + def test_confluence_loader_when_content_format_and_keep_markdown_format_enabled( + self, mock_confluence: MagicMock + ) -> None: + # one response with two pages + mock_confluence.get_all_pages_from_space.return_value = [ + self._get_mock_page("123", ContentFormat.VIEW), + self._get_mock_page("456", ContentFormat.VIEW), + ] + mock_confluence.get_all_restrictions_for_content.side_effect = [ + self._get_mock_page_restrictions("123"), + self._get_mock_page_restrictions("456"), + ] + + confluence_loader = self._get_mock_confluence_loader(mock_confluence) + + documents = confluence_loader.load( + space_key=self.MOCK_SPACE_KEY, + content_format=ContentFormat.VIEW, + keep_markdown_format=True, + max_pages=2, + ) + + assert mock_confluence.get_all_pages_from_space.call_count == 1 + + assert len(documents) == 2 + assert all(isinstance(doc, Document) for doc in documents) + assert documents[0].page_content == "Content 123\n\n" + assert documents[1].page_content == "Content 456\n\n" + + assert mock_confluence.get_page_by_id.call_count == 0 + assert mock_confluence.get_all_pages_by_label.call_count == 0 + assert mock_confluence.cql.call_count == 0 + assert mock_confluence.get_page_child_by_type.call_count == 0 + def _get_mock_confluence_loader( self, mock_confluence: MagicMock ) -> ConfluenceLoader: @@ -163,11 +197,15 @@ class TestConfluenceLoader: confluence_loader.confluence = mock_confluence return confluence_loader - def _get_mock_page(self, page_id: str) -> Dict: + def _get_mock_page( + self, page_id: str, content_format: ContentFormat = ContentFormat.STORAGE + ) -> Dict: return { "id": f"{page_id}", "title": f"Page {page_id}", - "body": {"storage": {"value": f"

    Content {page_id}

    "}}, + "body": { + f"{content_format.name.lower()}": {"value": f"

    Content {page_id}

    "} + }, "status": "current", "type": "page", "_links": { diff --git a/libs/langchain/tests/unit_tests/document_loaders/test_git.py b/libs/langchain/tests/unit_tests/document_loaders/test_git.py index c667cbdc8..269f5e2bb 100644 --- a/libs/langchain/tests/unit_tests/document_loaders/test_git.py +++ b/libs/langchain/tests/unit_tests/document_loaders/test_git.py @@ -23,7 +23,7 @@ def init_repo(tmpdir: py.path.local, dir_name: str) -> str: git.add([sample_file]) git.commit(m="Initial commit") - return repo_dir + return str(repo_dir) @pytest.mark.requires("git") diff --git a/libs/langchain/tests/unit_tests/indexes/test_api.py b/libs/langchain/tests/unit_tests/indexes/test_api.py new file mode 100644 index 000000000..3104084d0 --- /dev/null +++ b/libs/langchain/tests/unit_tests/indexes/test_api.py @@ -0,0 +1,13 @@ +from langchain.indexes import __all__ + + +def test_all() -> None: + """Use to catch obvious breaking changes.""" + assert __all__ == sorted(__all__, key=str.lower) + assert __all__ == [ + "GraphIndexCreator", + "index", + "IndexingResult", + "SQLRecordManager", + "VectorstoreIndexCreator", + ] diff --git a/libs/langchain/tests/unit_tests/indexes/test_hashed_document.py b/libs/langchain/tests/unit_tests/indexes/test_hashed_document.py new file mode 100644 index 000000000..24bbd1152 --- /dev/null +++ b/libs/langchain/tests/unit_tests/indexes/test_hashed_document.py @@ -0,0 +1,50 @@ +import pytest + +from langchain.indexes._api import _HashedDocument +from langchain.schema import Document + + +def test_hashed_document_hashing() -> None: + hashed_document = _HashedDocument( + uid="123", page_content="Lorem ipsum dolor sit amet", metadata={"key": "value"} + ) + assert isinstance(hashed_document.hash_, str) + + +def test_hashing_with_missing_content() -> None: + """Check that ValueError is raised if page_content is missing.""" + with pytest.raises(ValueError): + _HashedDocument( + metadata={"key": "value"}, + ) + + +def test_uid_auto_assigned_to_hash() -> None: + """Test uid is auto-assigned to the hashed_document hash.""" + hashed_document = _HashedDocument( + page_content="Lorem ipsum dolor sit amet", metadata={"key": "value"} + ) + assert hashed_document.uid == hashed_document.hash_ + + +def test_to_document() -> None: + """Test to_document method.""" + hashed_document = _HashedDocument( + page_content="Lorem ipsum dolor sit amet", metadata={"key": "value"} + ) + doc = hashed_document.to_document() + assert isinstance(doc, Document) + assert doc.page_content == "Lorem ipsum dolor sit amet" + assert doc.metadata == {"key": "value"} + + +def test_from_document() -> None: + """Test from document class method.""" + document = Document( + page_content="Lorem ipsum dolor sit amet", metadata={"key": "value"} + ) + + hashed_document = _HashedDocument.from_document(document) + # hash should be deterministic + assert hashed_document.hash_ == "fd1dc827-051b-537d-a1fe-1fa043e8b276" + assert hashed_document.uid == hashed_document.hash_ diff --git a/libs/langchain/tests/unit_tests/indexes/test_indexing.py b/libs/langchain/tests/unit_tests/indexes/test_indexing.py new file mode 100644 index 000000000..70ebf4fcb --- /dev/null +++ b/libs/langchain/tests/unit_tests/indexes/test_indexing.py @@ -0,0 +1,474 @@ +from datetime import datetime +from typing import Any, Dict, Iterable, Iterator, List, Optional, Sequence, Type +from unittest.mock import patch + +import pytest + +from langchain.document_loaders.base import BaseLoader +from langchain.embeddings.base import Embeddings +from langchain.indexes import index +from langchain.indexes._sql_record_manager import SQLRecordManager +from langchain.schema import Document +from langchain.vectorstores.base import VST, VectorStore + + +class ToyLoader(BaseLoader): + """Toy loader that always returns the same documents.""" + + def __init__(self, documents: Sequence[Document]) -> None: + """Initialize with the documents to return.""" + self.documents = documents + + def lazy_load( + self, + ) -> Iterator[Document]: + yield from self.documents + + def load(self) -> List[Document]: + """Load the documents from the source.""" + return list(self.lazy_load()) + + +class InMemoryVectorStore(VectorStore): + """In-memory implementation of VectorStore using a dictionary.""" + + def __init__(self) -> None: + """Vector store interface for testing things in memory.""" + self.store: Dict[str, Document] = {} + + def delete(self, ids: Optional[Sequence[str]] = None, **kwargs: Any) -> None: + """Delete the given documents from the store using their IDs.""" + if ids: + for _id in ids: + self.store.pop(_id, None) + + def add_documents( # type: ignore + self, + documents: Sequence[Document], + *, + ids: Optional[Sequence[str]] = None, + **kwargs: Any, + ) -> None: + """Add the given documents to the store (insert behavior).""" + if ids and len(ids) != len(documents): + raise ValueError( + f"Expected {len(ids)} ids, got {len(documents)} documents." + ) + + if not ids: + raise NotImplementedError("This is not implemented yet.") + + for _id, document in zip(ids, documents): + if _id in self.store: + raise ValueError( + f"Document with uid {_id} already exists in the store." + ) + self.store[_id] = document + + def add_texts( + self, + texts: Iterable[str], + metadatas: Optional[List[dict]] = None, + **kwargs: Any, + ) -> List[str]: + """Add the given texts to the store (insert behavior).""" + raise NotImplementedError() + + @classmethod + def from_texts( + cls: Type[VST], + texts: List[str], + embedding: Embeddings, + metadatas: Optional[List[dict]] = None, + **kwargs: Any, + ) -> VST: + """Create a vector store from a list of texts.""" + raise NotImplementedError() + + def similarity_search( + self, query: str, k: int = 4, **kwargs: Any + ) -> List[Document]: + """Find the most similar documents to the given query.""" + raise NotImplementedError() + + +@pytest.fixture +def record_manager() -> SQLRecordManager: + """Timestamped set fixture.""" + record_manager = SQLRecordManager("kittens", db_url="sqlite:///:memory:") + record_manager.create_schema() + return record_manager + + +@pytest.fixture +def vector_store() -> InMemoryVectorStore: + """Vector store fixture.""" + return InMemoryVectorStore() + + +def test_indexing_same_content( + record_manager: SQLRecordManager, vector_store: InMemoryVectorStore +) -> None: + """Indexing some content to confirm it gets added only once.""" + loader = ToyLoader( + documents=[ + Document( + page_content="This is a test document.", + ), + Document( + page_content="This is another document.", + ), + ] + ) + + assert index(loader, record_manager, vector_store) == { + "num_added": 2, + "num_deleted": 0, + "num_skipped": 0, + "num_updated": 0, + } + + assert len(list(vector_store.store)) == 2 + + for _ in range(2): + # Run the indexing again + assert index(loader, record_manager, vector_store) == { + "num_added": 0, + "num_deleted": 0, + "num_skipped": 2, + "num_updated": 0, + } + + +def test_index_simple_delete_full( + record_manager: SQLRecordManager, vector_store: InMemoryVectorStore +) -> None: + """Indexing some content to confirm it gets added only once.""" + loader = ToyLoader( + documents=[ + Document( + page_content="This is a test document.", + ), + Document( + page_content="This is another document.", + ), + ] + ) + + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 1).timestamp() + ): + assert index(loader, record_manager, vector_store, delete_mode="full") == { + "num_added": 2, + "num_deleted": 0, + "num_skipped": 0, + "num_updated": 0, + } + + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 1).timestamp() + ): + assert index(loader, record_manager, vector_store, delete_mode="full") == { + "num_added": 0, + "num_deleted": 0, + "num_skipped": 2, + "num_updated": 0, + } + + loader = ToyLoader( + documents=[ + Document( + page_content="mutated document 1", + ), + Document( + page_content="This is another document.", # <-- Same as original + ), + ] + ) + + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 2).timestamp() + ): + assert index(loader, record_manager, vector_store, delete_mode="full") == { + "num_added": 1, + "num_deleted": 1, + "num_skipped": 1, + "num_updated": 0, + } + + doc_texts = set( + # Ignoring type since doc should be in the store and not a None + vector_store.store.get(uid).page_content # type: ignore + for uid in vector_store.store + ) + assert doc_texts == {"mutated document 1", "This is another document."} + + # Attempt to index again verify that nothing changes + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 2).timestamp() + ): + assert index(loader, record_manager, vector_store, delete_mode="full") == { + "num_added": 0, + "num_deleted": 0, + "num_skipped": 2, + "num_updated": 0, + } + + +def test_incremental_fails_with_bad_source_ids( + record_manager: SQLRecordManager, vector_store: InMemoryVectorStore +) -> None: + """Test indexing with incremental deletion strategy.""" + loader = ToyLoader( + documents=[ + Document( + page_content="This is a test document.", + metadata={"source": "1"}, + ), + Document( + page_content="This is another document.", + metadata={"source": "2"}, + ), + Document( + page_content="This is yet another document.", + metadata={"source": None}, + ), + ] + ) + + with pytest.raises(ValueError): + # Should raise an error because no source id function was specified + index(loader, record_manager, vector_store, delete_mode="incremental") + + with pytest.raises(ValueError): + # Should raise an error because no source id function was specified + index( + loader, + record_manager, + vector_store, + delete_mode="incremental", + source_id_key="source", + ) + + +def test_no_delete( + record_manager: SQLRecordManager, vector_store: InMemoryVectorStore +) -> None: + """Test indexing without a deletion strategy.""" + loader = ToyLoader( + documents=[ + Document( + page_content="This is a test document.", + metadata={"source": "1"}, + ), + Document( + page_content="This is another document.", + metadata={"source": "2"}, + ), + ] + ) + + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 2).timestamp() + ): + assert index( + loader, + record_manager, + vector_store, + delete_mode=None, + source_id_key="source", + ) == { + "num_added": 2, + "num_deleted": 0, + "num_skipped": 0, + "num_updated": 0, + } + + # If we add the same content twice it should be skipped + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 2).timestamp() + ): + assert index( + loader, + record_manager, + vector_store, + delete_mode=None, + source_id_key="source", + ) == { + "num_added": 0, + "num_deleted": 0, + "num_skipped": 2, + "num_updated": 0, + } + + loader = ToyLoader( + documents=[ + Document( + page_content="mutated content", + metadata={"source": "1"}, + ), + Document( + page_content="This is another document.", + metadata={"source": "2"}, + ), + ] + ) + + # Should result in no updates or deletions! + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 2).timestamp() + ): + assert index( + loader, + record_manager, + vector_store, + delete_mode=None, + source_id_key="source", + ) == { + "num_added": 1, + "num_deleted": 0, + "num_skipped": 1, + "num_updated": 0, + } + + +def test_incremental_delete( + record_manager: SQLRecordManager, vector_store: InMemoryVectorStore +) -> None: + """Test indexing with incremental deletion strategy.""" + loader = ToyLoader( + documents=[ + Document( + page_content="This is a test document.", + metadata={"source": "1"}, + ), + Document( + page_content="This is another document.", + metadata={"source": "2"}, + ), + ] + ) + + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 2).timestamp() + ): + assert index( + loader, + record_manager, + vector_store, + delete_mode="incremental", + source_id_key="source", + ) == { + "num_added": 2, + "num_deleted": 0, + "num_skipped": 0, + "num_updated": 0, + } + + doc_texts = set( + # Ignoring type since doc should be in the store and not a None + vector_store.store.get(uid).page_content # type: ignore + for uid in vector_store.store + ) + assert doc_texts == {"This is another document.", "This is a test document."} + + # Attempt to index again verify that nothing changes + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 2).timestamp() + ): + assert index( + loader, + record_manager, + vector_store, + delete_mode="incremental", + source_id_key="source", + ) == { + "num_added": 0, + "num_deleted": 0, + "num_skipped": 2, + "num_updated": 0, + } + + # Create 2 documents from the same source all with mutated content + loader = ToyLoader( + documents=[ + Document( + page_content="mutated document 1", + metadata={"source": "1"}, + ), + Document( + page_content="mutated document 2", + metadata={"source": "1"}, + ), + Document( + page_content="This is another document.", # <-- Same as original + metadata={"source": "2"}, + ), + ] + ) + + # Attempt to index again verify that nothing changes + with patch.object( + record_manager, "get_time", return_value=datetime(2021, 1, 3).timestamp() + ): + assert index( + loader, + record_manager, + vector_store, + delete_mode="incremental", + source_id_key="source", + ) == { + "num_added": 2, + "num_deleted": 1, + "num_skipped": 1, + "num_updated": 0, + } + + doc_texts = set( + # Ignoring type since doc should be in the store and not a None + vector_store.store.get(uid).page_content # type: ignore + for uid in vector_store.store + ) + assert doc_texts == { + "mutated document 1", + "mutated document 2", + "This is another document.", + } + + +def test_indexing_with_no_docs( + record_manager: SQLRecordManager, vector_store: VectorStore +) -> None: + """Check edge case when loader returns no new docs.""" + loader = ToyLoader(documents=[]) + + assert index(loader, record_manager, vector_store, delete_mode="full") == { + "num_added": 0, + "num_deleted": 0, + "num_skipped": 0, + "num_updated": 0, + } + + +def test_deduplication( + record_manager: SQLRecordManager, vector_store: VectorStore +) -> None: + """Check edge case when loader returns no new docs.""" + docs = [ + Document( + page_content="This is a test document.", + metadata={"source": "1"}, + ), + Document( + page_content="This is a test document.", + metadata={"source": "1"}, + ), + ] + + # Should result in only a single document being added + assert index(docs, record_manager, vector_store, delete_mode="full") == { + "num_added": 1, + "num_deleted": 0, + "num_skipped": 0, + "num_updated": 0, + } diff --git a/libs/langchain/tests/unit_tests/indexes/test_sql_record_manager.py b/libs/langchain/tests/unit_tests/indexes/test_sql_record_manager.py new file mode 100644 index 000000000..d7d95212a --- /dev/null +++ b/libs/langchain/tests/unit_tests/indexes/test_sql_record_manager.py @@ -0,0 +1,276 @@ +from datetime import datetime +from unittest.mock import patch + +import pytest + +from langchain.indexes._sql_record_manager import SQLRecordManager, UpsertionRecord + + +@pytest.fixture() +def manager() -> SQLRecordManager: + """Initialize the test database and yield the TimestampedSet instance.""" + # Initialize and yield the TimestampedSet instance + record_manager = SQLRecordManager("kittens", db_url="sqlite:///:memory:") + record_manager.create_schema() + return record_manager + + +def test_update(manager: SQLRecordManager) -> None: + """Test updating records in the database.""" + # no keys should be present in the set + read_keys = manager.list_keys() + assert read_keys == [] + # Insert records + keys = ["key1", "key2", "key3"] + manager.update(keys) + # Retrieve the records + read_keys = manager.list_keys() + assert read_keys == ["key1", "key2", "key3"] + + +def test_update_timestamp(manager: SQLRecordManager) -> None: + """Test updating records in the database.""" + # no keys should be present in the set + with patch.object( + manager, "get_time", return_value=datetime(2021, 1, 2).timestamp() + ): + manager.update(["key1"]) + + with manager._make_session() as session: + records = ( + session.query(UpsertionRecord) + .filter(UpsertionRecord.namespace == manager.namespace) + .all() # type: ignore[attr-defined] + ) + + assert [ + { + "key": record.key, + "namespace": record.namespace, + "updated_at": record.updated_at, + "group_id": record.group_id, + } + for record in records + ] == [ + { + "group_id": None, + "key": "key1", + "namespace": "kittens", + "updated_at": datetime(2021, 1, 2, 0, 0).timestamp(), + } + ] + + with patch.object( + manager, "get_time", return_value=datetime(2023, 1, 2).timestamp() + ): + manager.update(["key1"]) + + with manager._make_session() as session: + records = ( + session.query(UpsertionRecord) + .filter(UpsertionRecord.namespace == manager.namespace) + .all() # type: ignore[attr-defined] + ) + + assert [ + { + "key": record.key, + "namespace": record.namespace, + "updated_at": record.updated_at, + "group_id": record.group_id, + } + for record in records + ] == [ + { + "group_id": None, + "key": "key1", + "namespace": "kittens", + "updated_at": datetime(2023, 1, 2, 0, 0).timestamp(), + } + ] + + with patch.object( + manager, "get_time", return_value=datetime(2023, 2, 2).timestamp() + ): + manager.update(["key1"], group_ids=["group1"]) + + with manager._make_session() as session: + records = ( + session.query(UpsertionRecord) + .filter(UpsertionRecord.namespace == manager.namespace) + .all() # type: ignore[attr-defined] + ) + + assert [ + { + "key": record.key, + "namespace": record.namespace, + "updated_at": record.updated_at, + "group_id": record.group_id, + } + for record in records + ] == [ + { + "group_id": "group1", + "key": "key1", + "namespace": "kittens", + "updated_at": datetime(2023, 2, 2, 0, 0).timestamp(), + } + ] + + +def test_update_with_group_ids(manager: SQLRecordManager) -> None: + """Test updating records in the database.""" + # no keys should be present in the set + read_keys = manager.list_keys() + assert read_keys == [] + # Insert records + keys = ["key1", "key2", "key3"] + manager.update(keys) + # Retrieve the records + read_keys = manager.list_keys() + assert read_keys == ["key1", "key2", "key3"] + + +def test_exists(manager: SQLRecordManager) -> None: + """Test checking if keys exist in the database.""" + # Insert records + keys = ["key1", "key2", "key3"] + manager.update(keys) + # Check if the keys exist in the database + exists = manager.exists(keys) + assert len(exists) == len(keys) + assert exists == [True, True, True] + + exists = manager.exists(["key1", "key4"]) + assert len(exists) == 2 + assert exists == [True, False] + + +def test_list_keys(manager: SQLRecordManager) -> None: + """Test listing keys based on the provided date range.""" + # Insert records + assert manager.list_keys() == [] + with manager._make_session() as session: + # Add some keys with explicit updated_ats + session.add( + UpsertionRecord( + key="key1", + updated_at=datetime(2021, 1, 1).timestamp(), + namespace="kittens", + ) + ) + session.add( + UpsertionRecord( + key="key2", + updated_at=datetime(2022, 1, 1).timestamp(), + namespace="kittens", + ) + ) + session.add( + UpsertionRecord( + key="key3", + updated_at=datetime(2023, 1, 1).timestamp(), + namespace="kittens", + ) + ) + session.add( + UpsertionRecord( + key="key4", + group_id="group1", + updated_at=datetime(2024, 1, 1).timestamp(), + namespace="kittens", + ) + ) + # Insert keys from a different namespace, these should not be visible! + session.add( + UpsertionRecord( + key="key1", + updated_at=datetime(2021, 1, 1).timestamp(), + namespace="puppies", + ) + ) + session.add( + UpsertionRecord( + key="key5", + updated_at=datetime(2021, 1, 1).timestamp(), + namespace="puppies", + ) + ) + session.commit() + + # Retrieve all keys + assert manager.list_keys() == ["key1", "key2", "key3", "key4"] + + # Retrieve keys updated after a certain date + assert manager.list_keys(after=datetime(2022, 2, 1).timestamp()) == ["key3", "key4"] + + # Retrieve keys updated after a certain date + assert manager.list_keys(before=datetime(2022, 2, 1).timestamp()) == [ + "key1", + "key2", + ] + + # Retrieve keys updated after a certain date + assert manager.list_keys(before=datetime(2019, 2, 1).timestamp()) == [] + + # Retrieve keys in a time range + assert manager.list_keys( + before=datetime(2022, 2, 1).timestamp(), + after=datetime(2021, 11, 1).timestamp(), + ) == ["key2"] + + assert manager.list_keys(group_ids=["group1", "group2"]) == ["key4"] + + # Test multiple filters + assert ( + manager.list_keys( + group_ids=["group1", "group2"], before=datetime(2019, 1, 1).timestamp() + ) + == [] + ) + assert manager.list_keys( + group_ids=["group1", "group2"], after=datetime(2019, 1, 1).timestamp() + ) == ["key4"] + + +def test_namespace_is_used(manager: SQLRecordManager) -> None: + """Verify that namespace is taken into account for all operations.""" + assert manager.namespace == "kittens" + with manager._make_session() as session: + # Add some keys with explicit updated_ats + session.add(UpsertionRecord(key="key1", namespace="kittens")) + session.add(UpsertionRecord(key="key2", namespace="kittens")) + session.add(UpsertionRecord(key="key1", namespace="puppies")) + session.add(UpsertionRecord(key="key3", namespace="puppies")) + session.commit() + + assert manager.list_keys() == ["key1", "key2"] + manager.delete_keys(["key1"]) + assert manager.list_keys() == ["key2"] + manager.update(["key3"], group_ids=["group3"]) + + with manager._make_session() as session: + results = session.query(UpsertionRecord).all() + + assert sorted([(r.namespace, r.key, r.group_id) for r in results]) == [ + ("kittens", "key2", None), + ("kittens", "key3", "group3"), + ("puppies", "key1", None), + ("puppies", "key3", None), + ] + + +def test_delete_keys(manager: SQLRecordManager) -> None: + """Test deleting keys from the database.""" + # Insert records + keys = ["key1", "key2", "key3"] + manager.update(keys) + + # Delete some keys + keys_to_delete = ["key1", "key2"] + manager.delete_keys(keys_to_delete) + + # Check if the deleted keys are no longer in the database + remaining_keys = manager.list_keys() + assert remaining_keys == ["key3"] diff --git a/libs/langchain/tests/unit_tests/retrievers/test_web_research.py b/libs/langchain/tests/unit_tests/retrievers/test_web_research.py new file mode 100644 index 000000000..a052e59b7 --- /dev/null +++ b/libs/langchain/tests/unit_tests/retrievers/test_web_research.py @@ -0,0 +1,36 @@ +from typing import List + +import pytest + +from langchain.retrievers.web_research import QuestionListOutputParser + + +@pytest.mark.parametrize( + "text,expected", + ( + ( + "1. Line one.\n", + ["1. Line one.\n"], + ), + ( + "1. Line one.", + ["1. Line one."], + ), + ( + "1. Line one.\n2. Line two.\n", + ["1. Line one.\n", "2. Line two.\n"], + ), + ( + "1. Line one.\n2. Line two.", + ["1. Line one.\n", "2. Line two."], + ), + ( + "1. Line one.\n2. Line two.\n3. Line three.", + ["1. Line one.\n", "2. Line two.\n", "3. Line three."], + ), + ), +) +def test_list_output_parser(text: str, expected: List[str]) -> None: + parser = QuestionListOutputParser() + result = parser.parse(text) + assert result.lines == expected diff --git a/libs/langchain/tests/unit_tests/schema/runnable/__init__.py b/libs/langchain/tests/unit_tests/schema/runnable/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr b/libs/langchain/tests/unit_tests/schema/runnable/__snapshots__/test_runnable.ambr similarity index 85% rename from libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr rename to libs/langchain/tests/unit_tests/schema/runnable/__snapshots__/test_runnable.ambr index 321edb7a2..c48d4edbd 100644 --- a/libs/langchain/tests/unit_tests/schema/__snapshots__/test_runnable.ambr +++ b/libs/langchain/tests/unit_tests/schema/runnable/__snapshots__/test_runnable.ambr @@ -464,6 +464,218 @@ Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='chain', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}], 'input_variables': ['question']}}, 'middle': [{'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'base', 'RunnableLambda']}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}], 'input_variables': ['question']}}, {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}], 'last': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}], 'input_variables': ['question']}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='llm', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo, bar'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo, bar', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'foo, bar'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='foo, bar', additional_kwargs={}, example=False)}, outputs={'output': ['foo', 'bar']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000004'), name='RunnableLambda', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='chain', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'base', 'RunnableLambda']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': ['foo', 'bar']}, outputs={'question': 'foobar'}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000005'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nicer assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}], 'input_variables': ['question']}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'foobar'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nicer assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'foobar', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000006'), name='FakeListChatModel', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='llm', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['baz, qux'], '_type': 'fake-list-chat-model', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'chat_models', 'fake', 'FakeListChatModel']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nicer assistant.\nHuman: foobar']}, outputs={'generations': [[{'text': 'baz, qux', 'generation_info': None, 'message': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'AIMessage'], 'kwargs': {'content': 'baz, qux'}}}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000007'), name='CommaSeparatedListOutputParser', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='parser', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'output_parsers', 'list', 'CommaSeparatedListOutputParser'], 'kwargs': {}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': AIMessage(content='baz, qux', additional_kwargs={}, example=False)}, outputs={'output': ['baz', 'qux']}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), ]) # --- +# name: test_each + ''' + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableSequence" + ], + "kwargs": { + "first": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "chat", + "ChatPromptTemplate" + ], + "kwargs": { + "messages": [ + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "chat", + "SystemMessagePromptTemplate" + ], + "kwargs": { + "prompt": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "prompt", + "PromptTemplate" + ], + "kwargs": { + "input_variables": [], + "template": "You are a nice assistant.", + "template_format": "f-string", + "partial_variables": {} + } + } + } + }, + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "chat", + "HumanMessagePromptTemplate" + ], + "kwargs": { + "prompt": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "prompt", + "PromptTemplate" + ], + "kwargs": { + "input_variables": [ + "question" + ], + "template": "{question}", + "template_format": "f-string", + "partial_variables": {} + } + } + } + } + ], + "input_variables": [ + "question" + ] + } + }, + "middle": [ + { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeStreamingListLLM" + ] + }, + { + "lc": 1, + "type": "constructor", + "id": [ + "runnable", + "test_runnable", + "FakeSplitIntoListParser" + ], + "kwargs": {} + } + ], + "last": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableEach" + ], + "kwargs": { + "bound": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeStreamingListLLM" + ] + } + } + } + } + } + ''' +# --- +# name: test_higher_order_lambda_runnable + ''' + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableSequence" + ], + "kwargs": { + "first": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableMap" + ], + "kwargs": { + "steps": { + "key": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "schema", + "runnable", + "base", + "RunnableLambda" + ] + }, + "input": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableMap" + ], + "kwargs": { + "steps": { + "question": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "schema", + "runnable", + "base", + "RunnableLambda" + ] + } + } + } + } + } + } + }, + "last": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "schema", + "runnable", + "base", + "RunnableLambda" + ] + } + } + } + ''' +# --- # name: test_llm_with_fallbacks[llm_chain_with_fallbacks] ''' { @@ -1052,6 +1264,125 @@ Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='chain', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}], 'input_variables': ['question']}}, 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your favorite color?'}, outputs={'output': 'foo'}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000004'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}], 'input_variables': ['question']}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your favorite color?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your favorite color?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000003'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000005'), name='FakeListLLM', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='llm', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo', 'bar'], '_type': 'fake-list', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your favorite color?']}, outputs={'generations': [[{'text': 'foo', 'generation_info': None}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000003'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), ]) # --- +# name: test_prompt_with_llm_and_async_lambda + ''' + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "schema", + "runnable", + "RunnableSequence" + ], + "kwargs": { + "first": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "chat", + "ChatPromptTemplate" + ], + "kwargs": { + "messages": [ + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "chat", + "SystemMessagePromptTemplate" + ], + "kwargs": { + "prompt": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "prompt", + "PromptTemplate" + ], + "kwargs": { + "input_variables": [], + "template": "You are a nice assistant.", + "template_format": "f-string", + "partial_variables": {} + } + } + } + }, + { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "chat", + "HumanMessagePromptTemplate" + ], + "kwargs": { + "prompt": { + "lc": 1, + "type": "constructor", + "id": [ + "langchain", + "prompts", + "prompt", + "PromptTemplate" + ], + "kwargs": { + "input_variables": [ + "question" + ], + "template": "{question}", + "template_format": "f-string", + "partial_variables": {} + } + } + } + } + ], + "input_variables": [ + "question" + ] + } + }, + "middle": [ + { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "llms", + "fake", + "FakeListLLM" + ] + } + ], + "last": { + "lc": 1, + "type": "not_implemented", + "id": [ + "langchain", + "schema", + "runnable", + "base", + "RunnableLambda" + ] + } + } + } + ''' +# --- +# name: test_prompt_with_llm_and_async_lambda.1 + list([ + Run(id=UUID('00000000-0000-4000-8000-000000000000'), name='RunnableSequence', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='chain', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'runnable', 'RunnableSequence'], 'kwargs': {'first': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}], 'input_variables': ['question']}}, 'middle': [{'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}], 'last': {'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'base', 'RunnableLambda']}}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'output': 'foo'}, reference_example_id=None, parent_run_id=None, tags=[], execution_order=None, child_execution_order=None, child_runs=[Run(id=UUID('00000000-0000-4000-8000-000000000001'), name='ChatPromptTemplate', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='prompt', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptTemplate'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'SystemMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': [], 'template': 'You are a nice assistant.', 'template_format': 'f-string', 'partial_variables': {}}}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'HumanMessagePromptTemplate'], 'kwargs': {'prompt': {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'prompt', 'PromptTemplate'], 'kwargs': {'input_variables': ['question'], 'template': '{question}', 'template_format': 'f-string', 'partial_variables': {}}}}}], 'input_variables': ['question']}}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'question': 'What is your name?'}, outputs={'lc': 1, 'type': 'constructor', 'id': ['langchain', 'prompts', 'chat', 'ChatPromptValue'], 'kwargs': {'messages': [{'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'SystemMessage'], 'kwargs': {'content': 'You are a nice assistant.', 'additional_kwargs': {}}}, {'lc': 1, 'type': 'constructor', 'id': ['langchain', 'schema', 'messages', 'HumanMessage'], 'kwargs': {'content': 'What is your name?', 'additional_kwargs': {}}}]}}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000002'), name='FakeListLLM', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='llm', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={'invocation_params': {'responses': ['foo', 'bar'], '_type': 'fake-list', 'stop': None}, 'options': {'stop': None}}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'llms', 'fake', 'FakeListLLM']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'prompts': ['System: You are a nice assistant.\nHuman: What is your name?']}, outputs={'generations': [[{'text': 'foo', 'generation_info': None}]], 'llm_output': None, 'run': None}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[]), Run(id=UUID('00000000-0000-4000-8000-000000000003'), name='RunnableLambda', start_time=FakeDatetime(2023, 1, 1, 0, 0), run_type='chain', end_time=FakeDatetime(2023, 1, 1, 0, 0), extra={}, error=None, serialized={'lc': 1, 'type': 'not_implemented', 'id': ['langchain', 'schema', 'runnable', 'base', 'RunnableLambda']}, events=[{'name': 'start', 'time': FakeDatetime(2023, 1, 1, 0, 0)}, {'name': 'end', 'time': FakeDatetime(2023, 1, 1, 0, 0)}], inputs={'input': 'foo'}, outputs={'output': 'foo'}, reference_example_id=None, parent_run_id=UUID('00000000-0000-4000-8000-000000000000'), tags=[], execution_order=None, child_execution_order=None, child_runs=[])]), + ]) +# --- # name: test_router_runnable ''' { @@ -1352,6 +1683,7 @@ "lc": 1, "type": "not_implemented", "id": [ + "runnable", "test_runnable", "FakeRetriever" ] diff --git a/libs/langchain/tests/unit_tests/schema/runnable/test_locals.py b/libs/langchain/tests/unit_tests/schema/runnable/test_locals.py new file mode 100644 index 000000000..ee07c0cfc --- /dev/null +++ b/libs/langchain/tests/unit_tests/schema/runnable/test_locals.py @@ -0,0 +1,93 @@ +from typing import Any, Callable, Type + +import pytest + +from langchain import PromptTemplate +from langchain.llms import FakeListLLM +from langchain.schema.runnable import ( + GetLocalVar, + PutLocalVar, + RunnablePassthrough, + RunnableSequence, +) + + +@pytest.mark.parametrize( + ("method", "input", "output"), + [ + (lambda r, x: r.invoke(x), "foo", "foo"), + (lambda r, x: r.batch(x), ["foo", "bar"], ["foo", "bar"]), + (lambda r, x: list(r.stream(x))[0], "foo", "foo"), + ], +) +def test_put_get(method: Callable, input: Any, output: Any) -> None: + runnable = PutLocalVar("input") | GetLocalVar("input") + assert method(runnable, input) == output + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + ("method", "input", "output"), + [ + (lambda r, x: r.ainvoke(x), "foo", "foo"), + (lambda r, x: r.abatch(x), ["foo", "bar"], ["foo", "bar"]), + ], +) +async def test_put_get_async(method: Callable, input: Any, output: Any) -> None: + runnable = PutLocalVar("input") | GetLocalVar("input") + assert await method(runnable, input) == output + + +@pytest.mark.parametrize( + ("runnable", "error"), + [ + (PutLocalVar("input"), ValueError), + (GetLocalVar("input"), ValueError), + (PutLocalVar("input") | GetLocalVar("missing"), KeyError), + ], +) +def test_incorrect_usage(runnable: RunnableSequence, error: Type[Exception]) -> None: + with pytest.raises(error): + runnable.invoke("foo") + + +def test_get_in_map() -> None: + runnable: RunnableSequence = PutLocalVar("input") | {"bar": GetLocalVar("input")} + assert runnable.invoke("foo") == {"bar": "foo"} + + +def test_put_in_map() -> None: + runnable: RunnableSequence = {"bar": PutLocalVar("input")} | GetLocalVar("input") + with pytest.raises(KeyError): + runnable.invoke("foo") + + +@pytest.mark.parametrize( + "runnable", + [ + PutLocalVar("input") | GetLocalVar("input", passthrough_key="output"), + ( + PutLocalVar("input") + | {"input": RunnablePassthrough()} + | PromptTemplate.from_template("say {input}") + | FakeListLLM(responses=["hello"]) + | GetLocalVar("input", passthrough_key="output") + ), + ], +) +@pytest.mark.parametrize( + ("method", "input", "output"), + [ + (lambda r, x: r.invoke(x), "hello", {"input": "hello", "output": "hello"}), + (lambda r, x: r.batch(x), ["hello"], [{"input": "hello", "output": "hello"}]), + ( + lambda r, x: list(r.stream(x))[0], + "hello", + {"input": "hello", "output": "hello"}, + ), + ], +) +def test_put_get_sequence( + runnable: RunnableSequence, method: Callable, input: Any, output: Any +) -> None: + assert method(runnable, input) == output diff --git a/libs/langchain/tests/unit_tests/schema/test_runnable.py b/libs/langchain/tests/unit_tests/schema/runnable/test_runnable.py similarity index 79% rename from libs/langchain/tests/unit_tests/schema/test_runnable.py rename to libs/langchain/tests/unit_tests/schema/runnable/test_runnable.py index 352ddea40..f24475331 100644 --- a/libs/langchain/tests/unit_tests/schema/test_runnable.py +++ b/libs/langchain/tests/unit_tests/schema/runnable/test_runnable.py @@ -1,4 +1,5 @@ -from typing import Any, Dict, List, Optional +from operator import itemgetter +from typing import Any, Dict, List, Optional, Union from uuid import UUID import pytest @@ -27,7 +28,7 @@ from langchain.schema.messages import ( HumanMessage, SystemMessage, ) -from langchain.schema.output_parser import StrOutputParser +from langchain.schema.output_parser import BaseOutputParser, StrOutputParser from langchain.schema.retriever import BaseRetriever from langchain.schema.runnable import ( RouterRunnable, @@ -131,17 +132,25 @@ async def test_default_method_implementations(mocker: MockerFixture) -> None: assert fake.batch( ["hello", "wooorld"], [dict(tags=["a-tag"]), dict(metadata={"key": "value"})] ) == [5, 7] - assert spy.call_args_list == [ - mocker.call("hello", dict(tags=["a-tag"])), - mocker.call("wooorld", dict(metadata={"key": "value"})), - ] + + assert len(spy.call_args_list) == 2 + for i, call in enumerate(spy.call_args_list): + assert call.args[0] == ("hello" if i == 0 else "wooorld") + if i == 0: + assert call.args[1].get("tags") == ["a-tag"] + assert call.args[1].get("metadata") == {} + else: + assert call.args[1].get("tags") == [] + assert call.args[1].get("metadata") == {"key": "value"} + spy.reset_mock() assert fake.batch(["hello", "wooorld"], dict(tags=["a-tag"])) == [5, 7] - assert spy.call_args_list == [ - mocker.call("hello", dict(tags=["a-tag"])), - mocker.call("wooorld", dict(tags=["a-tag"])), - ] + assert len(spy.call_args_list) == 2 + for i, call in enumerate(spy.call_args_list): + assert call.args[0] == ("hello" if i == 0 else "wooorld") + assert call.args[1].get("tags") == ["a-tag"] + assert call.args[1].get("metadata") == {} spy.reset_mock() assert await fake.ainvoke("hello", config={"callbacks": []}) == 5 @@ -161,8 +170,26 @@ async def test_default_method_implementations(mocker: MockerFixture) -> None: 7, ] assert spy.call_args_list == [ - mocker.call("hello", dict(metadata={"key": "value"})), - mocker.call("wooorld", dict(metadata={"key": "value"})), + mocker.call( + "hello", + dict( + metadata={"key": "value"}, + tags=[], + callbacks=None, + _locals={}, + recursion_limit=10, + ), + ), + mocker.call( + "wooorld", + dict( + metadata={"key": "value"}, + tags=[], + callbacks=None, + _locals={}, + recursion_limit=10, + ), + ), ] @@ -414,6 +441,50 @@ async def test_prompt_with_llm( ) +@pytest.mark.asyncio +@freeze_time("2023-01-01") +async def test_prompt_with_llm_and_async_lambda( + mocker: MockerFixture, snapshot: SnapshotAssertion +) -> None: + prompt = ( + SystemMessagePromptTemplate.from_template("You are a nice assistant.") + + "{question}" + ) + llm = FakeListLLM(responses=["foo", "bar"]) + + async def passthrough(input: Any) -> Any: + return input + + chain = prompt | llm | passthrough + + assert isinstance(chain, RunnableSequence) + assert chain.first == prompt + assert chain.middle == [llm] + assert chain.last == RunnableLambda(func=passthrough) + assert dumps(chain, pretty=True) == snapshot + + # Test invoke + prompt_spy = mocker.spy(prompt.__class__, "ainvoke") + llm_spy = mocker.spy(llm.__class__, "ainvoke") + tracer = FakeTracer() + assert ( + await chain.ainvoke( + {"question": "What is your name?"}, dict(callbacks=[tracer]) + ) + == "foo" + ) + assert prompt_spy.call_args.args[1] == {"question": "What is your name?"} + assert llm_spy.call_args.args[1] == ChatPromptValue( + messages=[ + SystemMessage(content="You are a nice assistant."), + HumanMessage(content="What is your name?"), + ] + ) + assert tracer.runs == snapshot + mocker.stop(prompt_spy) + mocker.stop(llm_spy) + + @freeze_time("2023-01-01") def test_prompt_with_chat_model_and_parser( mocker: MockerFixture, snapshot: SnapshotAssertion @@ -698,6 +769,105 @@ async def test_router_runnable( assert len(router_run.child_runs) == 2 +@pytest.mark.asyncio +@freeze_time("2023-01-01") +async def test_higher_order_lambda_runnable( + mocker: MockerFixture, snapshot: SnapshotAssertion +) -> None: + math_chain = ChatPromptTemplate.from_template( + "You are a math genius. Answer the question: {question}" + ) | FakeListLLM(responses=["4"]) + english_chain = ChatPromptTemplate.from_template( + "You are an english major. Answer the question: {question}" + ) | FakeListLLM(responses=["2"]) + input_map: Runnable = RunnableMap( + { # type: ignore[arg-type] + "key": lambda x: x["key"], + "input": {"question": lambda x: x["question"]}, + } + ) + + def router(input: Dict[str, Any]) -> Runnable: + if input["key"] == "math": + return itemgetter("input") | math_chain + elif input["key"] == "english": + return itemgetter("input") | english_chain + else: + raise ValueError(f"Unknown key: {input['key']}") + + chain: Runnable = input_map | router + assert dumps(chain, pretty=True) == snapshot + + result = chain.invoke({"key": "math", "question": "2 + 2"}) + assert result == "4" + + result2 = chain.batch( + [{"key": "math", "question": "2 + 2"}, {"key": "english", "question": "2 + 2"}] + ) + assert result2 == ["4", "2"] + + result = await chain.ainvoke({"key": "math", "question": "2 + 2"}) + assert result == "4" + + result2 = await chain.abatch( + [{"key": "math", "question": "2 + 2"}, {"key": "english", "question": "2 + 2"}] + ) + assert result2 == ["4", "2"] + + # Test invoke + math_spy = mocker.spy(math_chain.__class__, "invoke") + tracer = FakeTracer() + assert ( + chain.invoke({"key": "math", "question": "2 + 2"}, dict(callbacks=[tracer])) + == "4" + ) + assert math_spy.call_args.args[1] == { + "key": "math", + "input": {"question": "2 + 2"}, + } + assert len([r for r in tracer.runs if r.parent_run_id is None]) == 1 + parent_run = next(r for r in tracer.runs if r.parent_run_id is None) + assert len(parent_run.child_runs) == 2 + router_run = parent_run.child_runs[1] + assert router_run.name == "RunnableLambda" + assert len(router_run.child_runs) == 1 + math_run = router_run.child_runs[0] + assert math_run.name == "RunnableSequence" + assert len(math_run.child_runs) == 3 + + # Test ainvoke + async def arouter(input: Dict[str, Any]) -> Runnable: + if input["key"] == "math": + return itemgetter("input") | math_chain + elif input["key"] == "english": + return itemgetter("input") | english_chain + else: + raise ValueError(f"Unknown key: {input['key']}") + + achain: Runnable = input_map | arouter + math_spy = mocker.spy(math_chain.__class__, "ainvoke") + tracer = FakeTracer() + assert ( + await achain.ainvoke( + {"key": "math", "question": "2 + 2"}, dict(callbacks=[tracer]) + ) + == "4" + ) + assert math_spy.call_args.args[1] == { + "key": "math", + "input": {"question": "2 + 2"}, + } + assert len([r for r in tracer.runs if r.parent_run_id is None]) == 1 + parent_run = next(r for r in tracer.runs if r.parent_run_id is None) + assert len(parent_run.child_runs) == 2 + router_run = parent_run.child_runs[1] + assert router_run.name == "RunnableLambda" + assert len(router_run.child_runs) == 1 + math_run = router_run.child_runs[0] + assert math_run.name == "RunnableSequence" + assert len(math_run.child_runs) == 3 + + @freeze_time("2023-01-01") def test_seq_prompt_map(mocker: MockerFixture, snapshot: SnapshotAssertion) -> None: passthrough = mocker.Mock(side_effect=lambda x: x) @@ -1062,3 +1232,67 @@ async def test_llm_with_fallbacks( assert await runnable.abatch(["hi", "hey", "bye"]) == ["bar"] * 3 assert list(await runnable.ainvoke("hello")) == list("bar") assert dumps(runnable, pretty=True) == snapshot + + +class FakeSplitIntoListParser(BaseOutputParser[List[str]]): + """Parse the output of an LLM call to a comma-separated list.""" + + @property + def lc_serializable(self) -> bool: + return True + + def get_format_instructions(self) -> str: + return ( + "Your response should be a list of comma separated values, " + "eg: `foo, bar, baz`" + ) + + def parse(self, text: str) -> List[str]: + """Parse the output of an LLM call.""" + return text.strip().split(", ") + + +def test_each_simple() -> None: + """Test that each() works with a simple runnable.""" + parser = FakeSplitIntoListParser() + assert parser.invoke("first item, second item") == ["first item", "second item"] + assert parser.map().invoke(["a, b", "c"]) == [["a", "b"], ["c"]] + assert parser.map().map().invoke([["a, b", "c"], ["c, e"]]) == [ + [["a", "b"], ["c"]], + [["c", "e"]], + ] + + +def test_each(snapshot: SnapshotAssertion) -> None: + prompt = ( + SystemMessagePromptTemplate.from_template("You are a nice assistant.") + + "{question}" + ) + first_llm = FakeStreamingListLLM(responses=["first item, second item, third item"]) + parser = FakeSplitIntoListParser() + second_llm = FakeStreamingListLLM(responses=["this", "is", "a", "test"]) + + chain = prompt | first_llm | parser | second_llm.map() + + assert dumps(chain, pretty=True) == snapshot + output = chain.invoke({"question": "What up"}) + assert output == ["this", "is", "a"] + + assert (parser | second_llm.map()).invoke("first item, second item") == [ + "test", + "this", + ] + + +def test_recursive_lambda() -> None: + def _simple_recursion(x: int) -> Union[int, Runnable]: + if x < 10: + return RunnableLambda(lambda *args: _simple_recursion(x + 1)) + else: + return x + + runnable = RunnableLambda(_simple_recursion) + assert runnable.invoke(5) == 10 + + with pytest.raises(RecursionError): + runnable.invoke(0, {"recursion_limit": 9}) diff --git a/libs/langchain/tests/unit_tests/test_dependencies.py b/libs/langchain/tests/unit_tests/test_dependencies.py index e446485ca..2e40a7ab4 100644 --- a/libs/langchain/tests/unit_tests/test_dependencies.py +++ b/libs/langchain/tests/unit_tests/test_dependencies.py @@ -26,10 +26,13 @@ def test_required_dependencies(poetry_conf: Mapping[str, Any]) -> None: # Get the dependencies from the [tool.poetry.dependencies] section dependencies = poetry_conf["dependencies"] - required_dependencies = [ - package_name + is_required = { + package_name: isinstance(requirements, str) + or not requirements.get("optional", False) for package_name, requirements in dependencies.items() - if isinstance(requirements, str) or not requirements.get("optional", False) + } + required_dependencies = [ + package_name for package_name, required in is_required.items() if required ] assert sorted(required_dependencies) == [ @@ -47,6 +50,12 @@ def test_required_dependencies(poetry_conf: Mapping[str, Any]) -> None: "tenacity", ] + unrequired_dependencies = [ + package_name for package_name, required in is_required.items() if not required + ] + in_extras = [dep for group in poetry_conf["extras"].values() for dep in group] + assert set(unrequired_dependencies) == set(in_extras) + def test_test_group_dependencies(poetry_conf: Mapping[str, Any]) -> None: """Check if someone is attempting to add additional test dependencies. diff --git a/libs/langchain/tests/unit_tests/tools/test_public_api.py b/libs/langchain/tests/unit_tests/tools/test_public_api.py index 43c2fb905..6d58dd92e 100644 --- a/libs/langchain/tests/unit_tests/tools/test_public_api.py +++ b/libs/langchain/tests/unit_tests/tools/test_public_api.py @@ -2,6 +2,11 @@ from langchain.tools import __all__ as public_api _EXPECTED = [ + "AINAppOps", + "AINOwnerOps", + "AINRuleOps", + "AINTransfer", + "AINValueOps", "AIPluginTool", "APIOperation", "ArxivQueryRun", diff --git a/libs/langchain/tests/unit_tests/utils/__init__.py b/libs/langchain/tests/unit_tests/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/libs/langchain/tests/unit_tests/utils/test_iter.py b/libs/langchain/tests/unit_tests/utils/test_iter.py new file mode 100644 index 000000000..f0fd8bf4c --- /dev/null +++ b/libs/langchain/tests/unit_tests/utils/test_iter.py @@ -0,0 +1,21 @@ +from typing import List + +import pytest + +from langchain.utils.iter import batch_iterate + + +@pytest.mark.parametrize( + "input_size, input_iterable, expected_output", + [ + (2, [1, 2, 3, 4, 5], [[1, 2], [3, 4], [5]]), + (3, [10, 20, 30, 40, 50], [[10, 20, 30], [40, 50]]), + (1, [100, 200, 300], [[100], [200], [300]]), + (4, [], []), + ], +) +def test_batch_iterate( + input_size: int, input_iterable: List[str], expected_output: List[str] +) -> None: + """Test batching function.""" + assert list(batch_iterate(input_size, input_iterable)) == expected_output diff --git a/poetry.lock b/poetry.lock index 7599ad353..8210605be 100644 --- a/poetry.lock +++ b/poetry.lock @@ -167,22 +167,23 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] argon2-cffi-bindings = "*" [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" @@ -254,13 +255,13 @@ test = ["astroid", "pytest"] [[package]] name = "async-lru" -version = "2.0.3" +version = "2.0.4" description = "Simple LRU cache for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "async-lru-2.0.3.tar.gz", hash = "sha256:b714c9d1415fca4e264da72a9e2abc66880ce7430e03a973341f88ea4c0d4869"}, - {file = "async_lru-2.0.3-py3-none-any.whl", hash = "sha256:00c0a8899c20b9c88663a47732689ff98189c9fa08ad9f734d7722f934d250b1"}, + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, ] [package.dependencies] @@ -268,13 +269,13 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "async-timeout" -version = "4.0.2" +version = "4.0.3" description = "Timeout context manager for asyncio programs" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] [[package]] @@ -427,13 +428,13 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] @@ -598,13 +599,13 @@ files = [ [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -640,17 +641,17 @@ files = [ [[package]] name = "comm" -version = "0.1.3" +version = "0.1.4" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.6" files = [ - {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"}, - {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"}, + {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, + {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, ] [package.dependencies] -traitlets = ">=5.3" +traitlets = ">=4" [package.extras] lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] @@ -678,29 +679,29 @@ dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest ( [[package]] name = "debugpy" -version = "1.6.7" +version = "1.6.7.post1" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.7" files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, + {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, + {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, ] [[package]] @@ -727,22 +728,18 @@ files = [ [[package]] name = "dnspython" -version = "2.4.0" +version = "2.4.2" description = "DNS toolkit" optional = false python-versions = ">=3.8,<4.0" files = [ - {file = "dnspython-2.4.0-py3-none-any.whl", hash = "sha256:46b4052a55b56beea3a3bdd7b30295c292bd6827dd442348bc116f2d35b17f0a"}, - {file = "dnspython-2.4.0.tar.gz", hash = "sha256:758e691dbb454d5ccf4e1b154a19e52847f79e21a42fef17b969144af29a4e6c"}, + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, ] -[package.dependencies] -httpcore = {version = ">=0.17.3", markers = "python_version >= \"3.8\""} -sniffio = ">=1.1,<2.0" - [package.extras] dnssec = ["cryptography (>=2.6,<42.0)"] -doh = ["h2 (>=4.1.0)", "httpx (>=0.24.1)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"] doq = ["aioquic (>=0.9.20)"] idna = ["idna (>=2.1,<4.0)"] trio = ["trio (>=0.14,<0.23)"] @@ -772,13 +769,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.1.3" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, ] [package.extras] @@ -818,13 +815,13 @@ dev = ["matplotlib", "nbdev (>=0.2.39)", "numpy", "pandas", "pillow", "torch"] [[package]] name = "fastjsonschema" -version = "2.17.1" +version = "2.18.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, - {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, ] [package.extras] @@ -1021,38 +1018,6 @@ files = [ docs = ["Sphinx", "docutils (<0.18)"] test = ["objgraph", "psutil"] -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httpcore" -version = "0.17.3" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.7" -files = [ - {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"}, - {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"}, -] - -[package.dependencies] -anyio = ">=3.0,<5.0" -certifi = "*" -h11 = ">=0.13,<0.15" -sniffio = "==1.*" - -[package.extras] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - [[package]] name = "idna" version = "3.4" @@ -1096,13 +1061,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.0" +version = "6.0.1" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.0-py3-none-any.whl", hash = "sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185"}, - {file = "importlib_resources-6.0.0.tar.gz", hash = "sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2"}, + {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, + {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, ] [package.dependencies] @@ -1114,13 +1079,13 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", [[package]] name = "ipykernel" -version = "6.24.0" +version = "6.25.1" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.24.0-py3-none-any.whl", hash = "sha256:2f5fffc7ad8f1fd5aadb4e171ba9129d9668dbafa374732cf9511ada52d6547f"}, - {file = "ipykernel-6.24.0.tar.gz", hash = "sha256:29cea0a716b1176d002a61d0b0c851f34536495bc4ef7dd0222c88b41b816123"}, + {file = "ipykernel-6.25.1-py3-none-any.whl", hash = "sha256:c8a2430b357073b37c76c21c52184db42f6b4b0e438e1eb7df3c4440d120497c"}, + {file = "ipykernel-6.25.1.tar.gz", hash = "sha256:050391364c0977e768e354bdb60cbbfbee7cbb943b1af1618382021136ffd42f"}, ] [package.dependencies] @@ -1197,17 +1162,17 @@ files = [ [[package]] name = "ipywidgets" -version = "8.0.7" +version = "8.1.0" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" files = [ - {file = "ipywidgets-8.0.7-py3-none-any.whl", hash = "sha256:e0aed0c95a1e55b6a123f64305245578bdc09e52965a34941c2b6a578b8c64a0"}, - {file = "ipywidgets-8.0.7.tar.gz", hash = "sha256:50ace0a8886e9a0d68b980db82f94c25d55d21ff2340ed36f802dd9365e94acf"}, + {file = "ipywidgets-8.1.0-py3-none-any.whl", hash = "sha256:6c8396cc7b8c95dfb4e9ab0054f48c002f045e7e5d7ae523f559d64e525a98ab"}, + {file = "ipywidgets-8.1.0.tar.gz", hash = "sha256:ce97dd90525b3066fd00094690964e7eac14cf9b7745d35565b5eeac20cce687"}, ] [package.dependencies] -ipykernel = ">=4.5.1" +comm = ">=0.1.3" ipython = ">=6.1.0" jupyterlab-widgets = ">=3.0.7,<3.1.0" traitlets = ">=4.3.1" @@ -1232,21 +1197,21 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, - {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, ] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] @@ -1288,17 +1253,18 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" -version = "4.18.4" +version = "4.19.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.18.4-py3-none-any.whl", hash = "sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe"}, - {file = "jsonschema-4.18.4.tar.gz", hash = "sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d"}, + {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, + {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, ] [package.dependencies] @@ -1453,19 +1419,20 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.6.3" +version = "0.7.0" description = "Jupyter Event System library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, - {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, + {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"}, + {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"}, ] [package.dependencies] -jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} python-json-logger = ">=2.0.4" pyyaml = ">=5.3" +referencing = "*" rfc3339-validator = "*" rfc3986-validator = ">=0.1.1" traitlets = ">=5.3" @@ -1473,7 +1440,7 @@ traitlets = ">=5.3" [package.extras] cli = ["click", "rich"] docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] [[package]] name = "jupyter-lsp" @@ -1492,13 +1459,13 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.7.0" +version = "2.7.2" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, - {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, + {file = "jupyter_server-2.7.2-py3-none-any.whl", hash = "sha256:98a375347b580e837e7016007c24680a4261ed8ad7cd35196ac087d229f48e5a"}, + {file = "jupyter_server-2.7.2.tar.gz", hash = "sha256:d64fb4e593907290e5df916e3c9399c15ab2cd7bdb71cbcd1d36452dbfb30523"}, ] [package.dependencies] @@ -1516,7 +1483,7 @@ packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} pyzmq = ">=24" -send2trash = "*" +send2trash = ">=1.8.2" terminado = ">=0.8.3" tornado = ">=6.2.0" traitlets = ">=5.6.0" @@ -1547,13 +1514,13 @@ test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", [[package]] name = "jupyterlab" -version = "4.0.3" +version = "4.0.5" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.0.3-py3-none-any.whl", hash = "sha256:d369944391b1d15f2d1f3cb965fb67352956279b2ae6f03ce7947a43940a8301"}, - {file = "jupyterlab-4.0.3.tar.gz", hash = "sha256:e14d1ce46a613028111d0d476a1d7d6b094003b7462bac669f5b478317abcb39"}, + {file = "jupyterlab-4.0.5-py3-none-any.whl", hash = "sha256:13b3a326e7b95d72746fe20dbe80ee1e71165d6905e01ceaf1320eb809cb1b47"}, + {file = "jupyterlab-4.0.5.tar.gz", hash = "sha256:de49deb75f9b9aec478ed04754cbefe9c5d22fd796a5783cdc65e212983d3611"}, ] [package.dependencies] @@ -1591,13 +1558,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.23.0" +version = "2.24.0" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, - {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, ] [package.dependencies] @@ -1613,7 +1580,7 @@ requests = ">=2.28" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "jupyterlab-widgets" @@ -1628,7 +1595,7 @@ files = [ [[package]] name = "langchain" -version = "0.0.265" +version = "0.0.268" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" @@ -1642,7 +1609,6 @@ dataclasses-json = "^0.5.7" langsmith = "~0.0.21" numexpr = "^2.8.4" numpy = "^1" -openapi-schema-pydantic = "^1.2" pydantic = ">=1,<3" PyYAML = ">=5.3" requests = "^2" @@ -1656,9 +1622,9 @@ clarifai = ["clarifai (>=9.1.0)"] cohere = ["cohere (>=4,<5)"] docarray = ["docarray[hnswlib] (>=0.32.0,<0.33.0)"] embeddings = ["sentence-transformers (>=2,<3)"] -extended-testing = ["amazon-textract-caller (<2)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.0.7,<0.0.8)", "chardet (>=5.1.0,<6.0.0)", "esprima (>=4.0.1,<5.0.0)", "feedparser (>=6.0.10,<7.0.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "gql (>=3.4.1,<4.0.0)", "html2text (>=2020.1.16,<2021.0.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lxml (>=4.9.2,<5.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "openai (>=0,<1)", "openai (>=0,<1)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "tqdm (>=4.48.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] +extended-testing = ["amazon-textract-caller (<2)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.0.7,<0.0.8)", "chardet (>=5.1.0,<6.0.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "gql (>=3.4.1,<4.0.0)", "html2text (>=2020.1.16,<2021.0.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "lxml (>=4.9.2,<5.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "openai (>=0,<1)", "openai (>=0,<1)", "openapi-schema-pydantic (>=1.2,<2.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "tqdm (>=4.48.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] javascript = ["esprima (>=4.0.1,<5.0.0)"] -llms = ["clarifai (>=9.1.0)", "cohere (>=4,<5)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "openllm (>=0.1.19)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"] +llms = ["clarifai (>=9.1.0)", "cohere (>=4,<5)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"] openai = ["openai (>=0,<1)", "tiktoken (>=0.3.2,<0.4.0)"] qdrant = ["qdrant-client (>=1.3.1,<2.0.0)"] text-helpers = ["chardet (>=5.1.0,<6.0.0)"] @@ -1669,13 +1635,13 @@ url = "libs/langchain" [[package]] name = "langsmith" -version = "0.0.22" +version = "0.0.25" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langsmith-0.0.22-py3-none-any.whl", hash = "sha256:1bc94a2e5bfa355ca15d9e658c2c2d04c8cc45c61892a1be08a7c3b40f2fd3f4"}, - {file = "langsmith-0.0.22.tar.gz", hash = "sha256:5726c7841294db2a9e5863e20718878d16e28722bdaf3169a278ff3bda2f0be7"}, + {file = "langsmith-0.0.25-py3-none-any.whl", hash = "sha256:d595435ad21fa6077550d7c85472935d1e8241afa042c1e29287d2c95c3ed151"}, + {file = "langsmith-0.0.25.tar.gz", hash = "sha256:e728c398fc1adaa0ed8abeb21f6a92d7fb19fe3ab49d3911c22b03dfe25935d6"}, ] [package.dependencies] @@ -2057,13 +2023,13 @@ test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "p [[package]] name = "nbconvert" -version = "7.7.2" +version = "7.7.4" description = "Converting Jupyter Notebooks" optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.7.2-py3-none-any.whl", hash = "sha256:25e0cf2b663ee0cd5a90afb6b2f2940bf1abe5cc5bc995b88c8156ca65fa7ede"}, - {file = "nbconvert-7.7.2.tar.gz", hash = "sha256:36d3e7bf32f0c075878176cdeeb645931c994cbed5b747bc7a570ba8cd2321f3"}, + {file = "nbconvert-7.7.4-py3-none-any.whl", hash = "sha256:ace26f4386d08eb5c55833596a942048c5502a95e05590cb523826a749a40a37"}, + {file = "nbconvert-7.7.4.tar.gz", hash = "sha256:1113d039fa3fc3a846ffa5a3b0a019e85aaa94c566a09fa0c400fb7638e46087"}, ] [package.dependencies] @@ -2139,13 +2105,13 @@ pip = "*" [[package]] name = "nbformat" -version = "5.9.1" +version = "5.9.2" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.1-py3-none-any.whl", hash = "sha256:b7968ebf4811178a4108ee837eae1442e3f054132100f0359219e9ed1ce3ca45"}, - {file = "nbformat-5.9.1.tar.gz", hash = "sha256:3a7f52d040639cbd8a3890218c8b0ffb93211588c57446c90095e32ba5881b5d"}, + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, ] [package.dependencies] @@ -2179,24 +2145,24 @@ traitlets = ">=5" [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.5.7" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, - {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, + {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, + {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, ] [[package]] name = "notebook" -version = "7.0.0" +version = "7.0.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" files = [ - {file = "notebook-7.0.0-py3-none-any.whl", hash = "sha256:71b4e695e658763a2766613176491854708fb46fbe7664bf5e494deeeab92d60"}, - {file = "notebook-7.0.0.tar.gz", hash = "sha256:38b55e6939df0ba73b53212c3b234e41102f1789e0158606cedaebf00abef6c8"}, + {file = "notebook-7.0.2-py3-none-any.whl", hash = "sha256:c77b1499dc9b07ce4f4f26990dcb25b2107b434f2536766b51a72a4228d9a4b6"}, + {file = "notebook-7.0.2.tar.gz", hash = "sha256:d70d6a07418c829bd5f54337ce993b7105261d9026f9d3fe68e9b8aa1a20da9a"}, ] [package.dependencies] @@ -2231,41 +2197,41 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numexpr" -version = "2.8.4" +version = "2.8.5" description = "Fast numerical expression evaluator for NumPy" optional = false python-versions = ">=3.7" files = [ - {file = "numexpr-2.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a75967d46b6bd56455dd32da6285e5ffabe155d0ee61eef685bbfb8dafb2e484"}, - {file = "numexpr-2.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db93cf1842f068247de631bfc8af20118bf1f9447cd929b531595a5e0efc9346"}, - {file = "numexpr-2.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bca95f4473b444428061d4cda8e59ac564dc7dc6a1dea3015af9805c6bc2946"}, - {file = "numexpr-2.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e34931089a6bafc77aaae21f37ad6594b98aa1085bb8b45d5b3cd038c3c17d9"}, - {file = "numexpr-2.8.4-cp310-cp310-win32.whl", hash = "sha256:f3a920bfac2645017110b87ddbe364c9c7a742870a4d2f6120b8786c25dc6db3"}, - {file = "numexpr-2.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:6931b1e9d4f629f43c14b21d44f3f77997298bea43790cfcdb4dd98804f90783"}, - {file = "numexpr-2.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9400781553541f414f82eac056f2b4c965373650df9694286b9bd7e8d413f8d8"}, - {file = "numexpr-2.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ee9db7598dd4001138b482342b96d78110dd77cefc051ec75af3295604dde6a"}, - {file = "numexpr-2.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff5835e8af9a212e8480003d731aad1727aaea909926fd009e8ae6a1cba7f141"}, - {file = "numexpr-2.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:655d84eb09adfee3c09ecf4a89a512225da153fdb7de13c447404b7d0523a9a7"}, - {file = "numexpr-2.8.4-cp311-cp311-win32.whl", hash = "sha256:5538b30199bfc68886d2be18fcef3abd11d9271767a7a69ff3688defe782800a"}, - {file = "numexpr-2.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:3f039321d1c17962c33079987b675fb251b273dbec0f51aac0934e932446ccc3"}, - {file = "numexpr-2.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c867cc36cf815a3ec9122029874e00d8fbcef65035c4a5901e9b120dd5d626a2"}, - {file = "numexpr-2.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:059546e8f6283ccdb47c683101a890844f667fa6d56258d48ae2ecf1b3875957"}, - {file = "numexpr-2.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:845a6aa0ed3e2a53239b89c1ebfa8cf052d3cc6e053c72805e8153300078c0b1"}, - {file = "numexpr-2.8.4-cp37-cp37m-win32.whl", hash = "sha256:a38664e699526cb1687aefd9069e2b5b9387da7feac4545de446141f1ef86f46"}, - {file = "numexpr-2.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:eaec59e9bf70ff05615c34a8b8d6c7bd042bd9f55465d7b495ea5436f45319d0"}, - {file = "numexpr-2.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b318541bf3d8326682ebada087ba0050549a16d8b3fa260dd2585d73a83d20a7"}, - {file = "numexpr-2.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b076db98ca65eeaf9bd224576e3ac84c05e451c0bd85b13664b7e5f7b62e2c70"}, - {file = "numexpr-2.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f12cc851240f7911a47c91aaf223dba753e98e46dff3017282e633602e76a7"}, - {file = "numexpr-2.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c368aa35ae9b18840e78b05f929d3a7b3abccdba9630a878c7db74ca2368339"}, - {file = "numexpr-2.8.4-cp38-cp38-win32.whl", hash = "sha256:b96334fc1748e9ec4f93d5fadb1044089d73fb08208fdb8382ed77c893f0be01"}, - {file = "numexpr-2.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:a6d2d7740ae83ba5f3531e83afc4b626daa71df1ef903970947903345c37bd03"}, - {file = "numexpr-2.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:77898fdf3da6bb96aa8a4759a8231d763a75d848b2f2e5c5279dad0b243c8dfe"}, - {file = "numexpr-2.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df35324666b693f13a016bc7957de7cc4d8801b746b81060b671bf78a52b9037"}, - {file = "numexpr-2.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ac9cfe6d0078c5fc06ba1c1bbd20b8783f28c6f475bbabd3cad53683075cab"}, - {file = "numexpr-2.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df3a1f6b24214a1ab826e9c1c99edf1686c8e307547a9aef33910d586f626d01"}, - {file = "numexpr-2.8.4-cp39-cp39-win32.whl", hash = "sha256:7d71add384adc9119568d7e9ffa8a35b195decae81e0abf54a2b7779852f0637"}, - {file = "numexpr-2.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:9f096d707290a6a00b6ffdaf581ee37331109fb7b6c8744e9ded7c779a48e517"}, - {file = "numexpr-2.8.4.tar.gz", hash = "sha256:d5432537418d18691b9115d615d6daa17ee8275baef3edf1afbbf8bc69806147"}, + {file = "numexpr-2.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51f3ab160c3847ebcca93cd88f935a7802b54a01ab63fe93152994a64d7a6cf2"}, + {file = "numexpr-2.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:de29c77f674e4eb8f0846525a475cab64008c227c8bc4ba5153ab3f72441cc63"}, + {file = "numexpr-2.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf85ba1327eb87ec82ae7936f13c8850fb969a0ca34f3ba9fa3897c09d5c80d7"}, + {file = "numexpr-2.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c00be69f747f44a631830215cab482f0f77f75af2925695adff57c1cc0f9a68"}, + {file = "numexpr-2.8.5-cp310-cp310-win32.whl", hash = "sha256:c46350dcdb93e32f033eea5a21269514ffcaf501d9abd6036992d37e48a308b0"}, + {file = "numexpr-2.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:894b027438b8ec88dea32a19193716c79f4ff8ddb92302dcc9731b51ba3565a8"}, + {file = "numexpr-2.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6df184d40d4cf9f21c71f429962f39332f7398147762588c9f3a5c77065d0c06"}, + {file = "numexpr-2.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:178b85ad373c6903e55d75787d61b92380439b70d94b001cb055a501b0821335"}, + {file = "numexpr-2.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:578fe4008e4d5d6ff01bbeb2d7b7ba1ec658a5cda9c720cd26a9a8325f8ef438"}, + {file = "numexpr-2.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef621b4ee366a5c6a484f6678c9259f5b826569f8bfa0b89ba2306d5055468bb"}, + {file = "numexpr-2.8.5-cp311-cp311-win32.whl", hash = "sha256:dd57ab1a3d3aaa9274aff1cefbf93b8ddacc7973afef5b125905f6bf18fabab0"}, + {file = "numexpr-2.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:783324ba40eb804ecfc9ebae86120a1e339ab112d0ab8a1f0d48a26354d5bf9b"}, + {file = "numexpr-2.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:183d5430db76826e54465c69db93a3c6ecbf03cda5aa1bb96eaad0147e9b68dc"}, + {file = "numexpr-2.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39ce106f92ccea5b07b1d6f2f3c4370f05edf27691dc720a63903484a2137e48"}, + {file = "numexpr-2.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b594dc9e2d6291a0bc5c065e6d9caf3eee743b5663897832e9b17753c002947a"}, + {file = "numexpr-2.8.5-cp37-cp37m-win32.whl", hash = "sha256:62b4faf8e0627673b0210a837792bddd23050ecebc98069ab23eb0633ff1ef5f"}, + {file = "numexpr-2.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:db5c65417d69414f1ab31302ea01d3548303ef31209c38b4849d145be4e1d1ba"}, + {file = "numexpr-2.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb36ffcfa1606e41aa08d559b4277bcad0e16b83941d1a4fee8d2bd5a34f8e0e"}, + {file = "numexpr-2.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34af2a0e857d02a4bc5758bc037a777d50dacb13bcd57c7905268a3e44994ed6"}, + {file = "numexpr-2.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a8dad2bfaad5a5c34a2e8bbf62b9df1dfab266d345fda1feb20ff4e264b347a"}, + {file = "numexpr-2.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b93f5a866cd13a808bc3d3a9c487d94cd02eec408b275ff0aa150f2e8e5191f8"}, + {file = "numexpr-2.8.5-cp38-cp38-win32.whl", hash = "sha256:558390fea6370003ac749ed9d0f38d708aa096f5dcb707ddb6e0ca5a0dd37da1"}, + {file = "numexpr-2.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:55983806815035eb63c5039520688c49536bb7f3cc3fc1d7d64c6a00cf3f353e"}, + {file = "numexpr-2.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1510da20e6f5f45333610b1ded44c566e2690c6c437c84f2a212ca09627c7e01"}, + {file = "numexpr-2.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e8b5bf7bcb4e8dcd66522d8fc96e1db7278f901cb4fd2e155efbe62a41dde08"}, + {file = "numexpr-2.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ed0e1c1ef5f34381448539f1fe9015906d21c9cfa2797c06194d4207dadb465"}, + {file = "numexpr-2.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aea6ab45c87c0a7041183c08a798f0ad4d7c5eccbce20cfe79ce6f1a45ef3702"}, + {file = "numexpr-2.8.5-cp39-cp39-win32.whl", hash = "sha256:cbfd833ee5fdb0efb862e152aee7e6ccea9c596d5c11d22604c2e6307bff7cad"}, + {file = "numexpr-2.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:283ce8609a7ccbadf91a68f3484558b3e36d27c93c98a41ec205efb0ab43c872"}, + {file = "numexpr-2.8.5.tar.gz", hash = "sha256:45ed41e55a0abcecf3d711481e12a5fb7a904fe99d42bc282a17cc5f8ea510be"}, ] [package.dependencies] @@ -2326,29 +2292,15 @@ sphinx = ">=1.8" [package.extras] testing = ["matplotlib", "pytest", "pytest-cov"] -[[package]] -name = "openapi-schema-pydantic" -version = "1.2.4" -description = "OpenAPI (v3) specification schema as pydantic class" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "openapi-schema-pydantic-1.2.4.tar.gz", hash = "sha256:3e22cf58b74a69f752cc7e5f1537f6e44164282db2700cbbcd3bb99ddd065196"}, - {file = "openapi_schema_pydantic-1.2.4-py3-none-any.whl", hash = "sha256:a932ecc5dcbb308950282088956e94dea069c9823c84e507d64f6b622222098c"}, -] - -[package.dependencies] -pydantic = ">=1.8.2" - [[package]] name = "overrides" -version = "7.3.1" +version = "7.4.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" files = [ - {file = "overrides-7.3.1-py3-none-any.whl", hash = "sha256:6187d8710a935d09b0bcef8238301d6ee2569d2ac1ae0ec39a8c7924e27f58ca"}, - {file = "overrides-7.3.1.tar.gz", hash = "sha256:8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2"}, + {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, + {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, ] [[package]] @@ -2390,13 +2342,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] @@ -2426,13 +2378,13 @@ files = [ [[package]] name = "pip" -version = "23.2" +version = "23.2.1" description = "The PyPA recommended tool for installing Python packages." optional = false python-versions = ">=3.7" files = [ - {file = "pip-23.2-py3-none-any.whl", hash = "sha256:78e5353a9dda374b462f2054f83a7b63f3f065c98236a68361845c1b0ee7e35f"}, - {file = "pip-23.2.tar.gz", hash = "sha256:a160a170f3331d9ca1a0247eb1cd79c758879f1f81158f9cd05bbb5df80bea5c"}, + {file = "pip-23.2.1-py3-none-any.whl", hash = "sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be"}, + {file = "pip-23.2.1.tar.gz", hash = "sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2"}, ] [[package]] @@ -2448,18 +2400,18 @@ files = [ [[package]] name = "platformdirs" -version = "3.9.1" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, - {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "prometheus-client" @@ -2553,47 +2505,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.11" +version = "1.10.12" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff44c5e89315b15ff1f7fdaf9853770b810936d6b01a7bcecaa227d2f8fe444f"}, - {file = "pydantic-1.10.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c098d4ab5e2d5b3984d3cb2527e2d6099d3de85630c8934efcfdc348a9760e"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0588788a9a85f3e5e9ebca14211a496409cb3deca5b6971ff37c556d581854e7"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9baf78b31da2dc3d3f346ef18e58ec5f12f5aaa17ac517e2ffd026a92a87588"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:373c0840f5c2b5b1ccadd9286782852b901055998136287828731868027a724f"}, - {file = "pydantic-1.10.11-cp310-cp310-win_amd64.whl", hash = "sha256:c3339a46bbe6013ef7bdd2844679bfe500347ac5742cd4019a88312aa58a9847"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a6c32e1c3809fbc49debb96bf833164f3438b3696abf0fbeceb417d123e6eb"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a451ccab49971af043ec4e0d207cbc8cbe53dbf148ef9f19599024076fe9c25b"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02d24f7b2b365fed586ed73582c20f353a4c50e4be9ba2c57ab96f8091ddae"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f34739a89260dfa420aa3cbd069fbcc794b25bbe5c0a214f8fb29e363484b66"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e297897eb4bebde985f72a46a7552a7556a3dd11e7f76acda0c1093e3dbcf216"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d185819a7a059550ecb85d5134e7d40f2565f3dd94cfd870132c5f91a89cf58c"}, - {file = "pydantic-1.10.11-cp311-cp311-win_amd64.whl", hash = "sha256:4400015f15c9b464c9db2d5d951b6a780102cfa5870f2c036d37c23b56f7fc1b"}, - {file = "pydantic-1.10.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2417de68290434461a266271fc57274a138510dca19982336639484c73a07af6"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331c031ba1554b974c98679bd0780d89670d6fd6f53f5d70b10bdc9addee1713"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8268a735a14c308923e8958363e3a3404f6834bb98c11f5ab43251a4e410170c"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:44e51ba599c3ef227e168424e220cd3e544288c57829520dc90ea9cb190c3248"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d7781f1d13b19700b7949c5a639c764a077cbbdd4322ed505b449d3ca8edcb36"}, - {file = "pydantic-1.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:7522a7666157aa22b812ce14c827574ddccc94f361237ca6ea8bb0d5c38f1629"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc64eab9b19cd794a380179ac0e6752335e9555d214cfcb755820333c0784cb3"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8dc77064471780262b6a68fe67e013298d130414d5aaf9b562c33987dbd2cf4f"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe429898f2c9dd209bd0632a606bddc06f8bce081bbd03d1c775a45886e2c1cb"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:192c608ad002a748e4a0bed2ddbcd98f9b56df50a7c24d9a931a8c5dd053bd3d"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ef55392ec4bb5721f4ded1096241e4b7151ba6d50a50a80a2526c854f42e6a2f"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e0bb6efe86281623abbeeb0be64eab740c865388ee934cd3e6a358784aca6e"}, - {file = "pydantic-1.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:265a60da42f9f27e0b1014eab8acd3e53bd0bad5c5b4884e98a55f8f596b2c19"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:469adf96c8e2c2bbfa655fc7735a2a82f4c543d9fee97bd113a7fb509bf5e622"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6cbfbd010b14c8a905a7b10f9fe090068d1744d46f9e0c021db28daeb8b6de1"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9738b0f2e6c70f44ee0de53f2089d6002b10c33264abee07bdb5c7f03038303"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:787cf23e5a0cde753f2eabac1b2e73ae3844eb873fd1f5bdbff3048d8dbb7604"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:174899023337b9fc685ac8adaa7b047050616136ccd30e9070627c1aaab53a13"}, - {file = "pydantic-1.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1954f8778489a04b245a1e7b8b22a9d3ea8ef49337285693cf6959e4b757535e"}, - {file = "pydantic-1.10.11-py3-none-any.whl", hash = "sha256:008c5e266c8aada206d0627a011504e14268a62091450210eda7c07fabe6963e"}, - {file = "pydantic-1.10.11.tar.gz", hash = "sha256:f66d479cf7eb331372c470614be6511eae96f1f120344c25f3f9bb59fb1b5528"}, + {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, + {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, + {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, + {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, + {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, + {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, + {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, + {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, + {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, + {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, + {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, + {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, + {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, + {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, + {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, + {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, + {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, + {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, + {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, + {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, + {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, + {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, + {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, + {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, + {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, + {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, + {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, + {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, + {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, + {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, + {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, + {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, + {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, + {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, + {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, + {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, ] [package.dependencies] @@ -2628,13 +2580,13 @@ test = ["pydata-sphinx-theme[doc]", "pytest"] [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -2764,88 +2716,104 @@ files = [ [[package]] name = "pyzmq" -version = "25.1.0" +version = "25.1.1" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, ] [package.dependencies] @@ -2896,13 +2864,13 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] [[package]] name = "referencing" -version = "0.30.0" +version = "0.30.2" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.30.0-py3-none-any.whl", hash = "sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548"}, - {file = "referencing-0.30.0.tar.gz", hash = "sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b"}, + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, ] [package.dependencies] @@ -3237,18 +3205,18 @@ themes = ["myst-parser (>=0.12.9,<0.13.0)", "pydata-sphinx-theme (>=0.4.0,<0.5.0 [[package]] name = "sphinx-rtd-theme" -version = "1.2.2" +version = "1.3.0" description = "Read the Docs theme for Sphinx" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, - {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, + {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, + {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, ] [package.dependencies] docutils = "<0.19" -sphinx = ">=1.6,<7" +sphinx = ">=1.6,<8" sphinxcontrib-jquery = ">=4,<5" [package.extras] @@ -3373,52 +3341,52 @@ test = ["pytest"] [[package]] name = "sqlalchemy" -version = "2.0.19" +version = "2.0.20" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9deaae357edc2091a9ed5d25e9ee8bba98bcfae454b3911adeaf159c2e9ca9e3"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0bf0fd65b50a330261ec7fe3d091dfc1c577483c96a9fa1e4323e932961aa1b5"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d90ccc15ba1baa345796a8fb1965223ca7ded2d235ccbef80a47b85cea2d71a"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4e688f6784427e5f9479d1a13617f573de8f7d4aa713ba82813bcd16e259d1"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:584f66e5e1979a7a00f4935015840be627e31ca29ad13f49a6e51e97a3fb8cae"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c69ce70047b801d2aba3e5ff3cba32014558966109fecab0c39d16c18510f15"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-win32.whl", hash = "sha256:96f0463573469579d32ad0c91929548d78314ef95c210a8115346271beeeaaa2"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-win_amd64.whl", hash = "sha256:22bafb1da60c24514c141a7ff852b52f9f573fb933b1e6b5263f0daa28ce6db9"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d6894708eeb81f6d8193e996257223b6bb4041cb05a17cd5cf373ed836ef87a2"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f2afd1aafded7362b397581772c670f20ea84d0a780b93a1a1529da7c3d369"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15afbf5aa76f2241184c1d3b61af1a72ba31ce4161013d7cb5c4c2fca04fd6e"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc05b59142445a4efb9c1fd75c334b431d35c304b0e33f4fa0ff1ea4890f92e"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5831138f0cc06b43edf5f99541c64adf0ab0d41f9a4471fd63b54ae18399e4de"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3afa8a21a9046917b3a12ffe016ba7ebe7a55a6fc0c7d950beb303c735c3c3ad"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-win32.whl", hash = "sha256:c896d4e6ab2eba2afa1d56be3d0b936c56d4666e789bfc59d6ae76e9fcf46145"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-win_amd64.whl", hash = "sha256:024d2f67fb3ec697555e48caeb7147cfe2c08065a4f1a52d93c3d44fc8e6ad1c"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:89bc2b374ebee1a02fd2eae6fd0570b5ad897ee514e0f84c5c137c942772aa0c"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd4d410a76c3762511ae075d50f379ae09551d92525aa5bb307f8343bf7c2c12"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f469f15068cd8351826df4080ffe4cc6377c5bf7d29b5a07b0e717dddb4c7ea2"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cda283700c984e699e8ef0fcc5c61f00c9d14b6f65a4f2767c97242513fcdd84"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:43699eb3f80920cc39a380c159ae21c8a8924fe071bccb68fc509e099420b148"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-win32.whl", hash = "sha256:61ada5831db36d897e28eb95f0f81814525e0d7927fb51145526c4e63174920b"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-win_amd64.whl", hash = "sha256:57d100a421d9ab4874f51285c059003292433c648df6abe6c9c904e5bd5b0828"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:16a310f5bc75a5b2ce7cb656d0e76eb13440b8354f927ff15cbaddd2523ee2d1"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf7b5e3856cbf1876da4e9d9715546fa26b6e0ba1a682d5ed2fc3ca4c7c3ec5b"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e7b69d9ced4b53310a87117824b23c509c6fc1f692aa7272d47561347e133b6"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9eb4575bfa5afc4b066528302bf12083da3175f71b64a43a7c0badda2be365"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6b54d1ad7a162857bb7c8ef689049c7cd9eae2f38864fc096d62ae10bc100c7d"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5d6afc41ca0ecf373366fd8e10aee2797128d3ae45eb8467b19da4899bcd1ee0"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-win32.whl", hash = "sha256:430614f18443b58ceb9dedec323ecddc0abb2b34e79d03503b5a7579cd73a531"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-win_amd64.whl", hash = "sha256:eb60699de43ba1a1f77363f563bb2c652f7748127ba3a774f7cf2c7804aa0d3d"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a752b7a9aceb0ba173955d4f780c64ee15a1a991f1c52d307d6215c6c73b3a4c"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7351c05db355da112e056a7b731253cbeffab9dfdb3be1e895368513c7d70106"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa51ce4aea583b0c6b426f4b0563d3535c1c75986c4373a0987d84d22376585b"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae7473a67cd82a41decfea58c0eac581209a0aa30f8bc9190926fbf628bb17f7"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851a37898a8a39783aab603c7348eb5b20d83c76a14766a43f56e6ad422d1ec8"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539010665c90e60c4a1650afe4ab49ca100c74e6aef882466f1de6471d414be7"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-win32.whl", hash = "sha256:f82c310ddf97b04e1392c33cf9a70909e0ae10a7e2ddc1d64495e3abdc5d19fb"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-win_amd64.whl", hash = "sha256:8e712cfd2e07b801bc6b60fdf64853bc2bd0af33ca8fa46166a23fe11ce0dbb0"}, - {file = "SQLAlchemy-2.0.19-py3-none-any.whl", hash = "sha256:314145c1389b021a9ad5aa3a18bac6f5d939f9087d7fc5443be28cba19d2c972"}, - {file = "SQLAlchemy-2.0.19.tar.gz", hash = "sha256:77a14fa20264af73ddcdb1e2b9c5a829b8cc6b8304d0f093271980e36c200a3f"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759b51346aa388c2e606ee206c0bc6f15a5299f6174d1e10cadbe4530d3c7a98"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1506e988ebeaaf316f183da601f24eedd7452e163010ea63dbe52dc91c7fc70e"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5768c268df78bacbde166b48be788b83dddaa2a5974b8810af422ddfe68a9bc8"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3f0dd6d15b6dc8b28a838a5c48ced7455c3e1fb47b89da9c79cc2090b072a50"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:243d0fb261f80a26774829bc2cee71df3222587ac789b7eaf6555c5b15651eed"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb6d77c31e1bf4268b4d61b549c341cbff9842f8e115ba6904249c20cb78a61"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-win32.whl", hash = "sha256:bcb04441f370cbe6e37c2b8d79e4af9e4789f626c595899d94abebe8b38f9a4d"}, + {file = "SQLAlchemy-2.0.20-cp310-cp310-win_amd64.whl", hash = "sha256:d32b5ffef6c5bcb452723a496bad2d4c52b346240c59b3e6dba279f6dcc06c14"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd81466bdbc82b060c3c110b2937ab65ace41dfa7b18681fdfad2f37f27acdd7"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6fe7d61dc71119e21ddb0094ee994418c12f68c61b3d263ebaae50ea8399c4d4"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4e571af672e1bb710b3cc1a9794b55bce1eae5aed41a608c0401885e3491179"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3364b7066b3c7f4437dd345d47271f1251e0cfb0aba67e785343cdbdb0fff08c"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1be86ccea0c965a1e8cd6ccf6884b924c319fcc85765f16c69f1ae7148eba64b"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1d35d49a972649b5080557c603110620a86aa11db350d7a7cb0f0a3f611948a0"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-win32.whl", hash = "sha256:27d554ef5d12501898d88d255c54eef8414576f34672e02fe96d75908993cf53"}, + {file = "SQLAlchemy-2.0.20-cp311-cp311-win_amd64.whl", hash = "sha256:411e7f140200c02c4b953b3dbd08351c9f9818d2bd591b56d0fa0716bd014f1e"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3c6aceebbc47db04f2d779db03afeaa2c73ea3f8dcd3987eb9efdb987ffa09a3"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d3f175410a6db0ad96b10bfbb0a5530ecd4fcf1e2b5d83d968dd64791f810ed"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea8186be85da6587456c9ddc7bf480ebad1a0e6dcbad3967c4821233a4d4df57"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c3d99ba99007dab8233f635c32b5cd24fb1df8d64e17bc7df136cedbea427897"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:76fdfc0f6f5341987474ff48e7a66c3cd2b8a71ddda01fa82fedb180b961630a"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-win32.whl", hash = "sha256:d3793dcf5bc4d74ae1e9db15121250c2da476e1af8e45a1d9a52b1513a393459"}, + {file = "SQLAlchemy-2.0.20-cp37-cp37m-win_amd64.whl", hash = "sha256:79fde625a0a55220d3624e64101ed68a059c1c1f126c74f08a42097a72ff66a9"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:599ccd23a7146e126be1c7632d1d47847fa9f333104d03325c4e15440fc7d927"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1a58052b5a93425f656675673ef1f7e005a3b72e3f2c91b8acca1b27ccadf5f4"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79543f945be7a5ada9943d555cf9b1531cfea49241809dd1183701f94a748624"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63e73da7fb030ae0a46a9ffbeef7e892f5def4baf8064786d040d45c1d6d1dc5"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ce5e81b800a8afc870bb8e0a275d81957e16f8c4b62415a7b386f29a0cb9763"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb0d3e94c2a84215532d9bcf10229476ffd3b08f481c53754113b794afb62d14"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-win32.whl", hash = "sha256:8dd77fd6648b677d7742d2c3cc105a66e2681cc5e5fb247b88c7a7b78351cf74"}, + {file = "SQLAlchemy-2.0.20-cp38-cp38-win_amd64.whl", hash = "sha256:6f8a934f9dfdf762c844e5164046a9cea25fabbc9ec865c023fe7f300f11ca4a"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:26a3399eaf65e9ab2690c07bd5cf898b639e76903e0abad096cd609233ce5208"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4cde2e1096cbb3e62002efdb7050113aa5f01718035ba9f29f9d89c3758e7e4e"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b09ba72e4e6d341bb5bdd3564f1cea6095d4c3632e45dc69375a1dbe4e26ec"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b74eeafaa11372627ce94e4dc88a6751b2b4d263015b3523e2b1e57291102f0"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:77d37c1b4e64c926fa3de23e8244b964aab92963d0f74d98cbc0783a9e04f501"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:eefebcc5c555803065128401a1e224a64607259b5eb907021bf9b175f315d2a6"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-win32.whl", hash = "sha256:3423dc2a3b94125094897118b52bdf4d37daf142cbcf26d48af284b763ab90e9"}, + {file = "SQLAlchemy-2.0.20-cp39-cp39-win_amd64.whl", hash = "sha256:5ed61e3463021763b853628aef8bc5d469fe12d95f82c74ef605049d810f3267"}, + {file = "SQLAlchemy-2.0.20-py3-none-any.whl", hash = "sha256:63a368231c53c93e2b67d0c5556a9836fdcd383f7e3026a39602aad775b14acf"}, + {file = "SQLAlchemy-2.0.20.tar.gz", hash = "sha256:ca8a5ff2aa7f3ade6c498aaafce25b1eaeabe4e42b73e25519183e4566a16fc6"}, ] [package.dependencies] @@ -3426,7 +3394,7 @@ greenlet = {version = "!=0.4.17", markers = "platform_machine == \"win32\" or pl typing-extensions = ">=4.2.0" [package.extras] -aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] asyncio = ["greenlet (!=0.4.17)"] asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] @@ -3484,13 +3452,13 @@ widechars = ["wcwidth"] [[package]] name = "tenacity" -version = "8.2.2" +version = "8.2.3" description = "Retry code until it succeeds" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, - {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, + {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, + {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, ] [package.extras] @@ -3536,13 +3504,13 @@ test = ["flake8", "isort", "pytest"] [[package]] name = "tokenize-rt" -version = "5.1.0" +version = "5.2.0" description = "A wrapper around the stdlib `tokenize` which roundtrips." optional = false python-versions = ">=3.8" files = [ - {file = "tokenize_rt-5.1.0-py2.py3-none-any.whl", hash = "sha256:9b7bb843e77dd6ed0be5564bfaaba200083911e0497841cd3e9235a6a9794d74"}, - {file = "tokenize_rt-5.1.0.tar.gz", hash = "sha256:08f0c2daa94c4052e53c2fcaa8e32585e6ae9bdfc800974092d031401694e002"}, + {file = "tokenize_rt-5.2.0-py2.py3-none-any.whl", hash = "sha256:b79d41a65cfec71285433511b50271b05da3584a1da144a0752e9c621a285289"}, + {file = "tokenize_rt-5.2.0.tar.gz", hash = "sha256:9fe80f8a5c1edad2d3ede0f37481cc0cc1538a2f442c9c2f9e4feacd2792d054"}, ] [[package]] @@ -3569,22 +3537,22 @@ files = [ [[package]] name = "tornado" -version = "6.3.2" +version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, - {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, - {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, - {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, ] [[package]] @@ -3698,17 +3666,17 @@ files = [ [[package]] name = "websocket-client" -version = "1.6.1" +version = "1.6.2" description = "WebSocket client for Python with low level API options" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, + {file = "websocket-client-1.6.2.tar.gz", hash = "sha256:53e95c826bf800c4c465f50093a8c4ff091c7327023b10bfaff40cf1ef170eaa"}, + {file = "websocket_client-1.6.2-py3-none-any.whl", hash = "sha256:ce54f419dfae71f4bdba69ebe65bf7f0a93fe71bc009ad3a010aacc3eebad537"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] diff --git a/pyproject.toml b/pyproject.toml index f886dda49..dcf5c938a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,4 +40,4 @@ ignore-regex = '.*(Stati Uniti|Tense=Pres).*' # whats is a typo but used frequently in queries so kept as is # aapply - async apply # unsecure - typo but part of API, decided to not bother for now -ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon' \ No newline at end of file +ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure,damon,crate' \ No newline at end of file