From 568a59eed568f3aec1d795e91815f8440ac5c024 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Wed, 22 Jul 2026 23:19:27 +0530 Subject: [PATCH 01/17] Add LaTeX OCR: multimodal env on the new Task API + dataset streaming A multimodal (vision + text) single-step (bandit) RL environment for image -> LaTeX transcription, backed by a Hugging Face dataset (default unsloth/LaTeX_OCR) and served through OpenEnv. Built on the newly introduced Task API (#726) and adds dataset streaming for datasets too large to materialize: - Task API over the dataset: list_splits / num_tasks / get_task / get_task_range. - Two access modes (LATEX_OCR_MODE): - materialize: split loaded + indexed; reset(split, index) random access. - stream: sequential cursor, NO full download; observations carry progress (index / total / remaining / pct_done); num_tasks from dataset metadata only; no-repeat within a pass. For TB-scale datasets. - Multimodal: image input + LaTeX output, gradeable with any vision-LLM policy. - Reward (LatexOCRRubric): 0.8*(1-CER) + 0.2*exact_match vs the hidden ground truth, whitespace-insensitive; pure-Python edit distance (no deps). - Custom Gradio "Try it" tab; typed client + Task API helpers; validate.py driver. - Unit tests for the rubric (tests/envs/test_latex_ocr_rubric.py). --- envs/latex_ocr_env/README.md | 76 + envs/latex_ocr_env/__init__.py | 12 + envs/latex_ocr_env/client.py | 134 + envs/latex_ocr_env/models.py | 87 + envs/latex_ocr_env/openenv.yaml | 38 + envs/latex_ocr_env/pyproject.toml | 38 + envs/latex_ocr_env/server/Dockerfile | 59 + envs/latex_ocr_env/server/__init__.py | 7 + envs/latex_ocr_env/server/app.py | 58 + envs/latex_ocr_env/server/gradio_ui.py | 137 + .../server/latex_ocr_environment.py | 313 ++ envs/latex_ocr_env/server/rubric.py | 113 + envs/latex_ocr_env/uv.lock | 4114 +++++++++++++++++ envs/latex_ocr_env/validate.py | 133 + tests/envs/test_latex_ocr_rubric.py | 83 + 15 files changed, 5402 insertions(+) create mode 100644 envs/latex_ocr_env/README.md create mode 100644 envs/latex_ocr_env/__init__.py create mode 100644 envs/latex_ocr_env/client.py create mode 100644 envs/latex_ocr_env/models.py create mode 100644 envs/latex_ocr_env/openenv.yaml create mode 100644 envs/latex_ocr_env/pyproject.toml create mode 100644 envs/latex_ocr_env/server/Dockerfile create mode 100644 envs/latex_ocr_env/server/__init__.py create mode 100644 envs/latex_ocr_env/server/app.py create mode 100644 envs/latex_ocr_env/server/gradio_ui.py create mode 100644 envs/latex_ocr_env/server/latex_ocr_environment.py create mode 100644 envs/latex_ocr_env/server/rubric.py create mode 100644 envs/latex_ocr_env/uv.lock create mode 100644 envs/latex_ocr_env/validate.py create mode 100644 tests/envs/test_latex_ocr_rubric.py diff --git a/envs/latex_ocr_env/README.md b/envs/latex_ocr_env/README.md new file mode 100644 index 000000000..b09b62380 --- /dev/null +++ b/envs/latex_ocr_env/README.md @@ -0,0 +1,76 @@ +--- +title: LaTeX OCR Env +emoji: 📐 +colorFrom: blue +colorTo: indigo +sdk: docker +app_port: 8000 +pinned: false +--- + +# LaTeX OCR Environment + +A dataset-backed, single-step (bandit) RL environment for **image → LaTeX** +transcription, served through OpenEnv. + +- **Task**: the agent is shown an image of a math/text expression and must + return its LaTeX source. +- **Dataset**: tasks are served from a Hugging Face dataset (default + [`unsloth/LaTeX_OCR`](https://huggingface.co/datasets/unsloth/LaTeX_OCR): + `image` + `text` columns, `train`/`test` splits) via the OpenEnv **Task API**. +- **Reward**: `(1 - exact_weight) * (1 - CER) + exact_weight * exact_match`, + where `CER` is the normalized character edit distance over whitespace-collapsed + LaTeX. Partial answers score in `[0, 0.8]`; only an exact match reaches `1.0`. + Computed **server-side** against the hidden ground truth — the agent never + sees the target on `reset`. + +## Episode + +``` +reset(split="test", index=0) -> observation { image_base64, prompt, ... } # target hidden +step(LatexOCRAction(latex=…)) -> reward, done=True { target_latex, exact_match, char_error_rate } +``` + +## Task API + +| Endpoint | Purpose | +|---|---| +| `GET /latex_ocr_env/splits` | list splits (`train`, `test`) | +| `POST /latex_ocr_env/num_tasks` | row count for a split | +| `POST /latex_ocr_env/tasks` | all task specs for a split | +| `POST /latex_ocr_env/task` | one task by `{split, index}` | +| `POST /latex_ocr_env/task_range` | slice `{split, start, stop}` | + +Client helpers: `env.list_splits()`, `env.num_tasks(split)`, +`env.get_task(split, index)`, `env.get_task_range(split, start, stop)`. + +## Run locally + +```bash +# From the repo root. LATEX_OCR_SPLITS=test avoids the 380MB train download. +PYTHONPATH=src:envs/latex_ocr_env LATEX_OCR_SPLITS=test \ + uv run --with datasets --with pillow --with fastapi --with uvicorn --with websockets \ + uvicorn server.app:app --host 0.0.0.0 --port 8000 +``` + +Then drive it (needs `HF_TOKEN` for the real VLM policy): + +```bash +HF_TOKEN=hf_xxx PYTHONPATH=src \ + uv run --with datasets --with pillow --with requests --with websockets --with openai \ + python envs/latex_ocr_env/validate.py --split test --num 3 \ + --model Qwen/Qwen2.5-VL-7B-Instruct +``` + +## Configuration (env vars) + +| Var | Default | Meaning | +|---|---|---| +| `LATEX_OCR_DATASET` | `unsloth/LaTeX_OCR` | source dataset | +| `LATEX_OCR_IMAGE_COLUMN` | `image` | image column | +| `LATEX_OCR_TEXT_COLUMN` | `text` | ground-truth LaTeX column | +| `LATEX_OCR_SPLITS` | `train,test` | splits to expose | +| `LATEX_OCR_MAX_ROWS` | — | cap rows per split (dev) | + +Swap in any `(image, latex)` dataset by pointing `LATEX_OCR_DATASET` at it (and +the column vars if they differ). diff --git a/envs/latex_ocr_env/__init__.py b/envs/latex_ocr_env/__init__.py new file mode 100644 index 000000000..955982180 --- /dev/null +++ b/envs/latex_ocr_env/__init__.py @@ -0,0 +1,12 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +"""LaTeX OCR Environment - dataset-backed, single-step RL for image→LaTeX.""" + +from .client import LatexOCREnv +from .models import LatexOCRAction, LatexOCRObservation + +__all__ = ["LatexOCRAction", "LatexOCRObservation", "LatexOCREnv"] diff --git a/envs/latex_ocr_env/client.py b/envs/latex_ocr_env/client.py new file mode 100644 index 000000000..4d516fbc3 --- /dev/null +++ b/envs/latex_ocr_env/client.py @@ -0,0 +1,134 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +""" +LaTeX OCR Environment client. + +Gym-style client (reset/step over WebSocket) plus thin HTTP helpers for the +Task API so a trainer can enumerate and select dataset tasks. + +Example: + >>> with LatexOCREnv(base_url="http://localhost:8000") as env: + ... print(env.list_splits()) # ["train", "test"] + ... print(env.num_tasks("test")) # 7595 + ... result = env.reset(split="test", index=0) + ... img = result.observation.image_base64 + ... # ... run a VLM to produce `latex` ... + ... result = env.step(LatexOCRAction(latex=latex)) + ... print(result.reward, result.observation.target_latex) +""" + +from __future__ import annotations + +from typing import Any, Optional +from urllib.parse import urljoin + +import requests + +try: + from openenv.core.client_types import StepResult + from openenv.core.env_client import EnvClient + from openenv.core.env_server.types import State +except ImportError: + from core.client_types import StepResult + from core.env_client import EnvClient + from core.env_server.types import State + +from .models import LatexOCRAction, LatexOCRObservation + +ENV_NAME = "latex_ocr_env" + + +class LatexOCREnv(EnvClient[LatexOCRAction, LatexOCRObservation, State]): + """Client for the LaTeX OCR environment.""" + + def reset( + self, + split: str = "train", + index: Optional[int] = None, + seed: Optional[int] = None, + **kwargs: Any, + ) -> StepResult[LatexOCRObservation]: + """Reset to a specific dataset task (or a random one if ``index`` is None).""" + payload: dict[str, Any] = {"split": split} + if index is not None: + payload["index"] = index + if seed is not None: + payload["seed"] = seed + payload.update(kwargs) + return super().reset(**payload) + + # --- Gym-style (de)serialization required by EnvClient --- + def _step_payload(self, action: LatexOCRAction) -> dict[str, Any]: + return action.model_dump() + + def _parse_result(self, data: dict[str, Any]) -> StepResult[LatexOCRObservation]: + obs_data = data.get("observation", data) + obs = LatexOCRObservation(**obs_data) + base = dict( + observation=obs, + reward=data.get("reward", obs.reward), + done=data.get("done", obs.done), + ) + # Newer core's StepResult carries `info`; older core does not. + try: + return StepResult(**base, info=data.get("info", {})) + except TypeError: + return StepResult(**base) + + def _parse_state(self, data: dict[str, Any]) -> State: + return State(**data) + + # ------------------------------------------------------------------ # + # Task API (HTTP) # + # ------------------------------------------------------------------ # + def _http_base(self) -> str: + # Newer core exposes ``_base_url`` (http); older core stores only + # ``_ws_url`` (ws://host/ws). Derive an http base that works for both. + base = getattr(self, "_base_url", None) + if not base: + ws = getattr(self, "_ws_url", None) + if not ws: + raise RuntimeError("Task API requires an HTTP base URL") + base = ws[:-3] if ws.endswith("/ws") else ws + base = base.replace("wss://", "https://").replace("ws://", "http://") + return base if base.endswith("/") else base + "/" + + def list_splits(self) -> list[str]: + resp = requests.get( + urljoin(self._http_base(), f"{ENV_NAME}/splits"), timeout=30 + ) + resp.raise_for_status() + return [s["name"] for s in resp.json()] + + def num_tasks(self, split: str) -> int: + resp = requests.post( + urljoin(self._http_base(), f"{ENV_NAME}/num_tasks"), + json={"split": split}, + timeout=60, + ) + resp.raise_for_status() + return int(resp.json()["num_tasks"]) + + def get_task(self, split: str, index: int) -> dict[str, Any]: + resp = requests.post( + urljoin(self._http_base(), f"{ENV_NAME}/task"), + json={"split": split, "index": index}, + timeout=60, + ) + resp.raise_for_status() + return resp.json()["task"] + + def get_task_range( + self, split: str, start: int | None = None, stop: int | None = None + ) -> list[dict[str, Any]]: + resp = requests.post( + urljoin(self._http_base(), f"{ENV_NAME}/task_range"), + json={"split": split, "start": start, "stop": stop}, + timeout=120, + ) + resp.raise_for_status() + return resp.json()["tasks"] diff --git a/envs/latex_ocr_env/models.py b/envs/latex_ocr_env/models.py new file mode 100644 index 000000000..b47d00685 --- /dev/null +++ b/envs/latex_ocr_env/models.py @@ -0,0 +1,87 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +""" +Data models for the LaTeX OCR Environment. + +The environment presents a rendered math/text image (from a Hugging Face +dataset) and the agent must return the LaTeX source that produced it. Reward +is computed server-side against the hidden ground-truth LaTeX. +""" + +from openenv.core.env_server.types import Action, Observation +from pydantic import Field + + +RewardValue = bool | int | float | None + + +class LatexOCRAction(Action): + """Agent's transcription attempt for the current image. + + A single ``latex`` string. Episodes are single-step (bandit): one action + per reset terminates the episode. + """ + + latex: str = Field( + default="", + description="Predicted LaTeX source for the current image.", + ) + + +class LatexOCRObservation(Observation): + """Observation for the LaTeX OCR environment. + + On ``reset`` the observation carries the image the agent must transcribe; + ``target_latex`` is intentionally empty so the agent cannot cheat. On the + terminal ``step`` observation the ground truth and scoring details are + revealed for logging/training. + """ + + # --- Present on reset (the task prompt) --- + image_base64: str = Field( + default="", + description="Base64-encoded image (PNG) the agent must transcribe.", + ) + image_format: str = Field( + default="png", description="Encoding format of image_base64." + ) + prompt: str = Field( + default="", + description="Instruction shown to the agent describing the OCR task.", + ) + split: str = Field(default="", description="Dataset split of the current task.") + index: int = Field( + default=-1, description="Row index (materialize) or cursor position (stream)." + ) + task_id: str = Field(default="", description="Stable task identifier.") + + # --- Streaming-mode progress (present when mode='stream') --- + total: int = Field(default=-1, description="Total rows in the split (denominator).") + remaining: int = Field(default=-1, description="Rows left in this stream.") + pct_done: float = Field( + default=0.0, description="Fraction of the split consumed so far." + ) + exhausted: bool = Field( + default=False, description="True once the stream is fully consumed." + ) + + # --- Present after step (grading result) --- + predicted_latex: str = Field( + default="", description="The LaTeX the agent submitted." + ) + target_latex: str = Field( + default="", + description="Ground-truth LaTeX. Empty until the episode terminates.", + ) + exact_match: bool = Field( + default=False, + description="Whether the normalized prediction equals the target.", + ) + char_error_rate: float = Field( + default=1.0, + description="Normalized Levenshtein distance between prediction and target.", + ) diff --git a/envs/latex_ocr_env/openenv.yaml b/envs/latex_ocr_env/openenv.yaml new file mode 100644 index 000000000..4004107f9 --- /dev/null +++ b/envs/latex_ocr_env/openenv.yaml @@ -0,0 +1,38 @@ +spec_version: 1 +name: latex_ocr_env +type: space +runtime: fastapi +app: server.app:app +port: 8000 + +description: > + Dataset-backed LaTeX OCR environment. Agents receive an image of a + mathematical expression and must return its LaTeX source. Reward is a blend + of normalized character edit distance and an exact-match bonus, computed + server-side against the hidden ground-truth LaTeX. Tasks are served from a + Hugging Face dataset (default: unsloth/LaTeX_OCR) via the OpenEnv Task API. +version: "0.1.0" + +# Environment configuration defaults (overridable via env vars) +environment: + dataset_name: unsloth/LaTeX_OCR # LATEX_OCR_DATASET + image_column: image # LATEX_OCR_IMAGE_COLUMN + text_column: text # LATEX_OCR_TEXT_COLUMN + splits: "train,test" # LATEX_OCR_SPLITS + exact_weight: 0.2 + +# Reward definition +rubric: + name: LatexOCRRubric + formula: "(1 - exact_weight) * (1 - CER) + exact_weight * exact_match" + cer: "normalized Levenshtein distance over whitespace-collapsed LaTeX" + +# Task API (dataset discovery) — auto-exposed by the OpenEnv server +task_api: + splits: [train, test] + endpoints: + - GET /latex_ocr_env/splits + - POST /latex_ocr_env/num_tasks + - POST /latex_ocr_env/tasks + - POST /latex_ocr_env/task + - POST /latex_ocr_env/task_range diff --git a/envs/latex_ocr_env/pyproject.toml b/envs/latex_ocr_env/pyproject.toml new file mode 100644 index 000000000..be5288bfe --- /dev/null +++ b/envs/latex_ocr_env/pyproject.toml @@ -0,0 +1,38 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +[build-system] +requires = ["setuptools>=45", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "openenv-latex_ocr_env" +version = "0.1.0" +description = "LaTeX OCR environment for OpenEnv (image -> LaTeX transcription with edit-distance reward)" +requires-python = ">=3.10" +dependencies = [ + # Core OpenEnv runtime (FastAPI server + Task API). 0.4.1 is the first + # release that ships the Task API (#726). + "openenv>=0.4.1", + "datasets>=4.0.0", + "pillow>=10.0.0", + "requests>=2.31.0", +] + +[project.optional-dependencies] +dev = [ + "pytest>=8.0.0", + # OpenAI SDK is only needed to drive the env with a VLM policy (validate.py). + "openai>=1.40.0", +] + +[project.scripts] +server = "latex_ocr_env.server.app:main" + +[tool.setuptools] +include-package-data = true +packages = ["latex_ocr_env", "latex_ocr_env.server"] +package-dir = { "latex_ocr_env" = ".", "latex_ocr_env.server" = "server" } diff --git a/envs/latex_ocr_env/server/Dockerfile b/envs/latex_ocr_env/server/Dockerfile new file mode 100644 index 000000000..f3c179c3e --- /dev/null +++ b/envs/latex_ocr_env/server/Dockerfile @@ -0,0 +1,59 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +# Multi-stage build using openenv-base. Works for in-repo and standalone builds. +# +# Build from the env directory: +# docker build -t latex-ocr-env:latest -f server/Dockerfile . +# Run: +# docker run -p 8000:8000 latex-ocr-env:latest + +ARG BASE_IMAGE=ghcr.io/huggingface/openenv-base:latest +FROM ${BASE_IMAGE} AS builder + +WORKDIR /app +ARG BUILD_MODE=in-repo +COPY . /app/env +WORKDIR /app/env + +RUN if ! command -v uv >/dev/null 2>&1; then \ + curl -LsSf https://astral.sh/uv/install.sh | sh && \ + mv /root/.local/bin/uv /usr/local/bin/uv && \ + mv /root/.local/bin/uvx /usr/local/bin/uvx; \ + fi + +RUN apt-get update && apt-get install -y --no-install-recommends git \ + && rm -rf /var/lib/apt/lists/* + +RUN --mount=type=cache,target=/root/.cache/uv \ + if [ -f uv.lock ]; then \ + uv sync --frozen --no-install-project --no-editable; \ + else \ + uv sync --no-install-project --no-editable; \ + fi + +RUN --mount=type=cache,target=/root/.cache/uv \ + if [ -f uv.lock ]; then \ + uv sync --frozen --no-editable; \ + else \ + uv sync --no-editable; \ + fi + +FROM ${BASE_IMAGE} +WORKDIR /app +COPY --from=builder /app/env/.venv /app/.venv +COPY --from=builder /app/env /app/env +ENV PATH="/app/.venv/bin:$PATH" +ENV PYTHONPATH="/app/env:$PYTHONPATH" +ENV PYTHONUNBUFFERED=1 + +# Pre-caching the dataset at build time is optional; by default it downloads on +# first request. Set LATEX_OCR_SPLITS=test to limit to the small split. + +HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ + CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/healthz')" || exit 1 + +CMD ["uvicorn", "latex_ocr_env.server.app:app", "--host", "0.0.0.0", "--port", "8000", "--ws-ping-interval", "120", "--ws-ping-timeout", "600"] diff --git a/envs/latex_ocr_env/server/__init__.py b/envs/latex_ocr_env/server/__init__.py new file mode 100644 index 000000000..850fe095c --- /dev/null +++ b/envs/latex_ocr_env/server/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +"""Server package for the LaTeX OCR Environment.""" diff --git a/envs/latex_ocr_env/server/app.py b/envs/latex_ocr_env/server/app.py new file mode 100644 index 000000000..415ca840b --- /dev/null +++ b/envs/latex_ocr_env/server/app.py @@ -0,0 +1,58 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +""" +FastAPI application for the LaTeX OCR Environment. + +Exposes LatexOCREnvironment over HTTP + WebSocket (Gym-style) endpoints and the +Task API for dataset-backed task discovery. + +Usage: + # Development: + PYTHONPATH=. uvicorn server.app:app --host 0.0.0.0 --port 8000 + + # Or run directly: + python -m server.app +""" + +try: + from openenv.core.env_server import create_app + + from ..models import LatexOCRAction, LatexOCRObservation + from .gradio_ui import latex_ocr_ui_builder + from .latex_ocr_environment import LatexOCREnvironment +except ImportError: # standalone (uvicorn server.app:app) + from models import LatexOCRAction, LatexOCRObservation + from openenv.core.env_server import create_app + from server.gradio_ui import latex_ocr_ui_builder + from server.latex_ocr_environment import LatexOCREnvironment + + +app = create_app( + LatexOCREnvironment, + LatexOCRAction, + LatexOCRObservation, + env_name="latex_ocr_env", + gradio_builder=latex_ocr_ui_builder, + custom_tab_name="Try it", + custom_tab_primary=True, +) + + +@app.get("/healthz") +async def health() -> dict[str, str]: + """Lightweight service health endpoint for orchestration checks.""" + return {"status": "ok"} + + +def main() -> None: + import uvicorn + + uvicorn.run(app, host="0.0.0.0", port=8000) + + +if __name__ == "__main__": + main() diff --git a/envs/latex_ocr_env/server/gradio_ui.py b/envs/latex_ocr_env/server/gradio_ui.py new file mode 100644 index 000000000..7e3f4e261 --- /dev/null +++ b/envs/latex_ocr_env/server/gradio_ui.py @@ -0,0 +1,137 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +""" +Custom Gradio UI for the LaTeX OCR environment. + +Interactive playground: + 1. "Get next task" -> pulls a task (image) from the env; shows progress. + 2. type LaTeX -> the user's transcription attempt. + 3. "Score" -> grades it server-side and reveals the ground truth. + +Drives the *same* environment instance the API uses, via ``web_manager``, so in +stream mode the cursor and progress here match the real episode flow. +""" + +from __future__ import annotations + +import base64 +import io +from typing import Any, Dict, List, Optional + +import gradio as gr + + +def _decode_image(b64: str): + if not b64: + return None + try: + from PIL import Image + + return Image.open(io.BytesIO(base64.b64decode(b64))) + except Exception: + return None + + +def _obs(result: Dict[str, Any]) -> Dict[str, Any]: + """reset/step return {'observation': {...}, 'reward':..., 'done':...}.""" + if isinstance(result, dict) and "observation" in result: + return result["observation"] or {} + return result or {} + + +def latex_ocr_ui_builder( + web_manager, + action_fields: List[Dict[str, Any]], + metadata: Optional[Any], + is_chat_env: bool, + title: str, + quick_start_md: Optional[str], +) -> gr.Blocks: + def _splits() -> List[str]: + try: + return web_manager.env.list_splits() + except Exception: + return ["train"] + + def _progress_md(o: Dict[str, Any]) -> str: + total = o.get("total", -1) + if total and total > 0: + return ( + f"**Task `{o.get('task_id', '')}`** · position " + f"**{o.get('index')}/{total}** " + f"({o.get('pct_done', 0):.4%}) · remaining **{o.get('remaining')}**" + ) + return f"**Task `{o.get('task_id', '')}`** (index {o.get('index')})" + + with gr.Blocks(title=f"{title} — Playground") as demo: + gr.Markdown(f"# {title} — try it") + gr.Markdown( + "Transcribe the image into **LaTeX**, then score it. Reward = " + "`0.8·(1−CER) + 0.2·exact_match` against the hidden ground truth." + ) + + with gr.Row(): + with gr.Column(scale=1): + split_dd = gr.Dropdown( + choices=_splits(), + value=(_splits() or ["train"])[0], + label="Split", + interactive=True, + ) + get_btn = gr.Button("🎲 Get next task", variant="primary", size="lg") + progress_md = gr.Markdown("*No task yet — click “Get next task”.*") + image = gr.Image(label="Image to transcribe", type="pil", height=200) + + with gr.Column(scale=1): + pred_box = gr.Textbox( + label="Your LaTeX prediction", + placeholder="e.g. x ^ { 2 } + 1", + lines=4, + ) + score_btn = gr.Button("✅ Score", variant="primary", size="lg") + score_md = gr.Markdown("") + truth_box = gr.Textbox( + label="Ground truth (revealed after scoring)", + lines=4, + interactive=False, + ) + + async def on_get_task(split: str): + result = await web_manager.reset_environment({"split": split}) + o = _obs(result) + return ( + _decode_image(o.get("image_base64", "")), + _progress_md(o), + "", # clear prediction + "", # clear score + "", # clear truth + ) + + async def on_score(prediction: str): + try: + result = await web_manager.step_environment({"latex": prediction or ""}) + except Exception as e: + return f"⚠️ {e}. Click **Get next task** first.", "" + o = _obs(result) + reward = o.get("reward") + reward = reward if reward is not None else 0.0 + mark = "🎯 **exact match**" if o.get("exact_match") else "≈ partial" + md = ( + f"### Reward: `{reward:.4f}` {mark}\n" + f"- character error rate: `{o.get('char_error_rate', 1.0):.4f}`\n" + f"- exact match: `{o.get('exact_match', False)}`" + ) + return md, o.get("target_latex", "") + + get_btn.click( + on_get_task, + inputs=[split_dd], + outputs=[image, progress_md, pred_box, score_md, truth_box], + ) + score_btn.click(on_score, inputs=[pred_box], outputs=[score_md, truth_box]) + + return demo diff --git a/envs/latex_ocr_env/server/latex_ocr_environment.py b/envs/latex_ocr_env/server/latex_ocr_environment.py new file mode 100644 index 000000000..8b7735ac2 --- /dev/null +++ b/envs/latex_ocr_env/server/latex_ocr_environment.py @@ -0,0 +1,313 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +""" +LaTeX OCR Environment. + +A dataset-backed, single-step (bandit) RL environment over a Hugging Face +dataset of (image, LaTeX) pairs. Reward is computed against the hidden +ground-truth LaTeX via :class:`LatexOCRRubric`. + +Two access modes (env var ``LATEX_OCR_MODE``): + +- ``materialize`` (default) — the split is loaded and indexed. Supports the full + Task API with random access: ``reset(split, index)`` selects any row. Best + when the dataset fits on disk and is re-read across epochs. + +- ``stream`` — a sequential **cursor** over a streamed split (no full download). + ``reset()`` pulls the *next* sample; every observation carries progress + (``index``, ``total``, ``remaining``, ``pct_done``). No-repeat within a pass; + ``reset(index=i)`` random access is unsupported by design. Best for very large + / TB-scale datasets. See STREAMING.md. + +The dataset (materialize) and the split row-count (stream) are cached at module +scope because the server instantiates a fresh env per Task API call. +""" + +from __future__ import annotations + +import base64 +import io +import logging +import os +import random +from functools import lru_cache +from typing import Any, Optional +from uuid import uuid4 + +from openenv.core.env_server.interfaces import Environment +from openenv.core.env_server.types import State + +try: + from ..models import LatexOCRAction, LatexOCRObservation +except ImportError: # standalone (uvicorn server.app:app) + from models import LatexOCRAction, LatexOCRObservation + +from .rubric import LatexOCRRubric + +logger = logging.getLogger(__name__) + +DEFAULT_DATASET = os.environ.get("LATEX_OCR_DATASET", "unsloth/LaTeX_OCR") +IMAGE_COLUMN = os.environ.get("LATEX_OCR_IMAGE_COLUMN", "image") +TEXT_COLUMN = os.environ.get("LATEX_OCR_TEXT_COLUMN", "text") +DEFAULT_MODE = os.environ.get("LATEX_OCR_MODE", "materialize") # materialize | stream +SEED = int(os.environ.get("LATEX_OCR_SEED", "0")) +SHUFFLE_BUFFER = int(os.environ.get("LATEX_OCR_SHUFFLE_BUFFER", "0")) +CONFIG = os.environ.get("LATEX_OCR_CONFIG") or None +DEFAULT_PROMPT = os.environ.get( + "LATEX_OCR_PROMPT", + "Transcribe the mathematical expression in this image into LaTeX. " + "Return only the LaTeX source, with no surrounding text or code fences.", +) + + +def _configured_splits() -> list[str]: + raw = os.environ.get("LATEX_OCR_SPLITS", "train,test") + return [s.strip() for s in raw.split(",") if s.strip()] + + +@lru_cache(maxsize=None) +def _load_split(dataset_name: str, split: str): + """Load + cache a full split (materialize mode) for the process lifetime.""" + from datasets import load_dataset + + logger.info("Materializing %s split=%s ...", dataset_name, split) + ds = load_dataset( + dataset_name, name=CONFIG, split=split, token=os.environ.get("HF_TOKEN") + ) + max_rows = os.environ.get("LATEX_OCR_MAX_ROWS") + if max_rows: + ds = ds.select(range(min(int(max_rows), len(ds)))) + return ds + + +@lru_cache(maxsize=None) +def _split_total(dataset_name: str, split: str) -> int: + """Row count from dataset metadata — cheap, no data download (stream mode).""" + from datasets import load_dataset_builder + + builder = load_dataset_builder( + dataset_name, name=CONFIG, token=os.environ.get("HF_TOKEN") + ) + info = builder.info.splits.get(split) + return int(info.num_examples) if info and info.num_examples else -1 + + +def _encode_image(image: Any) -> str: + if isinstance(image, (bytes, bytearray)): + return base64.b64encode(bytes(image)).decode("ascii") + buffer = io.BytesIO() + image.convert("RGB").save(buffer, format="PNG") + return base64.b64encode(buffer.getvalue()).decode("ascii") + + +class LatexOCREnvironment(Environment): + """Single-step LaTeX OCR environment (materialize or streaming cursor).""" + + SUPPORTS_CONCURRENT_SESSIONS = True + + def __init__( + self, + dataset_name: str = DEFAULT_DATASET, + exact_weight: float = 0.2, + mode: str = DEFAULT_MODE, + ) -> None: + super().__init__() + self.dataset_name = dataset_name + self.mode = mode + self._rubric = LatexOCRRubric(exact_weight=exact_weight) + self._state = State(episode_id=str(uuid4()), step_count=0) + self._target: Optional[str] = None + self._current_split: str = "" + self._current_index: int = -1 + self._done = False + # streaming cursor state (per session/instance) + self._stream = None + self._stream_split: str = "" + self._cursor = 0 + self._exhausted = False + + # ------------------------------------------------------------------ # + # Task API # + # ------------------------------------------------------------------ # + def list_splits(self) -> list[str]: + return _configured_splits() + + def num_tasks(self, split: str) -> int: + # Honest denominator in both modes; stream reads metadata only. + if self.mode == "stream": + return _split_total(self.dataset_name, split) + return len(_load_split(self.dataset_name, split)) + + def list_tasks(self, split: str) -> list[dict[str, Any]]: + n = self.num_tasks(split) + if self.mode == "stream": + # Positional stubs only; do not enumerate huge splits. + preview = min(n if n > 0 else 0, 100) + return [ + {"id": f"{split}-{i}", "index": i, "sequential": True} + for i in range(preview) + ] + return [{"id": f"{split}-{i}", "index": i} for i in range(n)] + + def get_task(self, split: str, index: int) -> dict[str, Any]: + n = self.num_tasks(split) + if index < 0 or (n > 0 and index >= n): + raise IndexError(f"index {index} out of range for split {split} (n={n})") + task = {"id": f"{split}-{index}", "index": index, "split": split} + if self.mode == "stream": + # Position metadata only; stream serves rows sequentially via reset(). + task["sequential"] = True + return task + + def get_task_range( + self, split: str, start: int | None = None, stop: int | None = None + ) -> list[dict[str, Any]]: + n = self.num_tasks(split) + start = 0 if start is None else start + stop = n if stop is None else (min(stop, n) if n > 0 else stop) + return [ + {"id": f"{split}-{i}", "index": i, "split": split} + for i in range(start, stop) + ] + + # ------------------------------------------------------------------ # + # Episode # + # ------------------------------------------------------------------ # + def reset( + self, + split: str = "train", + index: int | None = None, + seed: int | None = None, + episode_id: str | None = None, + **kwargs: Any, + ) -> LatexOCRObservation: + if split not in self.list_splits(): + split = self.list_splits()[0] + self._done = False + self._state = State(episode_id=episode_id or str(uuid4()), step_count=0) + if self.mode == "stream": + return self._reset_stream(split) + return self._reset_materialize(split, index, seed) + + def _reset_materialize( + self, split: str, index: int | None, seed: int | None + ) -> LatexOCRObservation: + ds = _load_split(self.dataset_name, split) + n = len(ds) + if index is None: + index = random.Random(seed).randrange(n) + if index < 0 or index >= n: + raise IndexError(f"index {index} out of range for split {split} (n={n})") + row = ds[int(index)] + self._target = str(row[TEXT_COLUMN]) + self._current_split, self._current_index = split, int(index) + return LatexOCRObservation( + done=False, + image_base64=_encode_image(row[IMAGE_COLUMN]), + image_format="png", + prompt=DEFAULT_PROMPT, + split=split, + index=int(index), + task_id=f"{split}-{index}", + ) + + def _ensure_stream(self, split: str) -> None: + if self._stream is not None and self._stream_split == split: + return + from datasets import load_dataset + + ds = load_dataset( + self.dataset_name, + name=CONFIG, + split=split, + streaming=True, + token=os.environ.get("HF_TOKEN"), + ) + if SHUFFLE_BUFFER > 0: + ds = ds.shuffle(seed=SEED, buffer_size=SHUFFLE_BUFFER) + self._stream = iter(ds) + self._stream_split = split + self._cursor = 0 + self._exhausted = False + + def _reset_stream(self, split: str) -> LatexOCRObservation: + self._ensure_stream(split) + total = _split_total(self.dataset_name, split) + try: + row = next(self._stream) + except StopIteration: + self._exhausted = True + return LatexOCRObservation( + done=True, + split=split, + index=self._cursor, + total=total, + remaining=0, + pct_done=1.0, + exhausted=True, + task_id=f"{split}-stream-end", + ) + self._cursor += 1 + self._target = str(row[TEXT_COLUMN]) + self._current_split, self._current_index = split, self._cursor + remaining = (total - self._cursor) if total > 0 else -1 + return LatexOCRObservation( + done=False, + image_base64=_encode_image(row[IMAGE_COLUMN]), + image_format="png", + prompt=DEFAULT_PROMPT, + split=split, + index=self._cursor, + task_id=f"{split}-stream-{self._cursor}", + total=total, + remaining=remaining, + pct_done=round(self._cursor / total, 6) if total > 0 else 0.0, + exhausted=False, + ) + + def step(self, action: LatexOCRAction, **kwargs: Any) -> LatexOCRObservation: + if self._target is None: + raise RuntimeError("step() called before reset()") + if self._done: + raise RuntimeError("Episode already terminated; call reset() first") + prediction = action.latex if isinstance(action, LatexOCRAction) else "" + result = self._rubric.grade(prediction, self._target) + self._state.step_count += 1 + self._done = True + + total = ( + _split_total(self.dataset_name, self._current_split) + if self.mode == "stream" + else -1 + ) + return LatexOCRObservation( + done=True, + reward=result.reward, + split=self._current_split, + index=self._current_index, + task_id=f"{self._current_split}-{self._current_index}", + predicted_latex=prediction, + target_latex=self._target, + exact_match=result.exact_match, + char_error_rate=result.char_error_rate, + total=total, + remaining=(total - self._cursor) + if (self.mode == "stream" and total > 0) + else -1, + pct_done=round(self._cursor / total, 6) + if (self.mode == "stream" and total > 0) + else 0.0, + metadata={ + "exact_match": result.exact_match, + "char_error_rate": result.char_error_rate, + "mode": self.mode, + }, + ) + + @property + def state(self) -> State: + return self._state diff --git a/envs/latex_ocr_env/server/rubric.py b/envs/latex_ocr_env/server/rubric.py new file mode 100644 index 000000000..c2cb1f835 --- /dev/null +++ b/envs/latex_ocr_env/server/rubric.py @@ -0,0 +1,113 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +""" +Reward computation for the LaTeX OCR environment. + +The reward blends a dense similarity signal with an exact-match bonus, which is +the standard shape for OCR-style RL where exact-string reward is too sparse: + + reward = (1 - exact_weight) * (1 - CER) + exact_weight * exact_match + +where ``CER`` is the normalized character error rate (Levenshtein distance over +the longer normalized string). A perfect transcription scores 1.0; a partial +transcription is capped at ``1 - exact_weight`` so the policy is always pulled +toward getting the expression *exactly* right. + +Implemented with a pure-Python Levenshtein so the environment carries no extra +runtime dependency. +""" + +from __future__ import annotations + +import re +from dataclasses import dataclass + + +_WHITESPACE = re.compile(r"\s+") + + +def normalize_latex(text: str) -> str: + """Canonicalize LaTeX for comparison. + + Collapses runs of whitespace to single spaces and strips leading/trailing + space. Deliberately conservative: it does not reorder tokens or rewrite + commands, so it never inflates the score by "fixing" a wrong answer. + """ + return _WHITESPACE.sub(" ", text or "").strip() + + +def _strip_all_whitespace(text: str) -> str: + return _WHITESPACE.sub("", text or "") + + +def levenshtein(a: str, b: str) -> int: + """Edit distance between two strings (pure Python, O(len(a) * len(b))).""" + if a == b: + return 0 + if not a: + return len(b) + if not b: + return len(a) + + previous = list(range(len(b) + 1)) + for i, ca in enumerate(a, start=1): + current = [i] + for j, cb in enumerate(b, start=1): + insert = current[j - 1] + 1 + delete = previous[j] + 1 + substitute = previous[j - 1] + (ca != cb) + current.append(min(insert, delete, substitute)) + previous = current + return previous[-1] + + +@dataclass +class GradeResult: + reward: float + exact_match: bool + char_error_rate: float + + +class LatexOCRRubric: + """Normalized edit distance + exact-match bonus. + + Args: + exact_weight: Fraction of the reward reserved for an exact match. With + the default 0.2, partial answers score in ``[0, 0.8]`` and only an + exact (whitespace-insensitive) match reaches ``1.0``. + """ + + def __init__(self, exact_weight: float = 0.2) -> None: + if not 0.0 <= exact_weight <= 1.0: + raise ValueError("exact_weight must be in [0, 1]") + self.exact_weight = exact_weight + + def grade(self, prediction: str, target: str) -> GradeResult: + # LaTeX spacing is largely cosmetic, so both the dense (edit-distance) + # term and the exact-match term score on the whitespace-stripped form. + # This keeps them consistent: an exact match => CER 0 => reward 1.0. + pred_canon = _strip_all_whitespace(normalize_latex(prediction)) + target_canon = _strip_all_whitespace(normalize_latex(target)) + + exact = pred_canon == target_canon + + if not target_canon: + # Degenerate target: only an empty prediction is correct. + cer = 0.0 if not pred_canon else 1.0 + else: + distance = levenshtein(pred_canon, target_canon) + cer = min(1.0, distance / max(len(pred_canon), len(target_canon))) + + similarity = 1.0 - cer + reward = (1.0 - self.exact_weight) * similarity + self.exact_weight * float( + exact + ) + return GradeResult( + reward=round(reward, 6), + exact_match=exact, + char_error_rate=round(cer, 6), + ) diff --git a/envs/latex_ocr_env/uv.lock b/envs/latex_ocr_env/uv.lock new file mode 100644 index 000000000..64ebc5d2e --- /dev/null +++ b/envs/latex_ocr_env/uv.lock @@ -0,0 +1,4114 @@ +version = 1 +revision = 3 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11'", +] + +[[package]] +name = "aiofile" +version = "3.9.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "caio", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/67/e2/d7cb819de8df6b5c1968a2756c3cb4122d4fa2b8fc768b53b7c9e5edb646/aiofile-3.9.0.tar.gz", hash = "sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b", size = 17943, upload-time = "2024-10-08T10:39:35.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/25/da1f0b4dd970e52bf5a36c204c107e11a0c6d3ed195eba0bfbc664c312b2/aiofile-3.9.0-py3-none-any.whl", hash = "sha256:ce2f6c1571538cbdfa0143b04e16b208ecb0e9cb4148e528af8a640ed51cc8aa", size = 19539, upload-time = "2024-10-08T10:39:32.955Z" }, +] + +[[package]] +name = "aiofile" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "caio", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/41/2fea7e193e061ce54eacc3b7bc0e6a99e4fcff43c78cf0a76dd781ed8334/aiofile-3.11.1.tar.gz", hash = "sha256:1f91912c6643d2a4e49ca4ae3514f0bf3867ce948a36d99a6411b8f4755f4cf9", size = 19342, upload-time = "2026-05-16T08:18:33.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/cd/0d76dfc5de72bde52f55f53e925c7d152d9c7906634ec1e0cbc7e8d4ad93/aiofile-3.11.1-py3-none-any.whl", hash = "sha256:ce77d14ac07f77bc2b757834a5c129321f3f705c474593deed5ab209079a52c9", size = 20446, upload-time = "2026-05-16T08:18:32.051Z" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/f4/eec0465c2f67b2664688d0240b3212d5196fd89e741df67ddb81f8d35658/aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d", size = 24757, upload-time = "2026-07-01T17:11:55.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/43/1947f06babed6b3f1d7f38b0c767f52df66bfb2bc10b468c4a7de9eceff2/aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472", size = 15038, upload-time = "2026-07-01T17:11:54.055Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "async-timeout", marker = "python_full_version < '3.11'" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/cc/58f26f118d8099f84e009ce560b9148a3f803e63fa8473b57feb67241875/aiohttp-3.14.2.tar.gz", hash = "sha256:f96821eb2ae2f12b0dfa799eafbf221f5621a9220b457b4744a269a63a5f3a6c", size = 7969860, upload-time = "2026-07-20T19:53:26.881Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/37/6a24e23d559bc2d042287cee15b4a6e61b46f844d2b3c96832483f854a4a/aiohttp-3.14.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ceb77c159b2b4c1a179b96a26af36bcaa68eb79c393ec4f569386a69d013cbe9", size = 765793, upload-time = "2026-07-20T19:49:37.707Z" }, + { url = "https://files.pythonhosted.org/packages/dc/14/23aa28408805efe6adc0e97048f5cd6028a2a3036d237038f45d10dc05a6/aiohttp-3.14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3f3381f81bc1c6cbe160b2a3708d39d05014329118e6b648b95edc841eeeebd4", size = 517440, upload-time = "2026-07-20T19:49:40.182Z" }, + { url = "https://files.pythonhosted.org/packages/24/2d/7fc2d359d6702ce5299cd865ec2c70dad2fd8c1b3901bc79f83e3c61c395/aiohttp-3.14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:483b6f964bbbdaa99a0cd7def631208c44e39d243b95cff23ebc812db8a80e03", size = 515306, upload-time = "2026-07-20T19:49:41.818Z" }, + { url = "https://files.pythonhosted.org/packages/dc/f0/fd9c7019bdfba5529c9a697621a757f0cfd92787595a04a9252923b097fc/aiohttp-3.14.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc056948b7a8a40484b4bbc69923fa25cddd80cbc5f236a3a22ad2f836baeed2", size = 1708602, upload-time = "2026-07-20T19:49:43.351Z" }, + { url = "https://files.pythonhosted.org/packages/3d/6d/8de300d792a3b91a94533a626a835c32cda69189209ae539bebaadba88ad/aiohttp-3.14.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:135570f5b470c72c4988a58986f1f847ad336721f77fcc18fda8472bd3bbe3db", size = 1673881, upload-time = "2026-07-20T19:49:44.753Z" }, + { url = "https://files.pythonhosted.org/packages/65/27/37559302e4f03e343f549ff1628295c20fb0298d603e40193db2f25f5153/aiohttp-3.14.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ee5bdd7933c653e43ef8d720704a4e228e4927121f2f5f598b7efe6a4c18633a", size = 1766985, upload-time = "2026-07-20T19:49:46.464Z" }, + { url = "https://files.pythonhosted.org/packages/df/55/29cc3691fa0bb1334352bcb61ba5f256396fd6a0603cf321b8c29bb7e1fe/aiohttp-3.14.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0baed2a2367a28456b612f4c3fd28bb86b00fadfb6454e706d8f65c21636bfd7", size = 1858788, upload-time = "2026-07-20T19:49:48.015Z" }, + { url = "https://files.pythonhosted.org/packages/71/63/36a34c0139d0b1a830e8ee130a75312e9eddccb5b234a7f56e9de5e6edd2/aiohttp-3.14.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecdd6b8cab5b7c0ff2988378c11ba7192f076a1864e64dc3ff72f7ba05c71796", size = 1714003, upload-time = "2026-07-20T19:49:49.714Z" }, + { url = "https://files.pythonhosted.org/packages/ac/d8/c3a37079d503967a4072f8fc187c9d46c62b1eb72b25ae57dc0f2d0ddb11/aiohttp-3.14.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a3177e51e26e0158fb3376aebac97e0546c6f175c510f331f585e514a00a302b", size = 1588046, upload-time = "2026-07-20T19:49:51.209Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0c/c42b45bb275983cde529a4bc0e94f23ca6cdfe2a3c97285e73a4a6b81c23/aiohttp-3.14.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:86861a430657bc71e0f89b195de5f8fa495c0b9b5864cf2f89bd5ec1dbb6b77a", size = 1677219, upload-time = "2026-07-20T19:49:52.89Z" }, + { url = "https://files.pythonhosted.org/packages/75/a1/bdcd55b54d6335bc33e5f1b9f8613501c7f35cd99f44bf462d540d6b30d8/aiohttp-3.14.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:aac1b05fc5e2ef188b6d74cf151e977db75ab281238f30c3163bbd6f797788e3", size = 1691747, upload-time = "2026-07-20T19:49:54.495Z" }, + { url = "https://files.pythonhosted.org/packages/f1/98/a0d751d3787f2ca457beb16de5774a24e53fab840a8c7cb727cf900ed301/aiohttp-3.14.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:89120e926c68c4e60c78514d76e16fc15689d8df35843b2a6bf6c4cc0d64b11a", size = 1735039, upload-time = "2026-07-20T19:49:56.269Z" }, + { url = "https://files.pythonhosted.org/packages/ea/7a/33b8a5d348abc7335de33f4332ec0dcedfc7d45db28fd2162802d306345d/aiohttp-3.14.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:82d14d66d6147441b6571833405c828980efc17bda98075a248104ffdd330c30", size = 1577209, upload-time = "2026-07-20T19:49:57.926Z" }, + { url = "https://files.pythonhosted.org/packages/a9/03/09d41c3866e2102e6679e49fd78cd928926326fd304fa4e6f1d155f8ba04/aiohttp-3.14.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6cde463b9dd9ce4343785c5a39127b40fce059ae6fbd320f5a045a38c3d25cd0", size = 1751303, upload-time = "2026-07-20T19:49:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/eb/53/72115db0f3e4490b6c0cb063709d7553a1661ec03532b1b2f891e841af1b/aiohttp-3.14.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2280d165ab38355144d9984cdce77ce506cee019a07390bab7fd13682248ce91", size = 1699526, upload-time = "2026-07-20T19:50:01.328Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c6/9b8964be6d8d67dcf4bf32ff2380c203380322b1e23b5c1aa122c9b5a740/aiohttp-3.14.2-cp310-cp310-win32.whl", hash = "sha256:5e94a8c4445bfdaa30773c81f2be7f129673e0f528945e542b8bd024b2979134", size = 456626, upload-time = "2026-07-20T19:50:02.79Z" }, + { url = "https://files.pythonhosted.org/packages/bf/10/8dcdbbd9d83103db95ff74b255105113c1f6983865446f4facef81f0a1eb/aiohttp-3.14.2-cp310-cp310-win_amd64.whl", hash = "sha256:65cd3bb118f42fceceb9e8a615c735a01453d019c673f35c57b420601cc1a83a", size = 480367, upload-time = "2026-07-20T19:50:04.284Z" }, + { url = "https://files.pythonhosted.org/packages/14/08/b6eb0532f5ec2b202980c2d9658dd8ee3a1e21cdd0cb9d01debc0ba40045/aiohttp-3.14.2-cp310-cp310-win_arm64.whl", hash = "sha256:2a382aa6bb85347515ead043257445baeec0885d42bfedb962093b134c3b4816", size = 453374, upload-time = "2026-07-20T19:50:05.953Z" }, + { url = "https://files.pythonhosted.org/packages/f6/4a/a6c1426d2fb3cddd901575436803733caaaeb7ac0a49aa72d1930d2e3ab6/aiohttp-3.14.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56432ee8f7abe47c97717cfbf5c32430463ea8a7138e12a87b7891fa6084c8ff", size = 764168, upload-time = "2026-07-20T19:50:07.389Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/88ae65afc3590719788cbff3b2e0f56e6850f53ca34114cbb371e677c543/aiohttp-3.14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6c244f7a65cbec04c830a301aae443c529d4dbca5fddfd4b19e5a179d896adfd", size = 516255, upload-time = "2026-07-20T19:50:08.84Z" }, + { url = "https://files.pythonhosted.org/packages/8f/bc/ad9b767785b014f2f57497a2ccf67e3d4316d153f7ed1c7715fbbd7573fe/aiohttp-3.14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c05afdd28ecacce5a1f63275a2e3dce09efddd3a63d143ee9799fda83989c8d", size = 514670, upload-time = "2026-07-20T19:50:10.325Z" }, + { url = "https://files.pythonhosted.org/packages/48/94/697aef63f15ef354f64723eaac6ccfb289d59b99699b3b7cb1ff663b2045/aiohttp-3.14.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a57f39d6ec155932853b6b0f130cbbafab3208240fa807f29a2c96ea52b77ae1", size = 1780650, upload-time = "2026-07-20T19:50:11.676Z" }, + { url = "https://files.pythonhosted.org/packages/99/f9/6a1994c1bf138403cf10171cb618571a330ae5683a5803b1ef29b5723d7f/aiohttp-3.14.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1fc31339824ec922cb7424d624b5b6c11d8942d077b2585e5bd602ca1a1e27ed", size = 1737710, upload-time = "2026-07-20T19:50:13.401Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ba/abe8d5015148b2cd7189473789461058dcf88ae202d4cf1cbecaf291a7ef/aiohttp-3.14.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d93854e215dcc7c88e4f530827193c1a594e2662931d8dbe7cca3abf52a7082d", size = 1845568, upload-time = "2026-07-20T19:50:15.168Z" }, + { url = "https://files.pythonhosted.org/packages/c2/89/98a2688810f469f19f2d02a298426a37b6e1cc420230a8cc7d6c85af7a01/aiohttp-3.14.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87c9b03be0c18c3b3587be979149830381e37ac4a6ca8557dbe72e44fcad66c3", size = 1928485, upload-time = "2026-07-20T19:50:16.922Z" }, + { url = "https://files.pythonhosted.org/packages/5a/fd/c980f64f5e5bff22f07968bcc6af1b64167dfd21dbbffda86f2d153fc802/aiohttp-3.14.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc1a0793dce8fa9bb6906411e57fb18a2f1c31357b04172541b92b30337362a7", size = 1786216, upload-time = "2026-07-20T19:50:18.598Z" }, + { url = "https://files.pythonhosted.org/packages/da/80/c710ce9c7f22fcbb83366aa64a5ccf03dced35ab09a6e37545656a6df01e/aiohttp-3.14.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2f1b9540d2d0f2f95590528a1effd0ba5370f6ec189ac925e70b5eecae02dc77", size = 1636921, upload-time = "2026-07-20T19:50:20.201Z" }, + { url = "https://files.pythonhosted.org/packages/e1/b2/56ce1b0c535d188ef94c05bccbf3f5b1aaea1231fcb073318977bdd917e9/aiohttp-3.14.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c0a968b04fecf7c94e502015860ad1e2e112c6b761e97b6fdf65fbb374e22b73", size = 1753040, upload-time = "2026-07-20T19:50:21.857Z" }, + { url = "https://files.pythonhosted.org/packages/86/61/4318a947139a21d4e1a40e7f5a92799d0fe28feffaca6640a4a165e62b0e/aiohttp-3.14.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2d2eedae227cd5cbd0bccc5e759f71e1af2cd77b7f74ce413bb9a2b87f94a272", size = 1760811, upload-time = "2026-07-20T19:50:23.623Z" }, + { url = "https://files.pythonhosted.org/packages/81/b0/2012165377d029ceb925c9e5f42b0b30a39d89cf7e494c4100f3ab8d27c6/aiohttp-3.14.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9d3f4c68b2c2cd282b65e558cebf4b27c8b440ab511f2b938a643d3598df2ddb", size = 1819760, upload-time = "2026-07-20T19:50:25.34Z" }, + { url = "https://files.pythonhosted.org/packages/16/e5/1de93ba3bc18edb87f71594326bedafdc38fe725da8118b7d36fd56610f8/aiohttp-3.14.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:d32a70b8bf8836fd80d4169d9e34eb032cd2a7cbccb0b9cf00eac1f40732467c", size = 1628145, upload-time = "2026-07-20T19:50:26.992Z" }, + { url = "https://files.pythonhosted.org/packages/66/8f/adc9e8592449ee08f72fcce94b7f3f1a9bbf0591a46026e4d322e5a70d7a/aiohttp-3.14.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:386ce4e709b4cc40f9ef9a132ad8e672d2d164a65451305672df656e7794c68e", size = 1832577, upload-time = "2026-07-20T19:50:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/9b/7f/700500700513b1b63967a24c4e189aad377e18f9d67b7387b3418d6213cb/aiohttp-3.14.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc0ed30b942c3bd755583d74bb00b90248c067d20b1f8301e4489a53a33aa65f", size = 1774814, upload-time = "2026-07-20T19:50:30.144Z" }, + { url = "https://files.pythonhosted.org/packages/a5/d6/580f9b2ab4c78d9fbf9d56c85fb7f7d4d22d667b27df8032ab9bf7140e37/aiohttp-3.14.2-cp311-cp311-win32.whl", hash = "sha256:b5ed2c7dacebf4950d6b4a1b22548e4d709bb15e0287e064a7cdb32ada65893a", size = 455968, upload-time = "2026-07-20T19:50:31.722Z" }, + { url = "https://files.pythonhosted.org/packages/96/76/33665ae48e24e01c6dfa15ed14d9d9eec1349577cef497f3b26210621f0a/aiohttp-3.14.2-cp311-cp311-win_amd64.whl", hash = "sha256:bf7951959a8e89f2d4a1e719e60d3ea4e8fc26f011ee3aed09598ad786b112f7", size = 480978, upload-time = "2026-07-20T19:50:33.299Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/00963031da42bd23716032f57b2a8414c5355eb1abc41805b2b41173040c/aiohttp-3.14.2-cp311-cp311-win_arm64.whl", hash = "sha256:c167127a3b6089ef78ac2e33582c38040d51688ee28474b5053acf55f192187b", size = 452900, upload-time = "2026-07-20T19:50:35.049Z" }, + { url = "https://files.pythonhosted.org/packages/e0/99/8737b10b6fa447371541a3b2cdbf9703c31ecf3afff4998f2f0633646a57/aiohttp-3.14.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:30e41662123806e4590a0440585122ac33c89a2465a8be81cc1b50656ca0e432", size = 754562, upload-time = "2026-07-20T19:50:36.672Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e5/fd624b8b46d99dfd8f7f75111569b5ee21850539e914eed04ce39e4455ea/aiohttp-3.14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dbc45e2773c66d14fbd337754e9bf23932beef539bd539716a721f5b5f372034", size = 509386, upload-time = "2026-07-20T19:50:38.268Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a8/473db85d08b862724c506b51af2b9c6327e9e95cbd297c4c6f33968be1a8/aiohttp-3.14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:476cf7fac10619ad6d08e1df0225d07b5a8d57c04963a171ad845d5a349d47ef", size = 511905, upload-time = "2026-07-20T19:50:39.862Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e8/aa5ebff13ac5e39ffae8add143757e936d1c2ceb726b82786e5f5cb9912c/aiohttp-3.14.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40bedff39ea83185f3f98a41155dd9da28b365c432e5bd90e7be140bcef0b7f3", size = 1764968, upload-time = "2026-07-20T19:50:41.559Z" }, + { url = "https://files.pythonhosted.org/packages/f4/22/23ec6d3d3f24f5961c7be73d5127481c992d6c92ca213f336ed8f0ff1453/aiohttp-3.14.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a26f14006883fc7662e21041b4311eac1acbc977a5c43aacb27ff17f8a4c28b2", size = 1740635, upload-time = "2026-07-20T19:50:43.363Z" }, + { url = "https://files.pythonhosted.org/packages/a0/7b/f8966d2d08f0582525ef02d5af007d2d2467cb733abf1d1f7849a02a6b98/aiohttp-3.14.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:673217cbc9370ebf8cd048b0889d7cbe922b7bb48f4e4c02d31cfefa140bd946", size = 1810447, upload-time = "2026-07-20T19:50:45.258Z" }, + { url = "https://files.pythonhosted.org/packages/39/f5/239f2a828b033ac244237074db7b560ad3279bb1e934bb462dbde19f3877/aiohttp-3.14.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b39dbdbe30a44958d63f3f8baa2af68f24ec8a631dcd18a33dd76dfa2a0eb917", size = 1905896, upload-time = "2026-07-20T19:50:47.022Z" }, + { url = "https://files.pythonhosted.org/packages/6c/6e/fb84b8dafc521026355aadbeed484fc1ec44a05aae927de309f204c1f0af/aiohttp-3.14.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d15f618255fcbe5f54689403aa4c2a90b6f2e6ebc96b295b1cb0e868c1c12384", size = 1792052, upload-time = "2026-07-20T19:50:48.683Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c4/25b199009f164ee02599b9b0962d22e6533d212418e49df9f4fdb37fe2eb/aiohttp-3.14.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ae767b7dffd316cc2d0abf3e1f90132b4c1a2819a32d8bcb1ba749800ea6273", size = 1590939, upload-time = "2026-07-20T19:50:50.702Z" }, + { url = "https://files.pythonhosted.org/packages/ad/f5/96d7540a52620433db3822267008a1697fc816979c109a4f535855ac893c/aiohttp-3.14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3ec4b6501a076b2f73844256da17d6b7acb15bb74ee0e908a67feb9412371166", size = 1725039, upload-time = "2026-07-20T19:50:52.506Z" }, + { url = "https://files.pythonhosted.org/packages/f6/50/1a06abbeec14a2bcb46124ca6e281ed4ccb3e9006542ded6bc89a0ce5224/aiohttp-3.14.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7e328d02fb46b9a8dbfa070d98967e8b7eaa1d9ee10ae03fb664bdf30d58ccf0", size = 1764748, upload-time = "2026-07-20T19:50:54.336Z" }, + { url = "https://files.pythonhosted.org/packages/70/5d/b8821b362306627ea8ca11fe49ec47cba18e7c75d975fa5f6710ad93845c/aiohttp-3.14.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c7f2e5fe10910d5ab76438f269cc41bb7e499fd48ded978e926360ab1790c8", size = 1777119, upload-time = "2026-07-20T19:50:56.306Z" }, + { url = "https://files.pythonhosted.org/packages/81/e5/805d9d49e66c6358574ad70dd731031585d18fe95ae65b857bc378bccc9a/aiohttp-3.14.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:66de80888db2176655f8df0b705b817f5ae3834e6566cc2caa89360871d90195", size = 1580047, upload-time = "2026-07-20T19:50:58.316Z" }, + { url = "https://files.pythonhosted.org/packages/c6/fa/1536f272d5ad93bf8b75043b02b94c24bf4e6b55a849d3287553ad6da97e/aiohttp-3.14.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f2f9950b2dd0fc896ab520ea2366b7df6484d3d164a65d5e9f28f7b0e5742d8a", size = 1796861, upload-time = "2026-07-20T19:51:00.373Z" }, + { url = "https://files.pythonhosted.org/packages/e6/f3/86dfd6152bb706351cf5c6b45f0f6a1818a4e559d1e88d899c4c673c23a8/aiohttp-3.14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cc4435b16dc246c5dfa7f2f8ee71b10a30765018a090ee36e99f356b1e9b75cc", size = 1768687, upload-time = "2026-07-20T19:51:02.214Z" }, + { url = "https://files.pythonhosted.org/packages/57/af/14b98e07fcd1a2b37ebb2f950309821eaa56e0eac3d32fc23dc55227e49b/aiohttp-3.14.2-cp312-cp312-win32.whl", hash = "sha256:4ca802547f1128008addfc21b24959f5cbf30a8952d365e7daa078a0d884b242", size = 451437, upload-time = "2026-07-20T19:51:03.954Z" }, + { url = "https://files.pythonhosted.org/packages/38/20/8478c05702a369b6d0800e40e0c5f9a289ff482d0921faec1eb17727339d/aiohttp-3.14.2-cp312-cp312-win_amd64.whl", hash = "sha256:e5efff8bfd27c44ce1bfdf92ce838362d9316ed8b2ed2f89f581dbe0bbe05acf", size = 476776, upload-time = "2026-07-20T19:51:05.705Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d0/e550bb1cb4fc82de3bdbe2add061cc0cedb34f2e7f01ada78fba94493ca1/aiohttp-3.14.2-cp312-cp312-win_arm64.whl", hash = "sha256:0eb1c9fd51f231ac8dc9d5824d5c2efc45337d429db0123fa9d4c20f570fdfc3", size = 447928, upload-time = "2026-07-20T19:51:07.523Z" }, + { url = "https://files.pythonhosted.org/packages/96/3a/8b8779f8e813d3a33cf16bc836a7ea7bf3c27b6588d42efa36b0c32fcb58/aiohttp-3.14.2-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:17eecd6ee9bfc8e31b6003137d74f349f0ac3797111a2df87e23acb4a7a912ea", size = 506205, upload-time = "2026-07-20T19:51:09.215Z" }, + { url = "https://files.pythonhosted.org/packages/d1/73/2f45204b37ecc4ce2c54b8b67254d70a8ea3b629c4083d58f3e2d27991cb/aiohttp-3.14.2-cp313-cp313-android_21_x86_64.whl", hash = "sha256:ce8dfb58f012f76258f29951d38935ac928b32ae24a480f30761f2ed5036fa78", size = 515116, upload-time = "2026-07-20T19:51:10.914Z" }, + { url = "https://files.pythonhosted.org/packages/f0/22/8f4424de1f50df4fbb74ea32006f9cff798ae0d346ffa6be7b6f0caca719/aiohttp-3.14.2-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:4181d72e0e6d1735c1fae56381193c6ae211d584d06413980c00775b9b2a176a", size = 486244, upload-time = "2026-07-20T19:51:12.878Z" }, + { url = "https://files.pythonhosted.org/packages/c2/53/60de022260f5d2d31976bc5f50db708e10671f0ac5da515402adcc6b4d4d/aiohttp-3.14.2-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:0e56babe35076f69ec9327833b71439eeccd10f51fe56c1a533da8f24923f014", size = 492260, upload-time = "2026-07-20T19:51:14.555Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6f/d3ccc31c15cd33888670b8f1bf1dc06f3239b4edd156fc818078e87ae628/aiohttp-3.14.2-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6b63709e259e3b3d7922b235606564e91ed4c224e777cc0ca4cae04f5f559206", size = 502174, upload-time = "2026-07-20T19:51:16.3Z" }, + { url = "https://files.pythonhosted.org/packages/40/20/52d21e485652f4708015ce27dd3029e63140e0bdb0dcc7bf72dc0bc3f4ad/aiohttp-3.14.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f7c10c4d0b33888a68c192d883d1390d4596c116a59bf689e6d352c6739b7940", size = 750878, upload-time = "2026-07-20T19:51:18.013Z" }, + { url = "https://files.pythonhosted.org/packages/2e/49/1220bdc73d568431cc3856667405d78c2e95eb57fed2b9ffa5e825932ab2/aiohttp-3.14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f7b19e27b78a3a927b1932af93af7645806153e8f541cee8fe856426142503f", size = 508459, upload-time = "2026-07-20T19:51:19.876Z" }, + { url = "https://files.pythonhosted.org/packages/ed/f1/39177406ce0ae5cb2782b35e848c0edf6e09d6e082df636eeacdbdfa70bd/aiohttp-3.14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:18fcc3a5cc7dde1d8f7903e309055294c28894c9434588645817e374f3b83d03", size = 509179, upload-time = "2026-07-20T19:51:21.719Z" }, + { url = "https://files.pythonhosted.org/packages/87/f7/6d081c2ee838458492c7ae1062399bdd68f149811d257d4502e79a25b306/aiohttp-3.14.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09d1b0deec698d1198eb0b8f910dd9432d856985abbfea3f06be8b296a6619b4", size = 1761346, upload-time = "2026-07-20T19:51:23.437Z" }, + { url = "https://files.pythonhosted.org/packages/1d/ed/0befea4ae533f09c3a60f0d10b923cd4a90027a1bf49dfafaa24eeee08b8/aiohttp-3.14.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cabaaecb4c6888bd9abafac151051377534dad4c3859a386b6325f39d3732f99", size = 1735057, upload-time = "2026-07-20T19:51:25.512Z" }, + { url = "https://files.pythonhosted.org/packages/de/03/c1d89fcd94907f93a08d4aadbb4e1d9bd3d7d6c9f94bc9c17689de38107b/aiohttp-3.14.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:114299c08cce8ad4ebb21fafe766378864109e88ad8cf63cf6acb384ff844a57", size = 1800389, upload-time = "2026-07-20T19:51:27.585Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8b/edbac4d1a1cde3571588a1e5b40637df5acee43158efdf3ae9a161fde8ab/aiohttp-3.14.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6bea8451e26cd67645d9b2ee18232e438ddfc36cea35feecb4537f2359fc7030", size = 1895342, upload-time = "2026-07-20T19:51:29.794Z" }, + { url = "https://files.pythonhosted.org/packages/0c/31/2e9ca3b21c07ea8a001e2b142cb01401fd34fd07b248a0b95a04c3ebc4ec/aiohttp-3.14.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46b8887aa303075c1e5b24123f314a1a7bbfa03d0213dff8bb70503b2148c853", size = 1789175, upload-time = "2026-07-20T19:51:31.744Z" }, + { url = "https://files.pythonhosted.org/packages/6f/91/b57d3d13a80fbf765b19ae0c38d783a3a23f35b1cb82ae3b22f91abe6c24/aiohttp-3.14.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:de3b04a3f7b40ad7f1bcd3540dd447cf9bd93d57a49969bca522cbcf01290f08", size = 1586845, upload-time = "2026-07-20T19:51:33.571Z" }, + { url = "https://files.pythonhosted.org/packages/69/e8/a2f5f9f6219cd21190e9b50e2cbc978d12a2aab748d0aa7c6ee930db15c3/aiohttp-3.14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:42372e1f1a8dca0dcd5daf922849004ec1120042d0e24f14c926f97d2275ca79", size = 1724839, upload-time = "2026-07-20T19:51:35.518Z" }, + { url = "https://files.pythonhosted.org/packages/de/d4/a2b9442336051714dd8dbd419b9f4a1003c45bb850ee0f3af87f2743e867/aiohttp-3.14.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:7871c94f3400358530ac4906dd7a526c5a24099cd5c48f53ffc4b1cb5037d7d7", size = 1756306, upload-time = "2026-07-20T19:51:37.459Z" }, + { url = "https://files.pythonhosted.org/packages/ab/93/22c94a599b2c4ea6ab88f1b912d90883f1fba5235b587ea9f13b148e9a0f/aiohttp-3.14.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f8f371794319a8185e61e15ba5e1be8407b986ebce1ade11856c02d24e090577", size = 1769133, upload-time = "2026-07-20T19:51:39.9Z" }, + { url = "https://files.pythonhosted.org/packages/fe/db/a4e4c207f7023e83c281a7cf3579f227bade48f1899cb6588c0ed6ae54de/aiohttp-3.14.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:af63ac06bad85191e6a0c4a733cb3c55adb99f8105bc7ce9913391561159a49a", size = 1578671, upload-time = "2026-07-20T19:51:42.418Z" }, + { url = "https://files.pythonhosted.org/packages/8d/6f/33746ba4947b8193652fc7ed0533e09f93b118e39777228f3029e5677c17/aiohttp-3.14.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:8c2cdb684c153f377157e856257ee8535c75d8478343e4bb1e83ca73bdfa3d31", size = 1791778, upload-time = "2026-07-20T19:51:44.298Z" }, + { url = "https://files.pythonhosted.org/packages/06/41/323856cb0ec9076b1f9a135eb0684f5f984dd97989a087873768aa34ca2f/aiohttp-3.14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ceff4f84c1d928654faa6bcb0437ed095b279baae2a35fcfe5a3cbe0d8b9725d", size = 1768490, upload-time = "2026-07-20T19:51:46.279Z" }, + { url = "https://files.pythonhosted.org/packages/39/f0/09e29e457b6fb49253cbb61354ed2541fdf23ac192bddbb57bb34bc93d9c/aiohttp-3.14.2-cp313-cp313-win32.whl", hash = "sha256:15292b08ce7dd45e268fce542228894b4735102e8ee77163bd665b35fc2b5598", size = 451064, upload-time = "2026-07-20T19:51:48.194Z" }, + { url = "https://files.pythonhosted.org/packages/0b/76/b44703eafcfe1446f4f975be1ef2406042955425eaf56450e71b50506c49/aiohttp-3.14.2-cp313-cp313-win_amd64.whl", hash = "sha256:fc2d8e7373ceba7e1c7e9dc00adac854c2701a6d443fd21d4af2e49342d727bd", size = 476140, upload-time = "2026-07-20T19:51:50.285Z" }, + { url = "https://files.pythonhosted.org/packages/72/48/b095935c9e72a253439f80ec757b91d4733e0a9a98b63e108d84aaf39b08/aiohttp-3.14.2-cp313-cp313-win_arm64.whl", hash = "sha256:70570f50bda5037b416db8fcba595cf808ecf0fdce12d64e850b5ae1db7f64d4", size = 447585, upload-time = "2026-07-20T19:51:52.333Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ca/716f720dccc3032e40dc80d0ab2d87a7365270a714976a85bdff73bc7254/aiohttp-3.14.2-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:7719cef2a9dc5e10cd5f476ec1744b25c5ac4da733a9a687d91c42de7d4afe30", size = 508899, upload-time = "2026-07-20T19:51:54.165Z" }, + { url = "https://files.pythonhosted.org/packages/f5/80/786166589e71b3f3cfce56b414170fe5008462d0bff100bd8837285632f6/aiohttp-3.14.2-cp314-cp314-android_24_x86_64.whl", hash = "sha256:3523ec0cc524a413699f25ec8340f3da368484bc9d5f2a1bf87f233ac20599bf", size = 514722, upload-time = "2026-07-20T19:51:56.208Z" }, + { url = "https://files.pythonhosted.org/packages/eb/b7/539961cf3e3d3f179ea4b20d456cbdb67d1163c68f2e95bf220438a5afd5/aiohttp-3.14.2-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:c8ab295ee58332ef8fbd62727df90540836dfcf7a61f545d0f2771223b80bf25", size = 488082, upload-time = "2026-07-20T19:51:58.293Z" }, + { url = "https://files.pythonhosted.org/packages/60/34/c7708eac8edacca9c049a0d6f5fa610005ac3c5634c9ea4751134263bf4e/aiohttp-3.14.2-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:71501bc03ede681401269c569e6f9306c761c1c7d4296675e8e78dd07147070f", size = 494140, upload-time = "2026-07-20T19:52:00.158Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e1/076b88de36b4ebea62d1c0b225e32bc8a452ee71b2aded82878fa5fa7c9e/aiohttp-3.14.2-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:052478c7d01035d805302db50c2ef626b1c1ba0fe2f6d4a22ae6eaeb43bf2316", size = 502670, upload-time = "2026-07-20T19:52:02.097Z" }, + { url = "https://files.pythonhosted.org/packages/a9/71/7b7720ffe7e521aaa79a853ebff4c17937f4b5a3a586e9d13b0f38050b35/aiohttp-3.14.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:b0d49be9d9a210b2c993bf32b1eda03f949f7bcda68fc4f718ae8085ae3fb4b8", size = 756406, upload-time = "2026-07-20T19:52:04.082Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9a/c67c7e22fff7d7b17387e718451b30eb89f55df6b8d13d2d7f91daba6505/aiohttp-3.14.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5fe25c4c44ea5b56fd4512e2065e09384987fc8cc98e41bc8749efe12f653abb", size = 510106, upload-time = "2026-07-20T19:52:06.001Z" }, + { url = "https://files.pythonhosted.org/packages/27/2a/3caebd640229663263585d4d31898331a3937752f2e1f5ec0af509fa31be/aiohttp-3.14.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7e254b0d636957174a03ca210289e867a62bb9502081e1b44a8c2bb1f6266ecd", size = 512876, upload-time = "2026-07-20T19:52:08.036Z" }, + { url = "https://files.pythonhosted.org/packages/27/04/86945210e491493f5cd025efe5e6d8fc8a9e8aaf36f943c40f52c34eda7e/aiohttp-3.14.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6b0ce033d49dd3c6a2566b387e322a9f9029110d67902f0d64571c0fd4b73d8", size = 1750050, upload-time = "2026-07-20T19:52:09.998Z" }, + { url = "https://files.pythonhosted.org/packages/11/d8/356c62552b4db60af5ad8cddeafa6f837788918201f1b5f2466565c986b5/aiohttp-3.14.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:41b5b66b1ac2c48b61e420691eb9741d17d9068f2bc23b5ee3e750faa564bc8f", size = 1707177, upload-time = "2026-07-20T19:52:12.39Z" }, + { url = "https://files.pythonhosted.org/packages/77/2d/41bb20bed3df1d6dc7fc231ca4ffb72177fd151bf4205a4ade7a93e03501/aiohttp-3.14.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30a5ed81f752f182961237414a3cd0af209c0f74f06d66f66f9fcb8964f4978d", size = 1803795, upload-time = "2026-07-20T19:52:14.705Z" }, + { url = "https://files.pythonhosted.org/packages/63/21/ad9fe6786a1d2758bcfdae4dbc1d6869ffc7b1e0571530a508de3cdde09b/aiohttp-3.14.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b9251f43d78ff675c0ddfcd53ba61abecc1f74eedc6287bb6657f6c6a033fe7", size = 1876539, upload-time = "2026-07-20T19:52:16.965Z" }, + { url = "https://files.pythonhosted.org/packages/0e/cb/d213f4fd7af279d82c4b46d30de22db93a01296d77a8d8e535289637da54/aiohttp-3.14.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf7930e83a12801b2e253d41cc8bf5553f61c0cfabef182a72ae13472cc81803", size = 1761130, upload-time = "2026-07-20T19:52:19.127Z" }, + { url = "https://files.pythonhosted.org/packages/46/4f/0792fe1a24c2b4b506d07350e980b0626c149fe73e68dd37dfb30ed89813/aiohttp-3.14.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:abb33120daba5e5643a757790ece44d638a5a11eb0598312e6e7ec2f1bd1a5a3", size = 1583576, upload-time = "2026-07-20T19:52:21.465Z" }, + { url = "https://files.pythonhosted.org/packages/46/ad/551c302f534f9cd6105bd16902e69dc64c726aa729127203f47ed4bddb2a/aiohttp-3.14.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:983a68048a48f35ed08aadfcc1ba55de9a121aa91be48a764965c9ec532b94b5", size = 1714139, upload-time = "2026-07-20T19:52:23.636Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cf/a3be8601d2e80ccf7bd4f79807629cede5425d72c02636f06b1ad6a8290a/aiohttp-3.14.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:fef094bfc2f4e991a998af066fc6e3956a409ef799f5cbad2365175357181f2e", size = 1724352, upload-time = "2026-07-20T19:52:26.043Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b1/6b55f6448b43a3338749f37fc6a14e7ac7dad121d2d585f22c1dd3d324fe/aiohttp-3.14.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2f7ca81d936d820ae479971a6b6214b1b867420b5b58e54a1e7157716a943754", size = 1770749, upload-time = "2026-07-20T19:52:28.467Z" }, + { url = "https://files.pythonhosted.org/packages/39/58/b3f1cf6af47fa0b0d51c6e2b98b2bf0326b44a932d74915f3c0874413ea8/aiohttp-3.14.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:da4f142fa078fedbdb3f88d0542ad9315656224e167502ae274cbba818b90c90", size = 1577547, upload-time = "2026-07-20T19:52:30.658Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e2/1d79f1ab35593d70dabed98936ae842ac90d12847c9a62bba4a19d6005a4/aiohttp-3.14.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:3d4238e50a378f5ac69a1e0162715c676bd082dede2e5c4f67ca7fd0014cb09d", size = 1781840, upload-time = "2026-07-20T19:52:33.021Z" }, + { url = "https://files.pythonhosted.org/packages/01/73/770be856c6fc861563999081a5fe2d44e16b4255f5fd94b2217a2349ca65/aiohttp-3.14.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:03330676d8caa28bb33fa7104b0d542d9aac93350abcd91bf68e64abd531c320", size = 1745757, upload-time = "2026-07-20T19:52:35.541Z" }, + { url = "https://files.pythonhosted.org/packages/bc/0b/861fdbe3ff90b503a4d0a12276623f4afbe54c237ca876fc560125c270a3/aiohttp-3.14.2-cp314-cp314-win32.whl", hash = "sha256:43387429e4f2ec4047aaf9f935db003d4aa1268ea9021164877fd6b012b6396a", size = 455863, upload-time = "2026-07-20T19:52:37.634Z" }, + { url = "https://files.pythonhosted.org/packages/f7/03/cc8234d0f06fe4b0e1777c7ed313cc9014f078f72a9a0cbdc144965d1bd7/aiohttp-3.14.2-cp314-cp314-win_amd64.whl", hash = "sha256:e3a6302f47518dbf2ffd3cd518f02a1fbf53f85ffeed41a224fa4a6f6a62673b", size = 480986, upload-time = "2026-07-20T19:52:39.665Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b0/ae17dd629e22160f453b9041a4aee80a8a917ba2f44d5b3e252cc501ed2c/aiohttp-3.14.2-cp314-cp314-win_arm64.whl", hash = "sha256:8d1f3802887f0e0dc07387a081dca3ad0b5758e32bdf5fb619b12ac22b8e9b56", size = 453588, upload-time = "2026-07-20T19:52:41.634Z" }, + { url = "https://files.pythonhosted.org/packages/30/54/4bbcc00f04dbc380103ee669a56df30dea127c3686c8dc2ab86b05a1387b/aiohttp-3.14.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9094262ae4f2902c7291c14ba915960db5567276690ef9195cdefe8b7cbb3acb", size = 791337, upload-time = "2026-07-20T19:52:43.821Z" }, + { url = "https://files.pythonhosted.org/packages/e7/37/4f95edc1488580c63c0b5baaef429afbacadc7ccd9c47431cdcce90d9e5a/aiohttp-3.14.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:165b0dcc65960ffc9c99aa4ba1c3c76dbc7a34845c3c23a0bd3fbf33b3d12569", size = 526335, upload-time = "2026-07-20T19:52:45.903Z" }, + { url = "https://files.pythonhosted.org/packages/c3/ed/1d7ae73764d135638797a427cb637ae3d98f1fd61208c25891a9f26cdd67/aiohttp-3.14.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f518d75c03cd3f7f125eca1baadb56f8b94db94602278d2d0d19af6e177650a7", size = 532102, upload-time = "2026-07-20T19:52:47.994Z" }, + { url = "https://files.pythonhosted.org/packages/e3/12/da9816eee0d81506560259e7c0af93a4aa7df98acd0fe276958abd42d7c3/aiohttp-3.14.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b937d7864ca68f1e8a1c3a4eb2bac1de86a992f86d36492da10a135a482fab6", size = 1922727, upload-time = "2026-07-20T19:52:50.224Z" }, + { url = "https://files.pythonhosted.org/packages/2f/b9/d7ccbcde223a72c7b8f3458bdb08c2bacf5fc268a1fdd5cc29861eb0e4e2/aiohttp-3.14.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b155df7f572c73c6c4108b67be302c8639b96ae56fb02787eeae8cad0a1baf26", size = 1787202, upload-time = "2026-07-20T19:52:52.825Z" }, + { url = "https://files.pythonhosted.org/packages/c2/7c/39174069b7df18ea22b23a0fa9abffe4c091f0f86d53af83ddcbb5f44c8f/aiohttp-3.14.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0bfea68a48c8071d49aabdf5cd9a6939dcb246db65730e8dc76295fe02f7c73c", size = 1912574, upload-time = "2026-07-20T19:52:55.007Z" }, + { url = "https://files.pythonhosted.org/packages/21/ff/bd2b7473510caf352aef3f52a3d4fe10184ec22747df74ab658b4402020f/aiohttp-3.14.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8241ee6c7fff3ebb1e6b237bccc1d90b46d07c06cf978e9f2ecad43e29dac67a", size = 2005478, upload-time = "2026-07-20T19:52:57.401Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ee/db26af0acc994350b653b3a73dddf9ee9886bf2fdb68b23fc98705e76442/aiohttp-3.14.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec64d1c4605d689ed537ba1e572138e2d4ff603a0cb2bbbfe61d4552c73d19e1", size = 1879709, upload-time = "2026-07-20T19:52:59.778Z" }, + { url = "https://files.pythonhosted.org/packages/6a/4d/592451fd40edca73fcb099d8718668cea36dc1dde873dd0f8e91a4081051/aiohttp-3.14.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0fb26fcc5ebf765095fe0c6ab7501574d3108c57fca9a0d462be15a65c9deb8d", size = 1675699, upload-time = "2026-07-20T19:53:02.11Z" }, + { url = "https://files.pythonhosted.org/packages/2a/3e/c1ce4aa13fd1f910e437684843ea6cf6e0041f91d89a1b0389dce247ee59/aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ef710fbb770aefa4def5484eeddb606e70ab3492aa37390def61b35652f6820a", size = 1843542, upload-time = "2026-07-20T19:53:04.385Z" }, + { url = "https://files.pythonhosted.org/packages/aa/a4/3f9e22fda714cc38ef558166ff3326cd2f6f65c33da92ba00e3641cbea54/aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d813f54560b9e5bce170fff7b0adde54d88253928e4add447c36792f27f92125", size = 1827505, upload-time = "2026-07-20T19:53:07.072Z" }, + { url = "https://files.pythonhosted.org/packages/37/9d/260c7b8a25c7cd74bee63ce957556a2d25839a321e9107a089d4da3a51af/aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:1aa4f3b44563a88da4407cef8a13438e9e386967720a826a10a633493f69208f", size = 1853751, upload-time = "2026-07-20T19:53:10.012Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d6/7c3cfa191e666bf7b48b4346815900b35b85b43ffff783fd0be52e45fe09/aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4610638d3135afaefadf179bffd1bbf3434d3dc7a5d0a4c4219b99fa976e944d", size = 1668850, upload-time = "2026-07-20T19:53:12.362Z" }, + { url = "https://files.pythonhosted.org/packages/c4/af/d9b8353aee9506dace04ca22c3c4e93b7375d9343c4780c8b512972fc6f9/aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:6e30743bd3ab6ad98e9abbad6ccb39c52bcf6f11f9e3d4b6df97afffe8df53f3", size = 1883642, upload-time = "2026-07-20T19:53:14.664Z" }, + { url = "https://files.pythonhosted.org/packages/ed/29/ed64c0a013322570a02e5b0e359df2cfd30ae58ba045748dc78175f15826/aiohttp-3.14.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:68a6f7cd8d2c70869a2a5fe97a16e86a4e13a6ed6f0d9e6029aef7573e344cd6", size = 1844092, upload-time = "2026-07-20T19:53:16.995Z" }, + { url = "https://files.pythonhosted.org/packages/3c/74/ce6f229510fdd46ee7365fbb759ffaa3004e0bcc59fbd0ec51d8a8efc775/aiohttp-3.14.2-cp314-cp314t-win32.whl", hash = "sha256:205181d896f73436ac60cf6644e545544c759ab1c3ec8c34cc1e044689611361", size = 474098, upload-time = "2026-07-20T19:53:19.645Z" }, + { url = "https://files.pythonhosted.org/packages/72/4c/877c07a6d97a1a0e5e25a06bab76dd7449b533ff8bb6c281c5af8b09c8d9/aiohttp-3.14.2-cp314-cp314t-win_amd64.whl", hash = "sha256:312d414c294a1e26aa12888e8fd37cd2e1131e9c48ddcf2a4c6b590290d52a49", size = 500480, upload-time = "2026-07-20T19:53:22.227Z" }, + { url = "https://files.pythonhosted.org/packages/42/d8/d4c74bb7990da2ee6116fe262ace41cf376ebc6b0bda694c77eeaab5a509/aiohttp-3.14.2-cp314-cp314t-win_arm64.whl", hash = "sha256:63b840c03979732ec92e570f0bd6beb6311e2b5d19cacbfcd8cc7f6dd2693900", size = 469248, upload-time = "2026-07-20T19:53:24.622Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, +] + +[[package]] +name = "async-timeout" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "audioop-lts" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/38/53/946db57842a50b2da2e0c1e34bd37f36f5aadba1a929a3971c5d7841dbca/audioop_lts-0.2.2.tar.gz", hash = "sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0", size = 30686, upload-time = "2025-08-05T16:43:17.409Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/d4/94d277ca941de5a507b07f0b592f199c22454eeaec8f008a286b3fbbacd6/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_universal2.whl", hash = "sha256:fd3d4602dc64914d462924a08c1a9816435a2155d74f325853c1f1ac3b2d9800", size = 46523, upload-time = "2025-08-05T16:42:20.836Z" }, + { url = "https://files.pythonhosted.org/packages/f8/5a/656d1c2da4b555920ce4177167bfeb8623d98765594af59702c8873f60ec/audioop_lts-0.2.2-cp313-abi3-macosx_10_13_x86_64.whl", hash = "sha256:550c114a8df0aafe9a05442a1162dfc8fec37e9af1d625ae6060fed6e756f303", size = 27455, upload-time = "2025-08-05T16:42:22.283Z" }, + { url = "https://files.pythonhosted.org/packages/1b/83/ea581e364ce7b0d41456fb79d6ee0ad482beda61faf0cab20cbd4c63a541/audioop_lts-0.2.2-cp313-abi3-macosx_11_0_arm64.whl", hash = "sha256:9a13dc409f2564de15dd68be65b462ba0dde01b19663720c68c1140c782d1d75", size = 26997, upload-time = "2025-08-05T16:42:23.849Z" }, + { url = "https://files.pythonhosted.org/packages/b8/3b/e8964210b5e216e5041593b7d33e97ee65967f17c282e8510d19c666dab4/audioop_lts-0.2.2-cp313-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d", size = 85844, upload-time = "2025-08-05T16:42:25.208Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2e/0a1c52faf10d51def20531a59ce4c706cb7952323b11709e10de324d6493/audioop_lts-0.2.2-cp313-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b", size = 85056, upload-time = "2025-08-05T16:42:26.559Z" }, + { url = "https://files.pythonhosted.org/packages/75/e8/cd95eef479656cb75ab05dfece8c1f8c395d17a7c651d88f8e6e291a63ab/audioop_lts-0.2.2-cp313-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8", size = 93892, upload-time = "2025-08-05T16:42:27.902Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1e/a0c42570b74f83efa5cca34905b3eef03f7ab09fe5637015df538a7f3345/audioop_lts-0.2.2-cp313-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc", size = 96660, upload-time = "2025-08-05T16:42:28.9Z" }, + { url = "https://files.pythonhosted.org/packages/50/d5/8a0ae607ca07dbb34027bac8db805498ee7bfecc05fd2c148cc1ed7646e7/audioop_lts-0.2.2-cp313-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3", size = 79143, upload-time = "2025-08-05T16:42:29.929Z" }, + { url = "https://files.pythonhosted.org/packages/12/17/0d28c46179e7910bfb0bb62760ccb33edb5de973052cb2230b662c14ca2e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6", size = 84313, upload-time = "2025-08-05T16:42:30.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/ba/bd5d3806641564f2024e97ca98ea8f8811d4e01d9b9f9831474bc9e14f9e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a", size = 93044, upload-time = "2025-08-05T16:42:31.959Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5e/435ce8d5642f1f7679540d1e73c1c42d933331c0976eb397d1717d7f01a3/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623", size = 78766, upload-time = "2025-08-05T16:42:33.302Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3b/b909e76b606cbfd53875693ec8c156e93e15a1366a012f0b7e4fb52d3c34/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7", size = 87640, upload-time = "2025-08-05T16:42:34.854Z" }, + { url = "https://files.pythonhosted.org/packages/30/e7/8f1603b4572d79b775f2140d7952f200f5e6c62904585d08a01f0a70393a/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449", size = 86052, upload-time = "2025-08-05T16:42:35.839Z" }, + { url = "https://files.pythonhosted.org/packages/b5/96/c37846df657ccdda62ba1ae2b6534fa90e2e1b1742ca8dcf8ebd38c53801/audioop_lts-0.2.2-cp313-abi3-win32.whl", hash = "sha256:3bcddaaf6cc5935a300a8387c99f7a7fbbe212a11568ec6cf6e4bc458c048636", size = 26185, upload-time = "2025-08-05T16:42:37.04Z" }, + { url = "https://files.pythonhosted.org/packages/34/a5/9d78fdb5b844a83da8a71226c7bdae7cc638861085fff7a1d707cb4823fa/audioop_lts-0.2.2-cp313-abi3-win_amd64.whl", hash = "sha256:a2c2a947fae7d1062ef08c4e369e0ba2086049a5e598fda41122535557012e9e", size = 30503, upload-time = "2025-08-05T16:42:38.427Z" }, + { url = "https://files.pythonhosted.org/packages/34/25/20d8fde083123e90c61b51afb547bb0ea7e77bab50d98c0ab243d02a0e43/audioop_lts-0.2.2-cp313-abi3-win_arm64.whl", hash = "sha256:5f93a5db13927a37d2d09637ccca4b2b6b48c19cd9eda7b17a2e9f77edee6a6f", size = 24173, upload-time = "2025-08-05T16:42:39.704Z" }, + { url = "https://files.pythonhosted.org/packages/58/a7/0a764f77b5c4ac58dc13c01a580f5d32ae8c74c92020b961556a43e26d02/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:73f80bf4cd5d2ca7814da30a120de1f9408ee0619cc75da87d0641273d202a09", size = 47096, upload-time = "2025-08-05T16:42:40.684Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ed/ebebedde1a18848b085ad0fa54b66ceb95f1f94a3fc04f1cd1b5ccb0ed42/audioop_lts-0.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:106753a83a25ee4d6f473f2be6b0966fc1c9af7e0017192f5531a3e7463dce58", size = 27748, upload-time = "2025-08-05T16:42:41.992Z" }, + { url = "https://files.pythonhosted.org/packages/cb/6e/11ca8c21af79f15dbb1c7f8017952ee8c810c438ce4e2b25638dfef2b02c/audioop_lts-0.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fbdd522624141e40948ab3e8cdae6e04c748d78710e9f0f8d4dae2750831de19", size = 27329, upload-time = "2025-08-05T16:42:42.987Z" }, + { url = "https://files.pythonhosted.org/packages/84/52/0022f93d56d85eec5da6b9da6a958a1ef09e80c39f2cc0a590c6af81dcbb/audioop_lts-0.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:143fad0311e8209ece30a8dbddab3b65ab419cbe8c0dde6e8828da25999be911", size = 92407, upload-time = "2025-08-05T16:42:44.336Z" }, + { url = "https://files.pythonhosted.org/packages/87/1d/48a889855e67be8718adbc7a01f3c01d5743c325453a5e81cf3717664aad/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbbc74ec68a0fd08cfec1f4b5e8cca3d3cd7de5501b01c4b5d209995033cde9", size = 91811, upload-time = "2025-08-05T16:42:45.325Z" }, + { url = "https://files.pythonhosted.org/packages/98/a6/94b7213190e8077547ffae75e13ed05edc488653c85aa5c41472c297d295/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cfcac6aa6f42397471e4943e0feb2244549db5c5d01efcd02725b96af417f3fe", size = 100470, upload-time = "2025-08-05T16:42:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e9/78450d7cb921ede0cfc33426d3a8023a3bda755883c95c868ee36db8d48d/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:752d76472d9804ac60f0078c79cdae8b956f293177acd2316cd1e15149aee132", size = 103878, upload-time = "2025-08-05T16:42:47.576Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e2/cd5439aad4f3e34ae1ee852025dc6aa8f67a82b97641e390bf7bd9891d3e/audioop_lts-0.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:83c381767e2cc10e93e40281a04852facc4cd9334550e0f392f72d1c0a9c5753", size = 84867, upload-time = "2025-08-05T16:42:49.003Z" }, + { url = "https://files.pythonhosted.org/packages/68/4b/9d853e9076c43ebba0d411e8d2aa19061083349ac695a7d082540bad64d0/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c0022283e9556e0f3643b7c3c03f05063ca72b3063291834cca43234f20c60bb", size = 90001, upload-time = "2025-08-05T16:42:50.038Z" }, + { url = "https://files.pythonhosted.org/packages/58/26/4bae7f9d2f116ed5593989d0e521d679b0d583973d203384679323d8fa85/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a2d4f1513d63c795e82948e1305f31a6d530626e5f9f2605408b300ae6095093", size = 99046, upload-time = "2025-08-05T16:42:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/b2/67/a9f4fb3e250dda9e9046f8866e9fa7d52664f8985e445c6b4ad6dfb55641/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c9c8e68d8b4a56fda8c025e538e639f8c5953f5073886b596c93ec9b620055e7", size = 84788, upload-time = "2025-08-05T16:42:52.198Z" }, + { url = "https://files.pythonhosted.org/packages/70/f7/3de86562db0121956148bcb0fe5b506615e3bcf6e63c4357a612b910765a/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:96f19de485a2925314f5020e85911fb447ff5fbef56e8c7c6927851b95533a1c", size = 94472, upload-time = "2025-08-05T16:42:53.59Z" }, + { url = "https://files.pythonhosted.org/packages/f1/32/fd772bf9078ae1001207d2df1eef3da05bea611a87dd0e8217989b2848fa/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e541c3ef484852ef36545f66209444c48b28661e864ccadb29daddb6a4b8e5f5", size = 92279, upload-time = "2025-08-05T16:42:54.632Z" }, + { url = "https://files.pythonhosted.org/packages/4f/41/affea7181592ab0ab560044632571a38edaf9130b84928177823fbf3176a/audioop_lts-0.2.2-cp313-cp313t-win32.whl", hash = "sha256:d5e73fa573e273e4f2e5ff96f9043858a5e9311e94ffefd88a3186a910c70917", size = 26568, upload-time = "2025-08-05T16:42:55.627Z" }, + { url = "https://files.pythonhosted.org/packages/28/2b/0372842877016641db8fc54d5c88596b542eec2f8f6c20a36fb6612bf9ee/audioop_lts-0.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9191d68659eda01e448188f60364c7763a7ca6653ed3f87ebb165822153a8547", size = 30942, upload-time = "2025-08-05T16:42:56.674Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/baf2b9cc7e96c179bb4a54f30fcd83e6ecb340031bde68f486403f943768/audioop_lts-0.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:c174e322bb5783c099aaf87faeb240c8d210686b04bd61dfd05a8e5a83d88969", size = 24603, upload-time = "2025-08-05T16:42:57.571Z" }, + { url = "https://files.pythonhosted.org/packages/5c/73/413b5a2804091e2c7d5def1d618e4837f1cb82464e230f827226278556b7/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f9ee9b52f5f857fbaf9d605a360884f034c92c1c23021fb90b2e39b8e64bede6", size = 47104, upload-time = "2025-08-05T16:42:58.518Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/daa3308dc6593944410c2c68306a5e217f5c05b70a12e70228e7dd42dc5c/audioop_lts-0.2.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:49ee1a41738a23e98d98b937a0638357a2477bc99e61b0f768a8f654f45d9b7a", size = 27754, upload-time = "2025-08-05T16:43:00.132Z" }, + { url = "https://files.pythonhosted.org/packages/4e/86/c2e0f627168fcf61781a8f72cab06b228fe1da4b9fa4ab39cfb791b5836b/audioop_lts-0.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5b00be98ccd0fc123dcfad31d50030d25fcf31488cde9e61692029cd7394733b", size = 27332, upload-time = "2025-08-05T16:43:01.666Z" }, + { url = "https://files.pythonhosted.org/packages/c7/bd/35dce665255434f54e5307de39e31912a6f902d4572da7c37582809de14f/audioop_lts-0.2.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6d2e0f9f7a69403e388894d4ca5ada5c47230716a03f2847cfc7bd1ecb589d6", size = 92396, upload-time = "2025-08-05T16:43:02.991Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d2/deeb9f51def1437b3afa35aeb729d577c04bcd89394cb56f9239a9f50b6f/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9b0b8a03ef474f56d1a842af1a2e01398b8f7654009823c6d9e0ecff4d5cfbf", size = 91811, upload-time = "2025-08-05T16:43:04.096Z" }, + { url = "https://files.pythonhosted.org/packages/76/3b/09f8b35b227cee28cc8231e296a82759ed80c1a08e349811d69773c48426/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2b267b70747d82125f1a021506565bdc5609a2b24bcb4773c16d79d2bb260bbd", size = 100483, upload-time = "2025-08-05T16:43:05.085Z" }, + { url = "https://files.pythonhosted.org/packages/0b/15/05b48a935cf3b130c248bfdbdea71ce6437f5394ee8533e0edd7cfd93d5e/audioop_lts-0.2.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0337d658f9b81f4cd0fdb1f47635070cc084871a3d4646d9de74fdf4e7c3d24a", size = 103885, upload-time = "2025-08-05T16:43:06.197Z" }, + { url = "https://files.pythonhosted.org/packages/83/80/186b7fce6d35b68d3d739f228dc31d60b3412105854edb975aa155a58339/audioop_lts-0.2.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:167d3b62586faef8b6b2275c3218796b12621a60e43f7e9d5845d627b9c9b80e", size = 84899, upload-time = "2025-08-05T16:43:07.291Z" }, + { url = "https://files.pythonhosted.org/packages/49/89/c78cc5ac6cb5828f17514fb12966e299c850bc885e80f8ad94e38d450886/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0d9385e96f9f6da847f4d571ce3cb15b5091140edf3db97276872647ce37efd7", size = 89998, upload-time = "2025-08-05T16:43:08.335Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4b/6401888d0c010e586c2ca50fce4c903d70a6bb55928b16cfbdfd957a13da/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:48159d96962674eccdca9a3df280e864e8ac75e40a577cc97c5c42667ffabfc5", size = 99046, upload-time = "2025-08-05T16:43:09.367Z" }, + { url = "https://files.pythonhosted.org/packages/de/f8/c874ca9bb447dae0e2ef2e231f6c4c2b0c39e31ae684d2420b0f9e97ee68/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8fefe5868cd082db1186f2837d64cfbfa78b548ea0d0543e9b28935ccce81ce9", size = 84843, upload-time = "2025-08-05T16:43:10.749Z" }, + { url = "https://files.pythonhosted.org/packages/3e/c0/0323e66f3daebc13fd46b36b30c3be47e3fc4257eae44f1e77eb828c703f/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:58cf54380c3884fb49fdd37dfb7a772632b6701d28edd3e2904743c5e1773602", size = 94490, upload-time = "2025-08-05T16:43:12.131Z" }, + { url = "https://files.pythonhosted.org/packages/98/6b/acc7734ac02d95ab791c10c3f17ffa3584ccb9ac5c18fd771c638ed6d1f5/audioop_lts-0.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:088327f00488cdeed296edd9215ca159f3a5a5034741465789cad403fcf4bec0", size = 92297, upload-time = "2025-08-05T16:43:13.139Z" }, + { url = "https://files.pythonhosted.org/packages/13/c3/c3dc3f564ce6877ecd2a05f8d751b9b27a8c320c2533a98b0c86349778d0/audioop_lts-0.2.2-cp314-cp314t-win32.whl", hash = "sha256:068aa17a38b4e0e7de771c62c60bbca2455924b67a8814f3b0dee92b5820c0b3", size = 27331, upload-time = "2025-08-05T16:43:14.19Z" }, + { url = "https://files.pythonhosted.org/packages/72/bb/b4608537e9ffcb86449091939d52d24a055216a36a8bf66b936af8c3e7ac/audioop_lts-0.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a5bf613e96f49712073de86f20dbdd4014ca18efd4d34ed18c75bd808337851b", size = 31697, upload-time = "2025-08-05T16:43:15.193Z" }, + { url = "https://files.pythonhosted.org/packages/f6/22/91616fe707a5c5510de2cac9b046a30defe7007ba8a0c04f9c08f27df312/audioop_lts-0.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:b492c3b040153e68b9fdaff5913305aaaba5bb433d8a7f73d5cf6a64ed3cc1dd", size = 25206, upload-time = "2025-08-05T16:43:16.444Z" }, +] + +[[package]] +name = "authlib" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "joserfc" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/98/7d93f30d029643c0275dbc0bd6d5a6f670661ee6c9a94d93af7ab4887600/authlib-1.7.2.tar.gz", hash = "sha256:2cea25fefcd4e7173bdf1372c0afc265c8034b23a8cd5dcb6a9164b826c64231", size = 176511, upload-time = "2026-05-06T08:10:23.116Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/95/adcb68e20c34162e9135f370d6e31737719c2b6f94bc953fe7ed1f10fe21/authlib-1.7.2-py2.py3-none-any.whl", hash = "sha256:3e1faedc9d87e7d56a164eca3ccb6ace0d61b94abe83e92242f8dc8bba9b4a9f", size = 259548, upload-time = "2026-05-06T08:10:21.436Z" }, +] + +[[package]] +name = "backports-tarfile" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz", hash = "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", size = 86406, upload-time = "2024-05-28T17:01:54.731Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size = 30181, upload-time = "2024-05-28T17:01:53.112Z" }, +] + +[[package]] +name = "beartype" +version = "0.22.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/94/1009e248bbfbab11397abca7193bea6626806be9a327d399810d523a07cb/beartype-0.22.9.tar.gz", hash = "sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f", size = 1608866, upload-time = "2025-12-13T06:50:30.72Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl", hash = "sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2", size = 1333658, upload-time = "2025-12-13T06:50:28.266Z" }, +] + +[[package]] +name = "brotli" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/16/c92ca344d646e71a43b8bb353f0a6490d7f6e06210f8554c8f874e454285/brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a", size = 7388632, upload-time = "2025-11-05T18:39:42.86Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/10/a090475284fc4a71aed40a96f32e44a7fe5bda39687353dd977720b211b6/brotli-1.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e", size = 863089, upload-time = "2025-11-05T18:38:01.181Z" }, + { url = "https://files.pythonhosted.org/packages/03/41/17416630e46c07ac21e378c3464815dd2e120b441e641bc516ac32cc51d2/brotli-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984", size = 445442, upload-time = "2025-11-05T18:38:02.434Z" }, + { url = "https://files.pythonhosted.org/packages/24/31/90cc06584deb5d4fcafc0985e37741fc6b9717926a78674bbb3ce018957e/brotli-1.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de", size = 1532658, upload-time = "2025-11-05T18:38:03.588Z" }, + { url = "https://files.pythonhosted.org/packages/62/17/33bf0c83bcbc96756dfd712201d87342732fad70bb3472c27e833a44a4f9/brotli-1.2.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947", size = 1631241, upload-time = "2025-11-05T18:38:04.582Z" }, + { url = "https://files.pythonhosted.org/packages/48/10/f47854a1917b62efe29bc98ac18e5d4f71df03f629184575b862ef2e743b/brotli-1.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2", size = 1424307, upload-time = "2025-11-05T18:38:05.587Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b7/f88eb461719259c17483484ea8456925ee057897f8e64487d76e24e5e38d/brotli-1.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84", size = 1488208, upload-time = "2025-11-05T18:38:06.613Z" }, + { url = "https://files.pythonhosted.org/packages/26/59/41bbcb983a0c48b0b8004203e74706c6b6e99a04f3c7ca6f4f41f364db50/brotli-1.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d", size = 1597574, upload-time = "2025-11-05T18:38:07.838Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e6/8c89c3bdabbe802febb4c5c6ca224a395e97913b5df0dff11b54f23c1788/brotli-1.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1", size = 1492109, upload-time = "2025-11-05T18:38:08.816Z" }, + { url = "https://files.pythonhosted.org/packages/ed/9a/4b19d4310b2dbd545c0c33f176b0528fa68c3cd0754e34b2f2bcf56548ae/brotli-1.2.0-cp310-cp310-win32.whl", hash = "sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997", size = 334461, upload-time = "2025-11-05T18:38:10.729Z" }, + { url = "https://files.pythonhosted.org/packages/ac/39/70981d9f47705e3c2b95c0847dfa3e7a37aa3b7c6030aedc4873081ed005/brotli-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196", size = 369035, upload-time = "2025-11-05T18:38:11.827Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ef/f285668811a9e1ddb47a18cb0b437d5fc2760d537a2fe8a57875ad6f8448/brotli-1.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744", size = 863110, upload-time = "2025-11-05T18:38:12.978Z" }, + { url = "https://files.pythonhosted.org/packages/50/62/a3b77593587010c789a9d6eaa527c79e0848b7b860402cc64bc0bc28a86c/brotli-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f", size = 445438, upload-time = "2025-11-05T18:38:14.208Z" }, + { url = "https://files.pythonhosted.org/packages/cd/e1/7fadd47f40ce5549dc44493877db40292277db373da5053aff181656e16e/brotli-1.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd", size = 1534420, upload-time = "2025-11-05T18:38:15.111Z" }, + { url = "https://files.pythonhosted.org/packages/12/8b/1ed2f64054a5a008a4ccd2f271dbba7a5fb1a3067a99f5ceadedd4c1d5a7/brotli-1.2.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe", size = 1632619, upload-time = "2025-11-05T18:38:16.094Z" }, + { url = "https://files.pythonhosted.org/packages/89/5a/7071a621eb2d052d64efd5da2ef55ecdac7c3b0c6e4f9d519e9c66d987ef/brotli-1.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a", size = 1426014, upload-time = "2025-11-05T18:38:17.177Z" }, + { url = "https://files.pythonhosted.org/packages/26/6d/0971a8ea435af5156acaaccec1a505f981c9c80227633851f2810abd252a/brotli-1.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b", size = 1489661, upload-time = "2025-11-05T18:38:18.41Z" }, + { url = "https://files.pythonhosted.org/packages/f3/75/c1baca8b4ec6c96a03ef8230fab2a785e35297632f402ebb1e78a1e39116/brotli-1.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3", size = 1599150, upload-time = "2025-11-05T18:38:19.792Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1a/23fcfee1c324fd48a63d7ebf4bac3a4115bdb1b00e600f80f727d850b1ae/brotli-1.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae", size = 1493505, upload-time = "2025-11-05T18:38:20.913Z" }, + { url = "https://files.pythonhosted.org/packages/36/e5/12904bbd36afeef53d45a84881a4810ae8810ad7e328a971ebbfd760a0b3/brotli-1.2.0-cp311-cp311-win32.whl", hash = "sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03", size = 334451, upload-time = "2025-11-05T18:38:21.94Z" }, + { url = "https://files.pythonhosted.org/packages/02/8b/ecb5761b989629a4758c394b9301607a5880de61ee2ee5fe104b87149ebc/brotli-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24", size = 369035, upload-time = "2025-11-05T18:38:22.941Z" }, + { url = "https://files.pythonhosted.org/packages/11/ee/b0a11ab2315c69bb9b45a2aaed022499c9c24a205c3a49c3513b541a7967/brotli-1.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84", size = 861543, upload-time = "2025-11-05T18:38:24.183Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2f/29c1459513cd35828e25531ebfcbf3e92a5e49f560b1777a9af7203eb46e/brotli-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b", size = 444288, upload-time = "2025-11-05T18:38:25.139Z" }, + { url = "https://files.pythonhosted.org/packages/3d/6f/feba03130d5fceadfa3a1bb102cb14650798c848b1df2a808356f939bb16/brotli-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d", size = 1528071, upload-time = "2025-11-05T18:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/2b/38/f3abb554eee089bd15471057ba85f47e53a44a462cfce265d9bf7088eb09/brotli-1.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca", size = 1626913, upload-time = "2025-11-05T18:38:27.284Z" }, + { url = "https://files.pythonhosted.org/packages/03/a7/03aa61fbc3c5cbf99b44d158665f9b0dd3d8059be16c460208d9e385c837/brotli-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f", size = 1419762, upload-time = "2025-11-05T18:38:28.295Z" }, + { url = "https://files.pythonhosted.org/packages/21/1b/0374a89ee27d152a5069c356c96b93afd1b94eae83f1e004b57eb6ce2f10/brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28", size = 1484494, upload-time = "2025-11-05T18:38:29.29Z" }, + { url = "https://files.pythonhosted.org/packages/cf/57/69d4fe84a67aef4f524dcd075c6eee868d7850e85bf01d778a857d8dbe0a/brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7", size = 1593302, upload-time = "2025-11-05T18:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/d5/3b/39e13ce78a8e9a621c5df3aeb5fd181fcc8caba8c48a194cd629771f6828/brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036", size = 1487913, upload-time = "2025-11-05T18:38:31.618Z" }, + { url = "https://files.pythonhosted.org/packages/62/28/4d00cb9bd76a6357a66fcd54b4b6d70288385584063f4b07884c1e7286ac/brotli-1.2.0-cp312-cp312-win32.whl", hash = "sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161", size = 334362, upload-time = "2025-11-05T18:38:32.939Z" }, + { url = "https://files.pythonhosted.org/packages/1c/4e/bc1dcac9498859d5e353c9b153627a3752868a9d5f05ce8dedd81a2354ab/brotli-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44", size = 369115, upload-time = "2025-11-05T18:38:33.765Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d4/4ad5432ac98c73096159d9ce7ffeb82d151c2ac84adcc6168e476bb54674/brotli-1.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab", size = 861523, upload-time = "2025-11-05T18:38:34.67Z" }, + { url = "https://files.pythonhosted.org/packages/91/9f/9cc5bd03ee68a85dc4bc89114f7067c056a3c14b3d95f171918c088bf88d/brotli-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c", size = 444289, upload-time = "2025-11-05T18:38:35.6Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b6/fe84227c56a865d16a6614e2c4722864b380cb14b13f3e6bef441e73a85a/brotli-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f", size = 1528076, upload-time = "2025-11-05T18:38:36.639Z" }, + { url = "https://files.pythonhosted.org/packages/55/de/de4ae0aaca06c790371cf6e7ee93a024f6b4bb0568727da8c3de112e726c/brotli-1.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6", size = 1626880, upload-time = "2025-11-05T18:38:37.623Z" }, + { url = "https://files.pythonhosted.org/packages/5f/16/a1b22cbea436642e071adcaf8d4b350a2ad02f5e0ad0da879a1be16188a0/brotli-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c", size = 1419737, upload-time = "2025-11-05T18:38:38.729Z" }, + { url = "https://files.pythonhosted.org/packages/46/63/c968a97cbb3bdbf7f974ef5a6ab467a2879b82afbc5ffb65b8acbb744f95/brotli-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48", size = 1484440, upload-time = "2025-11-05T18:38:39.916Z" }, + { url = "https://files.pythonhosted.org/packages/06/9d/102c67ea5c9fc171f423e8399e585dabea29b5bc79b05572891e70013cdd/brotli-1.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18", size = 1593313, upload-time = "2025-11-05T18:38:41.24Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/9526d14fa6b87bc827ba1755a8440e214ff90de03095cacd78a64abe2b7d/brotli-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5", size = 1487945, upload-time = "2025-11-05T18:38:42.277Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e8/3fe1ffed70cbef83c5236166acaed7bb9c766509b157854c80e2f766b38c/brotli-1.2.0-cp313-cp313-win32.whl", hash = "sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a", size = 334368, upload-time = "2025-11-05T18:38:43.345Z" }, + { url = "https://files.pythonhosted.org/packages/ff/91/e739587be970a113b37b821eae8097aac5a48e5f0eca438c22e4c7dd8648/brotli-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8", size = 369116, upload-time = "2025-11-05T18:38:44.609Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/298c2ddf786bb7347a1cd71d63a347a79e5712a7c0cba9e3c3458ebd976f/brotli-1.2.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21", size = 863080, upload-time = "2025-11-05T18:38:45.503Z" }, + { url = "https://files.pythonhosted.org/packages/84/0c/aac98e286ba66868b2b3b50338ffbd85a35c7122e9531a73a37a29763d38/brotli-1.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac", size = 445453, upload-time = "2025-11-05T18:38:46.433Z" }, + { url = "https://files.pythonhosted.org/packages/ec/f1/0ca1f3f99ae300372635ab3fe2f7a79fa335fee3d874fa7f9e68575e0e62/brotli-1.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e", size = 1528168, upload-time = "2025-11-05T18:38:47.371Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a6/2ebfc8f766d46df8d3e65b880a2e220732395e6d7dc312c1e1244b0f074a/brotli-1.2.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7", size = 1627098, upload-time = "2025-11-05T18:38:48.385Z" }, + { url = "https://files.pythonhosted.org/packages/f3/2f/0976d5b097ff8a22163b10617f76b2557f15f0f39d6a0fe1f02b1a53e92b/brotli-1.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63", size = 1419861, upload-time = "2025-11-05T18:38:49.372Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/d76df7176a2ce7616ff94c1fb72d307c9a30d2189fe877f3dd99af00ea5a/brotli-1.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b", size = 1484594, upload-time = "2025-11-05T18:38:50.655Z" }, + { url = "https://files.pythonhosted.org/packages/d3/93/14cf0b1216f43df5609f5b272050b0abd219e0b54ea80b47cef9867b45e7/brotli-1.2.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361", size = 1593455, upload-time = "2025-11-05T18:38:51.624Z" }, + { url = "https://files.pythonhosted.org/packages/b3/73/3183c9e41ca755713bdf2cc1d0810df742c09484e2e1ddd693bee53877c1/brotli-1.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888", size = 1488164, upload-time = "2025-11-05T18:38:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/64/6a/0c78d8f3a582859236482fd9fa86a65a60328a00983006bcf6d83b7b2253/brotli-1.2.0-cp314-cp314-win32.whl", hash = "sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d", size = 339280, upload-time = "2025-11-05T18:38:54.02Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/56978295c14794b2c12007b07f3e41ba26acda9257457d7085b0bb3bb90c/brotli-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3", size = 375639, upload-time = "2025-11-05T18:38:55.67Z" }, +] + +[[package]] +name = "cachetools" +version = "7.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/8b/0d3945a13955303b81272f759a0331e54c5c793da455e6f5706b89d2639c/cachetools-7.1.4.tar.gz", hash = "sha256:437f55a4e0c1b01a4f3077cc470e6991d47430970e36fbcb77e2be0df4fc1cd6", size = 40085, upload-time = "2026-05-21T22:40:43.376Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/7b/1fc1c09cc0756cf25861a3be10565915953876da48bb228fb9a672b20a42/cachetools-7.1.4-py3-none-any.whl", hash = "sha256:323dc4127934744db5b54eb4924482d7edafbf9554e820d1531c2e08c0e4ef54", size = 16761, upload-time = "2026-05-21T22:40:41.845Z" }, +] + +[[package]] +name = "caio" +version = "0.9.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/88/b8527e1b00c1811db339a1df8bd1ae49d146fcea9d6a5c40e3a80aaeb38d/caio-0.9.25.tar.gz", hash = "sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10", size = 26781, upload-time = "2025-12-26T15:21:36.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/80/ea4ead0c5d52a9828692e7df20f0eafe8d26e671ce4883a0a146bb91049e/caio-0.9.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ca6c8ecda611478b6016cb94d23fd3eb7124852b985bdec7ecaad9f3116b9619", size = 36836, upload-time = "2025-12-26T15:22:04.662Z" }, + { url = "https://files.pythonhosted.org/packages/17/b9/36715c97c873649d1029001578f901b50250916295e3dddf20c865438865/caio-0.9.25-cp310-cp310-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db9b5681e4af8176159f0d6598e73b2279bb661e718c7ac23342c550bd78c241", size = 79695, upload-time = "2025-12-26T15:22:18.818Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ab/07080ecb1adb55a02cbd8ec0126aa8e43af343ffabb6a71125b42670e9a1/caio-0.9.25-cp310-cp310-manylinux_2_34_aarch64.whl", hash = "sha256:bf61d7d0c4fd10ffdd98ca47f7e8db4d7408e74649ffaf4bef40b029ada3c21b", size = 79457, upload-time = "2026-03-04T22:08:16.024Z" }, + { url = "https://files.pythonhosted.org/packages/88/95/dd55757bb671eb4c376e006c04e83beb413486821f517792ea603ef216e9/caio-0.9.25-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:ab52e5b643f8bbd64a0605d9412796cd3464cb8ca88593b13e95a0f0b10508ae", size = 77705, upload-time = "2026-03-04T22:08:17.202Z" }, + { url = "https://files.pythonhosted.org/packages/ec/90/543f556fcfcfa270713eef906b6352ab048e1e557afec12925c991dc93c2/caio-0.9.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d6956d9e4a27021c8bd6c9677f3a59eb1d820cc32d0343cea7961a03b1371965", size = 36839, upload-time = "2025-12-26T15:21:40.267Z" }, + { url = "https://files.pythonhosted.org/packages/51/3b/36f3e8ec38dafe8de4831decd2e44c69303d2a3892d16ceda42afed44e1b/caio-0.9.25-cp311-cp311-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bf84bfa039f25ad91f4f52944452a5f6f405e8afab4d445450978cd6241d1478", size = 80255, upload-time = "2025-12-26T15:22:20.271Z" }, + { url = "https://files.pythonhosted.org/packages/df/ce/65e64867d928e6aff1b4f0e12dba0ef6d5bf412c240dc1df9d421ac10573/caio-0.9.25-cp311-cp311-manylinux_2_34_aarch64.whl", hash = "sha256:ae3d62587332bce600f861a8de6256b1014d6485cfd25d68c15caf1611dd1f7c", size = 80052, upload-time = "2026-03-04T22:08:20.402Z" }, + { url = "https://files.pythonhosted.org/packages/46/90/e278863c47e14ec58309aa2e38a45882fbe67b4cc29ec9bc8f65852d3e45/caio-0.9.25-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:fc220b8533dcf0f238a6b1a4a937f92024c71e7b10b5a2dfc1c73604a25709bc", size = 78273, upload-time = "2026-03-04T22:08:21.368Z" }, + { url = "https://files.pythonhosted.org/packages/d3/25/79c98ebe12df31548ba4eaf44db11b7cad6b3e7b4203718335620939083c/caio-0.9.25-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044", size = 36983, upload-time = "2025-12-26T15:21:36.075Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2b/21288691f16d479945968a0a4f2856818c1c5be56881d51d4dac9b255d26/caio-0.9.25-cp312-cp312-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64", size = 82012, upload-time = "2025-12-26T15:22:20.983Z" }, + { url = "https://files.pythonhosted.org/packages/03/c4/8a1b580875303500a9c12b9e0af58cb82e47f5bcf888c2457742a138273c/caio-0.9.25-cp312-cp312-manylinux_2_34_aarch64.whl", hash = "sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb", size = 81502, upload-time = "2026-03-04T22:08:22.381Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1c/0fe770b8ffc8362c48134d1592d653a81a3d8748d764bec33864db36319d/caio-0.9.25-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69", size = 80200, upload-time = "2026-03-04T22:08:23.382Z" }, + { url = "https://files.pythonhosted.org/packages/31/57/5e6ff127e6f62c9f15d989560435c642144aa4210882f9494204bc892305/caio-0.9.25-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451", size = 36979, upload-time = "2025-12-26T15:21:35.484Z" }, + { url = "https://files.pythonhosted.org/packages/a3/9f/f21af50e72117eb528c422d4276cbac11fb941b1b812b182e0a9c70d19c5/caio-0.9.25-cp313-cp313-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6", size = 81900, upload-time = "2025-12-26T15:22:21.919Z" }, + { url = "https://files.pythonhosted.org/packages/9c/12/c39ae2a4037cb10ad5eb3578eb4d5f8c1a2575c62bba675f3406b7ef0824/caio-0.9.25-cp313-cp313-manylinux_2_34_aarch64.whl", hash = "sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f", size = 81523, upload-time = "2026-03-04T22:08:25.187Z" }, + { url = "https://files.pythonhosted.org/packages/22/59/f8f2e950eb4f1a5a3883e198dca514b9d475415cb6cd7b78b9213a0dd45a/caio-0.9.25-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7", size = 80243, upload-time = "2026-03-04T22:08:26.449Z" }, + { url = "https://files.pythonhosted.org/packages/69/ca/a08fdc7efdcc24e6a6131a93c85be1f204d41c58f474c42b0670af8c016b/caio-0.9.25-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db", size = 36978, upload-time = "2025-12-26T15:21:41.055Z" }, + { url = "https://files.pythonhosted.org/packages/5e/6c/d4d24f65e690213c097174d26eda6831f45f4734d9d036d81790a27e7b78/caio-0.9.25-cp314-cp314-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77", size = 81832, upload-time = "2025-12-26T15:22:22.757Z" }, + { url = "https://files.pythonhosted.org/packages/87/a4/e534cf7d2d0e8d880e25dd61e8d921ffcfe15bd696734589826f5a2df727/caio-0.9.25-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79", size = 81565, upload-time = "2026-03-04T22:08:27.483Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ed/bf81aeac1d290017e5e5ac3e880fd56ee15e50a6d0353986799d1bc5cfd5/caio-0.9.25-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7", size = 80071, upload-time = "2026-03-04T22:08:28.751Z" }, + { url = "https://files.pythonhosted.org/packages/86/93/1f76c8d1bafe3b0614e06b2195784a3765bbf7b0a067661af9e2dd47fc33/caio-0.9.25-py3-none-any.whl", hash = "sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40", size = 19087, upload-time = "2025-12-26T15:22:00.221Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/e9/6d7724983b3d5a0908dbf74f64038ade77c18646ff6636ec7894fd392ce1/cffi-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:b65f590ef2a44640f9a05dbb548a429b4ade77913ce683ac8b1480777658a6c0", size = 183837, upload-time = "2026-07-06T21:32:09.655Z" }, + { url = "https://files.pythonhosted.org/packages/69/aa/24580a278de21fd7322635556334d9b535f1cbc00b0a3919447cdf464c65/cffi-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164bff1657b2a74f0b6d54e11c9b375bc97b931f2ca9c43fcf875838da1570dd", size = 184226, upload-time = "2026-07-06T21:32:11.196Z" }, + { url = "https://files.pythonhosted.org/packages/88/a9/02cae418ec4beb282ace11958d9d4737793439d561fadc7e6d56f2e2b354/cffi-2.1.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:c941bb58d5a6e1c3892d86e42927ed6c180302f07e6d395d08c416e594b98b46", size = 211107, upload-time = "2026-07-06T21:32:12.328Z" }, + { url = "https://files.pythonhosted.org/packages/3b/30/c806937ed5e4c2c7ac30d9d6b76b5dc57ff8b75d83800d9bb11a8253cf2a/cffi-2.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a016194dbe13d14ee9556e734b772d8d67b947092b268d757fd4290e3ba2dfc2", size = 218733, upload-time = "2026-07-06T21:32:13.67Z" }, + { url = "https://files.pythonhosted.org/packages/f9/cf/398272b8bbfd58aa314fda5a7f1cdbb26d1d78ae324a11211521315dd1f0/cffi-2.1.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:03e9810d18c646077e501f661b682fbf5dee4676048527ca3cffe66faa9960dd", size = 205543, upload-time = "2026-07-06T21:32:15.148Z" }, + { url = "https://files.pythonhosted.org/packages/45/ca/f91641185cdd90c36d317a9dc7f85e88ef8682d8b300977baff5e23c35d8/cffi-2.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:19c54ac121cad98450b4896fa9a43ee0180d57bc4bc911a33db6cab1efab6cd3", size = 205460, upload-time = "2026-07-06T21:32:16.479Z" }, + { url = "https://files.pythonhosted.org/packages/38/66/04781a77b411f0bb5b234d62c1814754ab75ebe455ccff1b08e8d7aae98f/cffi-2.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d433a51f1870e43a13b6732f92aaf540ff77c2015097c78556f75a2d6c030e0", size = 218760, upload-time = "2026-07-06T21:32:17.98Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9a/bb1d5ed9c3fcae158e9f6391bf309c95d98c2ac37ed56573228471d0af5e/cffi-2.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3d7f118b5adbfdfead90c25822690b02bc8074fba949bb7858bec4ebd55adb43", size = 221230, upload-time = "2026-07-06T21:32:19.407Z" }, + { url = "https://files.pythonhosted.org/packages/41/aa/3c1409cdd26094efacd1c36c66e0a6eb9d4296e4fd4f9901b8b2042f4323/cffi-2.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c5f5df567f6eb216de69be06ce55c8b714090fae02b18a3b40da8163b8c5fa9c", size = 213524, upload-time = "2026-07-06T21:32:20.828Z" }, + { url = "https://files.pythonhosted.org/packages/fa/75/74dfb7c3fc6ebbd408038476bd4c1d7e925c62614e7b9c534ecc34218288/cffi-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:11b3fb55f4f8ad92274ed26705f65d8f91457de71f5380061eb6d125a768fecd", size = 220341, upload-time = "2026-07-06T21:32:21.9Z" }, + { url = "https://files.pythonhosted.org/packages/70/b6/9003c33a3e7d2c1306f5962e646457dcfe5a8cd8fce6bbe02d7af25db783/cffi-2.1.0-cp310-cp310-win32.whl", hash = "sha256:9d72af0cf10a76a600a9690078fe31c63b9588c8e86bf9fd353f713c84b5db0f", size = 174578, upload-time = "2026-07-06T21:32:23.073Z" }, + { url = "https://files.pythonhosted.org/packages/8a/26/710688310447531c7a22f857c7f79d9855ec18b03e04494ced723fb37e2f/cffi-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb62edb5bb52cca65fab91a63afa7561607120d26090a7e8fda6fb9f064726da", size = 185071, upload-time = "2026-07-06T21:32:24.671Z" }, + { url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" }, + { url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" }, + { url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" }, + { url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" }, + { url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" }, + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/2a/23f34ec9d04624958e137efdc394888716353190e75f25dd22c7a2c7a8aa/charset_normalizer-3.4.9.tar.gz", hash = "sha256:673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b", size = 152439, upload-time = "2026-07-07T14:34:58.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/81/8e983840c6e5b93b33c2ba81aa3d52c2e42f0e9a690ce7607a2e61da4a5c/charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd6280cf040f233bd7d3407b743b4b4c74f70e8e1c4199cb112a62c941c0772a", size = 322240, upload-time = "2026-07-07T14:32:36.236Z" }, + { url = "https://files.pythonhosted.org/packages/de/d1/b4319dc3229d8272fba305e206fc0a148e2de8d4087917ce62ae6382f359/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa99adc8f081b475a12843953db36831eaf83ec33eb46a90629ca6a5de45a616", size = 216475, upload-time = "2026-07-07T14:32:38.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/33/6c99c1b3e6b8bf730e1bc809b9a2608f224145069114c479a2e9e1494346/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c1225416b463483160e4af85d5fc3a9690ccb53fd4b1865a6437825f5ede3209", size = 238670, upload-time = "2026-07-07T14:32:39.658Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f4/ffbb83546e1f198ecc70ecd372b65cf2b50f9068b380abd67640f17a8e18/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:16d10d789dd9bcca1173c95af82c58433122564b7bc39385124be735a35cbe99", size = 233476, upload-time = "2026-07-07T14:32:41.155Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5f/b98b8da398637b551e427e7be922bdec19177dc54d6811dcdaa503f23aac/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bb41182d93ea91f60b4bc8fbf4c820c69ef8a12ab2d917f3f1834f1acad07e8", size = 223817, upload-time = "2026-07-07T14:32:42.592Z" }, + { url = "https://files.pythonhosted.org/packages/36/31/a276bb2e66243072a3fd06fdcab9cbb61a305b02143d70d2bda21d888fa8/charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:bcf74c1df76758a395bf0af608c04c82257523f55c9868b334f06270d0f2112b", size = 207974, upload-time = "2026-07-07T14:32:44.258Z" }, + { url = "https://files.pythonhosted.org/packages/5e/be/7ee4453d7e88dfbc4104ccd34900b9f2c7c17dac22881865fe0e82424a25/charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b5314963fce9b0b12743891de876e724997864ee22aa496f903f426c7e2fa5b2", size = 221655, upload-time = "2026-07-07T14:32:45.64Z" }, + { url = "https://files.pythonhosted.org/packages/1d/85/181c652953eb5276d198f375b1dd641047392050098100a3a02d6534f657/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9701d0049d92c16703a42771b98d560b95248949f23f8cf7b4eddd201814fb9", size = 219229, upload-time = "2026-07-07T14:32:47.376Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e7/aaf6da33fc9f4691cda8f7efbc9f69179d3d39ec8a4799baf273ee1d8db0/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:65a7ff3f705e57d392f7261b6d0550fe137c3019477431f1c355e0db0a7d3e15", size = 209704, upload-time = "2026-07-07T14:32:48.855Z" }, + { url = "https://files.pythonhosted.org/packages/63/01/f2fb3bd3a73be48b173ee0c6aa8d2497af97d5663a8c4c4b491de4c62f7a/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79580094b00d1789d1f93ea55bc43cb2f611910c72235b7657f3482ddcc1b22d", size = 226243, upload-time = "2026-07-07T14:32:50.239Z" }, + { url = "https://files.pythonhosted.org/packages/c4/02/c57a22739fe05246b0b5783b3bfb6afaac4eebb46f3ececdfb2f048f780e/charset_normalizer-3.4.9-cp310-cp310-win32.whl", hash = "sha256:432786d3561e69aeeae6c7e8648964ce0ad05736120135601f87ac26b9c83381", size = 150935, upload-time = "2026-07-07T14:32:51.676Z" }, + { url = "https://files.pythonhosted.org/packages/37/8d/ca39a7559a4797505530d084fd3a49a2c959efbbbff146302fb7be4e3b35/charset_normalizer-3.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:8c041122946b7ba21bb32c45b1aa57b1be35527690aeb3c5c234521085632eee", size = 162314, upload-time = "2026-07-07T14:32:53.193Z" }, + { url = "https://files.pythonhosted.org/packages/01/da/a44bd7a13d426e69e4894557106cd58669097bfad4a8681123b618fbfc5d/charset_normalizer-3.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:375b83ed0aecfce76c16d198fbc21f3b11b337d68662bea0a995046682a11419", size = 153075, upload-time = "2026-07-07T14:32:54.554Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e3/85ec501f206fb049259288c1f3506e53876937fb00edb47009348e66756b/charset_normalizer-3.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e94703ec9684807f20cfb5eed95c70f67f2a8f21ad620146d7b5a13677b93e5", size = 317075, upload-time = "2026-07-07T14:32:56.021Z" }, + { url = "https://files.pythonhosted.org/packages/c3/69/2a5385192e67175f7d8bd5ce4f57c24bc956439adeae5c13a99aa28a53d1/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a441ea71902098ffe78c5abe6c494f44160b4af614ed16c3d9a3b1d17fd8ee2", size = 213837, upload-time = "2026-07-07T14:32:57.78Z" }, + { url = "https://files.pythonhosted.org/packages/b3/46/03ddc7da576d814fe0a36dd1f0fd3258e95404b4b2e3c026b7923d7e133f/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:304b13570067b2547562e308af560b3963857b1fa90bd6afd978130130fe2d6a", size = 235503, upload-time = "2026-07-07T14:32:59.205Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6e/de0229a7ef40f6f9d28a837eebf4ec47bdca5dab4e900c84f22919af636a/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4773092f8019072343a7447203308b176e10199920eb02d6195e81bbb3274c29", size = 229944, upload-time = "2026-07-07T14:33:00.803Z" }, + { url = "https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c", size = 221276, upload-time = "2026-07-07T14:33:02.199Z" }, + { url = "https://files.pythonhosted.org/packages/44/95/80282cce0fae9c3061203d723ee87da996aed79679e65d8935050ee7ca1f/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:c0323c9daef75ef2e5083624b4585018a0c9d5e3b40f607eed81a311270b934b", size = 205260, upload-time = "2026-07-07T14:33:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/0c/74/2f62c8821b969ea3bd67cc2e6976834f48ca5d12664d2559ebcd9bcfbed7/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:871ff67ea1aad4dfd91736464934d56b32dac49f9fbe16cddba36198a7b3a0db", size = 217786, upload-time = "2026-07-07T14:33:05.12Z" }, + { url = "https://files.pythonhosted.org/packages/d9/8d/feabb82cb49fcad14515b1d7d1ca4787b0da7fc723a212bf89bc9e0fac52/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67830fc78e67501f47bb950471b2dcb9b35b140084429318e862895a8e89c993", size = 216798, upload-time = "2026-07-07T14:33:06.629Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ff/c946d63bc3786d5b84d960b0f7ab7e25b828486a946b5aa997625bcaf6a6/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3d92613ec25e43b05f042302531ec0f00b8445190e43325880cbd6ab7c2581da", size = 206429, upload-time = "2026-07-07T14:33:08.006Z" }, + { url = "https://files.pythonhosted.org/packages/af/ba/5e5007c370702f85d2ef75791fac7943ed41e080364a673b20142e430e3e/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:280081916dc341820640489a66e4696049401ef1cf6dd672f672e70ad915aca3", size = 223066, upload-time = "2026-07-07T14:33:09.783Z" }, + { url = "https://files.pythonhosted.org/packages/83/d5/9096aa3cf532dfad237861544eb47a0f20d5adbf1039760fed8eaae935d9/charset_normalizer-3.4.9-cp311-cp311-win32.whl", hash = "sha256:ac351b3b8014eead140e77e9717e2992c6bbe30b63bc3422422eb84865412e3d", size = 150456, upload-time = "2026-07-07T14:33:11.217Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a1/e29995109e455dc8eff8d0fac6ae509be39561318a7cfeac5d33ad029213/charset_normalizer-3.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:6366a16e1a25018694d6a5d784d09b046edc9eac40ea2b54065c3052672516a1", size = 161410, upload-time = "2026-07-07T14:33:12.743Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8d/1569f4d0032d6ba2a4fe4591c35bf87868c600c41a71eb5c2e1ffa8464c2/charset_normalizer-3.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:1d22856ffbe153a602df38e4a5464f0b748a54002e0d69ac6d2ad0a197cc99ec", size = 152649, upload-time = "2026-07-07T14:33:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/70/4a/ecbd131485c07fcdfad54e28946d513e3da22ef3b4bd854dcafae54ec739/charset_normalizer-3.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0", size = 319300, upload-time = "2026-07-07T14:33:15.666Z" }, + { url = "https://files.pythonhosted.org/packages/ec/96/5d9364e3342d69f3a045e1777bc47c85c383e6e9466d561b33fdb419d1f9/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9", size = 215802, upload-time = "2026-07-07T14:33:17.031Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4c/5361f9aa7f2cb58d94f2ab831b3d493f69efb1d239654b4744e3c09527cb/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44", size = 237171, upload-time = "2026-07-07T14:33:18.576Z" }, + { url = "https://files.pythonhosted.org/packages/50/78/ce342ca4ff30b2eb49fe6d9578df85974f90c67d294113e94efdd9664cbd/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9", size = 233075, upload-time = "2026-07-07T14:33:20.084Z" }, + { url = "https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd", size = 224256, upload-time = "2026-07-07T14:33:21.747Z" }, + { url = "https://files.pythonhosted.org/packages/87/3a/ad914516df7e358a81aae018caa5e0470ba827fa6d763b1d2e87d920a5f6/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84", size = 208784, upload-time = "2026-07-07T14:33:23.313Z" }, + { url = "https://files.pythonhosted.org/packages/d7/74/3c12f9755717dfe5c5c87da63f35d765fa0c00382ec26bf23f7fae34f2ba/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b", size = 219928, upload-time = "2026-07-07T14:33:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/33/9a/895095b83e7907abd6d3d99aad3a38ad0d9686cc186cb0c94c24320fe63e/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde", size = 218489, upload-time = "2026-07-07T14:33:26.42Z" }, + { url = "https://files.pythonhosted.org/packages/a1/34/ef5c05f412f42520d7709b7d3784d19640839eb7366ded1755511585429f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39", size = 210267, upload-time = "2026-07-07T14:33:27.952Z" }, + { url = "https://files.pythonhosted.org/packages/83/dc/9b29fa4412b318bf3bfea985c35d67eb55e04b59a7c3f2237168b0e0be6f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62", size = 226030, upload-time = "2026-07-07T14:33:29.397Z" }, + { url = "https://files.pythonhosted.org/packages/0e/42/6dbc00b8cd16011691203e33570fa42ed5746599a2e878112d16eab403a3/charset_normalizer-3.4.9-cp312-cp312-win32.whl", hash = "sha256:78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642", size = 151185, upload-time = "2026-07-07T14:33:30.781Z" }, + { url = "https://files.pythonhosted.org/packages/80/cc/f920afd1a23c58ccd53c1d36085a71893a4737ff5e66e0371efab6809850/charset_normalizer-3.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0", size = 162557, upload-time = "2026-07-07T14:33:32.176Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/0386d43a261ff4e4b30c5857af7df877254b46bec7b9d1b74b6bf969a90b/charset_normalizer-3.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2", size = 152665, upload-time = "2026-07-07T14:33:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/b2/06/97ec2aeae780b31d742b6352218b43841a6871e2564578ca522dce4a45c3/charset_normalizer-3.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614", size = 317688, upload-time = "2026-07-07T14:33:35.408Z" }, + { url = "https://files.pythonhosted.org/packages/d0/39/8ff066c672434225f8d25f8b739f992af250944392173dcc88362681c9bf/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698", size = 214982, upload-time = "2026-07-07T14:33:36.996Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/3a47a3667c83c2df9483d91644c6c107de3bf8874aa1793da9d3012eb986/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b", size = 236460, upload-time = "2026-07-07T14:33:38.536Z" }, + { url = "https://files.pythonhosted.org/packages/f1/60/b22cdbee7e4013dab8b0d7647fc6181120fbbbc8f7025c226d15bd5a47fc/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9", size = 232003, upload-time = "2026-07-07T14:33:40.059Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33", size = 223149, upload-time = "2026-07-07T14:33:41.631Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3e/faee8f9de92b14ee1198e9163252bb15efee7301b31256a3b6d9ebfdd0dd/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63", size = 207901, upload-time = "2026-07-07T14:33:43.209Z" }, + { url = "https://files.pythonhosted.org/packages/3a/25/45f30093ae27dd7b92a793b61882a38685f993700113ca36e0c9c14965e1/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0", size = 219176, upload-time = "2026-07-07T14:33:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/48/18/c8f397329c35e32f6a837e488986f4ae03bd2abebc453b48714991630c2f/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe", size = 217356, upload-time = "2026-07-07T14:33:46.192Z" }, + { url = "https://files.pythonhosted.org/packages/86/7e/5ce0bba863470fd1902d5e5843968951bddf38abe4742fc97116ef4598b3/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35", size = 209614, upload-time = "2026-07-07T14:33:47.705Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/2473d3c4d869155be4af1191111d59c4d5c4e0173026f7e85b176e23bf65/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8", size = 224991, upload-time = "2026-07-07T14:33:49.238Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a3/53ddae3db108a088156aa8ddfafd411ebbc1340f48c5573f697b27f69a39/charset_normalizer-3.4.9-cp313-cp313-win32.whl", hash = "sha256:51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9", size = 150622, upload-time = "2026-07-07T14:33:50.711Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ef/6953a77c7cf2c2ff9998e6f575ab3e380119f100223381565a4f94c1f836/charset_normalizer-3.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115", size = 161947, upload-time = "2026-07-07T14:33:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/6e/fb/d560d1d1555debbfe7849d9cac6145c1b537709d79576bf22557ed803b82/charset_normalizer-3.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012", size = 152594, upload-time = "2026-07-07T14:33:53.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380", size = 317253, upload-time = "2026-07-07T14:33:54.994Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/ef4a69ea338ad3c0deceea0f5f7d2380ae8b52132b06d652cb0d2cd86706/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9", size = 215898, upload-time = "2026-07-07T14:33:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e7/5ddfd76fc061eb52de219658a4aa431cbacadf0a0219c8854f00da50d289/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4", size = 236718, upload-time = "2026-07-07T14:33:57.9Z" }, + { url = "https://files.pythonhosted.org/packages/49/ba/768fa3f36048d81c477a0ce61f813bc1454d80917ccfe550abd9f44f5e24/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a", size = 232519, upload-time = "2026-07-07T14:33:59.811Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046", size = 223143, upload-time = "2026-07-07T14:34:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/19/79/55c32d06d76ae4feafe053f061f3e3ab70bcf19f4007797ce8c3efda7830/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81", size = 206742, upload-time = "2026-07-07T14:34:03.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/e0/47c079dd82d217c807479cd59ffd30af56307ea31c108b75758970459ad3/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917", size = 219191, upload-time = "2026-07-07T14:34:04.657Z" }, + { url = "https://files.pythonhosted.org/packages/42/ab/b9bc2e77d6b44a7e46ef62ec5cac1c9a6ba7b9135a5d560f002696ec9995/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41", size = 218328, upload-time = "2026-07-07T14:34:06.115Z" }, + { url = "https://files.pythonhosted.org/packages/f1/78/c9c71d599f5aa2d42bcdd35cbbd46d7f535351a57e40ff7d8e5a7e219401/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1", size = 207406, upload-time = "2026-07-07T14:34:07.554Z" }, + { url = "https://files.pythonhosted.org/packages/f6/39/c914445c321a845097ce4f6ac7de9a18228a77b766272125a1ce00d851eb/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf", size = 225157, upload-time = "2026-07-07T14:34:09.061Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f2/c0d4b8508565a36bc5c624e88ed297f5b0b1095011034d7f5b83a69908b5/charset_normalizer-3.4.9-cp314-cp314-win32.whl", hash = "sha256:c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48", size = 151095, upload-time = "2026-07-07T14:34:10.901Z" }, + { url = "https://files.pythonhosted.org/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b", size = 162796, upload-time = "2026-07-07T14:34:12.47Z" }, + { url = "https://files.pythonhosted.org/packages/20/95/d75e82f8ce9fd323ebf059c16c9aadefb22a1ecde13b7840b35835e4886c/charset_normalizer-3.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519", size = 153334, upload-time = "2026-07-07T14:34:14.044Z" }, + { url = "https://files.pythonhosted.org/packages/00/5e/17398df3a139985ba9d11ed072531986f408c8fca952835ef1ab1820c02b/charset_normalizer-3.4.9-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198", size = 338848, upload-time = "2026-07-07T14:34:15.688Z" }, + { url = "https://files.pythonhosted.org/packages/cd/91/7253a32e86b7e1d1239b1b36ba6dd0f021a21107ab33054b53119cc083b9/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32", size = 223022, upload-time = "2026-07-07T14:34:17.248Z" }, + { url = "https://files.pythonhosted.org/packages/cb/32/2e64bd2be10e89c61e57ebe6a93fd98ae88eb7ebe414b5121f22c96c69eb/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632", size = 241590, upload-time = "2026-07-07T14:34:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ef/d96ec496cfea0c21db43b0ad03891308b02388d054cc902cf0e5a1ad6a88/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf", size = 239584, upload-time = "2026-07-07T14:34:20.52Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ce/9af95f7876194bd7a14e3dfe4a4de2e0bff02666a3910d72beafd06cc297/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990", size = 230224, upload-time = "2026-07-07T14:34:22.189Z" }, + { url = "https://files.pythonhosted.org/packages/52/94/af74dde74a3996bd959c350709bfe50e297823d70a8c1cbd54b838880863/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d", size = 212667, upload-time = "2026-07-07T14:34:23.857Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/f1c4fe746c395922961b5916ed1d7d6e7d4c84851d19ed43cc89980ec953/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e", size = 227179, upload-time = "2026-07-07T14:34:25.586Z" }, + { url = "https://files.pythonhosted.org/packages/e4/56/6c745619ac397e8871e2bcd3cea1eec86b877488f33888b3aef5c3ed506e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c", size = 225372, upload-time = "2026-07-07T14:34:27.212Z" }, + { url = "https://files.pythonhosted.org/packages/78/ad/98aae8630ac71f16711968e38a5acfecce41b778bf2f0312851020f565a8/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2", size = 215222, upload-time = "2026-07-07T14:34:28.774Z" }, + { url = "https://files.pythonhosted.org/packages/f7/40/9593d54209765207a7f11073c06494c1721e4ca4a0a426c597679bf7f91e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534", size = 231958, upload-time = "2026-07-07T14:34:30.345Z" }, + { url = "https://files.pythonhosted.org/packages/b1/27/693ee5e8a18191eb38647360c51cd505013e2bd3b366aa43fd5344c21e3c/charset_normalizer-3.4.9-cp314-cp314t-win32.whl", hash = "sha256:0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226", size = 155580, upload-time = "2026-07-07T14:34:31.884Z" }, + { url = "https://files.pythonhosted.org/packages/80/3f/bd97d3d9c613013d07cb7733d299385b41df37f0471310f5a73dc359f0b8/charset_normalizer-3.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177", size = 167620, upload-time = "2026-07-07T14:34:33.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c6/eee9dca4439b1061f76373f06ea855678cc4a64c1c3c90b50e479edbb8eb/charset_normalizer-3.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501", size = 158037, upload-time = "2026-07-07T14:34:35.018Z" }, + { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size = 4032100, upload-time = "2026-06-12T20:02:32.143Z" }, + { url = "https://files.pythonhosted.org/packages/09/41/3797cfaf69cae04a13ee78ebd83f0678d9c02b4779d21ce24445326f1a69/cryptography-49.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db", size = 4692978, upload-time = "2026-06-12T20:01:21.305Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/4a/91/01ce7303a4579e6d3a6abef01bd322848e9ea7a219adcabc5048b9033571/cryptography-49.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2", size = 4700503, upload-time = "2026-06-12T20:02:47.091Z" }, + { url = "https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size = 5309779, upload-time = "2026-06-12T20:02:08.987Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size = 4337874, upload-time = "2026-06-12T20:02:54.323Z" }, + { url = "https://files.pythonhosted.org/packages/6d/88/05563c7fe2e914e87d1a536d06fe83e66b4e1d95cb593e05aea375531da8/cryptography-49.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7", size = 4700283, upload-time = "2026-06-12T20:01:34.822Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size = 5265844, upload-time = "2026-06-12T20:01:24.09Z" }, + { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/4f/01/339573cf1023163a400b0b5d16f6d507de413b9f60be6fd1b77feeaf6737/cryptography-49.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f", size = 4834612, upload-time = "2026-06-12T20:01:29.246Z" }, + { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:e5dfc1e64de5677cec922ffa8da89c546d0415bf6efdf081842e5d44c84e1f0e", size = 3810026, upload-time = "2026-06-12T20:02:39.262Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9e/db72b3ae7fc9cfad53e630e56c6ae83b9b6ff0bf3718ffb8012d20b3aabf/cryptography-49.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7", size = 4013892, upload-time = "2026-06-12T20:02:10.735Z" }, + { url = "https://files.pythonhosted.org/packages/86/12/c48a424f38db03027be9f7ed5c7dc5de9933dbee992865f98b13727a009d/cryptography-49.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d", size = 4678835, upload-time = "2026-06-12T20:02:48.743Z" }, + { url = "https://files.pythonhosted.org/packages/68/28/8a3ad4653662c93fc44dc4e5d8fd374c25c42e07b34bbfbadf49cf57a5a8/cryptography-49.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa", size = 4697239, upload-time = "2026-06-12T20:02:56.03Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b2/2193fc74f81aee4f9b62733133b73b5176718932ed8f2e4b03fa040480a6/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb", size = 4685593, upload-time = "2026-06-12T20:02:50.666Z" }, + { url = "https://files.pythonhosted.org/packages/47/f1/1d3eaa243bfc5de4a187b22aa8c048b3e4980bfbe830ac46e6bac2e66947/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:f37d847238971164fdbc68ade6f6574aecc9c0af714190e2083429ff68f4ce9d", size = 5289961, upload-time = "2026-06-12T20:01:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/58/39/2d51306721330c486495853eda1c567880ff036de15a14c4b74f399934af/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561", size = 4731145, upload-time = "2026-06-12T20:02:16.832Z" }, + { url = "https://files.pythonhosted.org/packages/17/50/983e838c7fd0d87fd8c969bcdd328edaf5f756e38df5281637424c155873/cryptography-49.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:07cab27cc7b7e0fd28e5e26bb9eeedde5c135c868b46de4a27845abe94af6122", size = 4321719, upload-time = "2026-06-12T20:02:52.611Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f5/8f571d7e27c55bce9f76f026143bcb1e040a4233149ecca0bea5fa5dd5f7/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505", size = 4685209, upload-time = "2026-06-12T20:02:07.282Z" }, + { url = "https://files.pythonhosted.org/packages/e7/84/0e27016a6fc5a0886f797018b26aa42f40c09a82332bff77822a451deaaa/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b970c6da94d5bb18629db453d14f2a1300f6bf59b61e9b82377931ef95504866", size = 5246285, upload-time = "2026-06-12T20:01:32.439Z" }, + { url = "https://files.pythonhosted.org/packages/11/2d/5e1fb307cb5931881516b464c98774b3f2c36b5d4bb9a2830253cf553cad/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8", size = 4730441, upload-time = "2026-06-12T20:02:01.469Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c0/bff5a02ee731d207d6a1ed51732549d8c53d2bc8da1d10ec6f2844201d68/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3", size = 4815869, upload-time = "2026-06-12T20:01:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/814681d14248d95d73d5c3eea0c39a94eb8302df966f670a2c60de90974b/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27", size = 4960948, upload-time = "2026-06-12T20:02:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/93ecac273d3738939d023612ad12cca9a3740a5345d69fda04134c43fd96/cryptography-49.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:33cd0565932807baddb67b96dbee92f2c374b5c89dee09fd74079aeb8c8dba61", size = 3799153, upload-time = "2026-06-12T20:01:39.059Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size = 4025947, upload-time = "2026-06-12T20:01:25.745Z" }, + { url = "https://files.pythonhosted.org/packages/3d/df/40577043ca124e17012f408ddddaeb213b856336ac82ddb3bc915f39e29f/cryptography-49.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4", size = 4692429, upload-time = "2026-06-12T20:01:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/a5/4d/9c0cd02f95e2602dd5e563da149ee0830abef3537be8b34dc56281ebe27a/cryptography-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69", size = 4697758, upload-time = "2026-06-12T20:01:41.13Z" }, + { url = "https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size = 5298863, upload-time = "2026-06-12T20:02:24.579Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size = 4334173, upload-time = "2026-06-12T20:01:44.743Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ee/6fca21d1ac73e06f8bef71940abfd4d2f6472b4bca284d770f32bd4086f6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc", size = 4697298, upload-time = "2026-06-12T20:02:20.918Z" }, + { url = "https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size = 5254338, upload-time = "2026-06-12T20:02:22.737Z" }, + { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a0/db537264e234f7273a73ec020873d6d6b39dfd8a53db78b550ca8320440e/cryptography-49.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e", size = 4834820, upload-time = "2026-06-12T20:01:51.847Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e6/f60198ea8d9dfa15fff9ed4ca02ce362f6eadd9ba757dcc50634c4257b63/cryptography-49.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001", size = 3785547, upload-time = "2026-06-12T20:02:26.847Z" }, + { url = "https://files.pythonhosted.org/packages/63/d3/4a83af35d65e3fad632c926fad684c193ea4398569ccb0bbbc7fe8f5dc9a/cryptography-49.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fc1e275c2f1d97b1a6450b8b0ea3ebfa6e087a611c2b26cb2404d48588abab7b", size = 3993685, upload-time = "2026-06-12T20:02:14.883Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a7/f9dac0ab7f80368c56993a7bf638ef9935f825c91902798481fac0898138/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83782480a4a9da4d0feb51950131ba32e12e70813848b3343f6e18c28a66838", size = 4676239, upload-time = "2026-06-12T20:02:28.793Z" }, + { url = "https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size = 4715584, upload-time = "2026-06-12T20:01:27.495Z" }, + { url = "https://files.pythonhosted.org/packages/94/64/2923570ac1c0bd3a737aa366ac3abbbbde273042308b8cde95e2364a6e6a/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:b47db11c2c3525083296069b98ac5221907455e989ae0c2e3008bde851921615", size = 4675885, upload-time = "2026-06-12T20:01:55.49Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f8/614dc7e051418cfe53d55173c1e24c6b0085e89996fe90508c2fdf769aef/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:084ef1af862eb07ec46d25f68689f2102a9fc0e05ce7b80f14f5fe51e4eef0f6", size = 4715449, upload-time = "2026-06-12T20:02:05.469Z" }, + { url = "https://files.pythonhosted.org/packages/aa/50/a9caea39ad19c431c1a3f8a31114df65b260cdfe67786b6c7e7c040c4c44/cryptography-49.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be9fcb48a55f023493482827d4f459bd263cc20efde64f204b97c123201850c6", size = 3783731, upload-time = "2026-06-12T20:02:43.319Z" }, +] + +[[package]] +name = "cyclopts" +version = "4.22.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "docstring-parser" }, + { name = "rich" }, + { name = "rich-rst" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/47/32d992e829f63aedea5b93360db23c8882c9bbbde094bcf0fff899ea8a3b/cyclopts-4.22.1.tar.gz", hash = "sha256:49cd3779da7113a96ac5c23b151aa61ac9ae1b4b1fe813594d207ca843c97892", size = 193551, upload-time = "2026-07-20T17:38:59.38Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/89/f2710638cd2f824cb976777e63ef6ed1e83fc56888cf5c9f5a053490b7be/cyclopts-4.22.1-py3-none-any.whl", hash = "sha256:9b614e231075aee9849c0bfd78f7611ab7adf417f16af5b9e42b9ed6e18c17d1", size = 232953, upload-time = "2026-07-20T17:38:58.078Z" }, +] + +[[package]] +name = "datasets" +version = "5.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "filelock" }, + { name = "fsspec", extra = ["http"] }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "multiprocess" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "packaging" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/85/ce4f780c32f7e36d71257f1c27e8ba898ebe379cb54f211f5f2013f2c219/datasets-5.0.0.tar.gz", hash = "sha256:83dbbbdb07a33b82192b8c419deb18739b138ee2ce1a322d55ce6b100954ec1a", size = 631708, upload-time = "2026-06-05T13:18:26.124Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/66/73034ad30b59f13439b75e620989dacba4c047256e358ba7c2e9ec98ea22/datasets-5.0.0-py3-none-any.whl", hash = "sha256:7dd34927a0fd7046e98aad5cb9430e699c373238a15befa7b9bf22b991a7fee6", size = 555084, upload-time = "2026-06-05T13:18:24.435Z" }, +] + +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "docstring-parser" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/4d/f332313098c1de1b2d2ff91cf2674415cc7cddab2ca1b01ae29774bd5fdf/docstring_parser-0.18.0.tar.gz", hash = "sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015", size = 29341, upload-time = "2026-04-14T04:09:19.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-py3-none-any.whl", hash = "sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b", size = 22484, upload-time = "2026-04-14T04:09:18.638Z" }, +] + +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "fastapi" +version = "0.139.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/95/d3f0ae10836324a2eab98a52b61210ac609f08200bf4bb0dc8132d32f78a/fastapi-0.139.2.tar.gz", hash = "sha256:333145a6891e9b5b3cfceb69baf817e8240cde4d4588ae5a10bf56ffacb6255e", size = 423428, upload-time = "2026-07-16T15:06:17.912Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/c7/cb03251d9dfb177246a9809a76f189d21df32dbd4a845951881d11323b7f/fastapi-0.139.2-py3-none-any.whl", hash = "sha256:b9ad015a835173d59865e2f5d8296fbc2b317bf56a2ba1a5bfbdd03de2fd4b1c", size = 130234, upload-time = "2026-07-16T15:06:19.557Z" }, +] + +[[package]] +name = "fastmcp" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastmcp-slim", extra = ["client", "server"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/f7/5188565d1b93ad611cbd80bf473e7ad669d1f3b689c4bedcd304e1ec3472/fastmcp-3.4.4.tar.gz", hash = "sha256:378202e26ec15b23819d9a1c0d1b0ebda096bc712720532010a0b82a45c2b1df", size = 28796458, upload-time = "2026-07-09T00:32:41.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/67/3cef84ba38a23dca1e1e776bfda8a35ab3c7a6c94a8ca81d0715de6dd3c5/fastmcp-3.4.4-py3-none-any.whl", hash = "sha256:f86f208713212260068cf55c32936839eee856fefc7808e18a032f31eb0f718e", size = 8019, upload-time = "2026-07-09T00:32:39.411Z" }, +] + +[[package]] +name = "fastmcp-slim" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pydantic", extra = ["email"] }, + { name = "pydantic-settings" }, + { name = "python-dotenv" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/79/f35661c6a1d76dfbe17a079f912d96fffcfdd40fad5a9144bb9e7dfb1fdf/fastmcp_slim-3.4.4.tar.gz", hash = "sha256:dcaa3e0be2127d7eacdce592c2ef0039204923dc0ec396454615cb4a3275b078", size = 590203, upload-time = "2026-07-09T00:32:20.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/91/321e0b2e9ed70d0628b17ddaec76fc7b09f3e1d5d290f70bf101a2890142/fastmcp_slim-3.4.4-py3-none-any.whl", hash = "sha256:9d3a6327b9ee835188eb7323fc3b5d4cd061631b48da8ece56794bb538972505", size = 765158, upload-time = "2026-07-09T00:32:19.11Z" }, +] + +[package.optional-dependencies] +client = [ + { name = "authlib" }, + { name = "exceptiongroup" }, + { name = "httpx" }, + { name = "mcp" }, + { name = "opentelemetry-api" }, + { name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] }, + { name = "starlette" }, +] +server = [ + { name = "authlib" }, + { name = "cyclopts" }, + { name = "exceptiongroup" }, + { name = "griffelib" }, + { name = "httpx" }, + { name = "joserfc" }, + { name = "jsonref" }, + { name = "jsonschema-path" }, + { name = "mcp" }, + { name = "openapi-pydantic" }, + { name = "opentelemetry-api" }, + { name = "packaging" }, + { name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] }, + { name = "pyperclip" }, + { name = "python-multipart" }, + { name = "pyyaml" }, + { name = "starlette" }, + { name = "uncalled-for" }, + { name = "uvicorn" }, + { name = "watchfiles" }, + { name = "websockets" }, +] + +[[package]] +name = "filelock" +version = "3.32.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/80/8232b582c4b318b817cf1274ba74976b07b34d35ef439b3eb948f98645a1/filelock-3.32.0.tar.gz", hash = "sha256:7be2ad23a14607ccc71808e68fe30848aeace7058ace17852f68e2a68e310402", size = 213757, upload-time = "2026-07-21T13:17:42.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3", size = 97732, upload-time = "2026-07-21T13:17:41.55Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, + { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, + { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, + { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, + { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, + { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, + { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, + { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, + { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, + { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, + { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, + { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, + { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, + { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, + { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, + { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760, upload-time = "2026-04-29T20:42:38.635Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, +] + +[package.optional-dependencies] +http = [ + { name = "aiohttp" }, +] + +[[package]] +name = "gradio" +version = "6.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13'" }, + { name = "brotli" }, + { name = "fastapi" }, + { name = "gradio-client" }, + { name = "groovy" }, + { name = "hf-gradio" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "orjson" }, + { name = "packaging" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pillow" }, + { name = "pydantic" }, + { name = "pydub" }, + { name = "python-multipart" }, + { name = "pytz" }, + { name = "pyyaml" }, + { name = "safehttpx" }, + { name = "semantic-version" }, + { name = "starlette" }, + { name = "tomlkit" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "uvicorn" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/96/3618f8a189180ab3d4e5f8b258fd92e419eda9f49b6ab4dd50c6782cda33/gradio-6.20.0.tar.gz", hash = "sha256:8672866e9225a1f8297325a6742bb525a3a0ddc8aa4d75d99beb10a27ea2915f", size = 44844340, upload-time = "2026-07-07T18:53:57.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/f4/7dc4540836e326391a9d1ba20193d795d5a4582839b60f5c10397f5120bb/gradio-6.20.0-py3-none-any.whl", hash = "sha256:91d2ec29c37917d55b18dba87aa15bb15c4796d84dce9a9ef4ec7d87453a7fee", size = 30964820, upload-time = "2026-07-07T18:53:52.403Z" }, +] + +[[package]] +name = "gradio-client" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fsspec" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "packaging" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e8/e6/6b6029f5fe2ad7f1211105d530e34d991014c2cae463f9223033031cfc4f/gradio_client-2.5.0.tar.gz", hash = "sha256:4cde99bad62149595c30c90876ca2e405e3a13687ecf895474f3412cb476673d", size = 59013, upload-time = "2026-04-20T23:16:21.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/81/0a861b8e1ff42960139c6cd4c7dd591292fa09ea1ae2d87677441cba4c00/gradio_client-2.5.0-py3-none-any.whl", hash = "sha256:d43e2179c29076292a76485ad7ed2e6eaa19d14ac58283bd7f5beabfe4ca958c", size = 59952, upload-time = "2026-04-20T23:16:20.186Z" }, +] + +[[package]] +name = "griffelib" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/e4/8d187ea29c2e30b3a09505c567513077d6117861bde1fbd997a167f262ec/griffelib-2.1.0.tar.gz", hash = "sha256:762a186d2c6fd6794d4ea20d428d597ffb857cb56b66421651cbba15bdd5e813", size = 216234, upload-time = "2026-06-19T12:05:42.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl", hash = "sha256:cc7b3d2d2865ad0b909fcc38086e3f554b5ea7acbaa7bbb7ecaa3f5dfb7d9f00", size = 142560, upload-time = "2026-06-19T12:05:38.742Z" }, +] + +[[package]] +name = "groovy" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/36/bbdede67400277bef33d3ec0e6a31750da972c469f75966b4930c753218f/groovy-0.1.2.tar.gz", hash = "sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083", size = 17325, upload-time = "2025-02-28T20:24:56.068Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090, upload-time = "2025-02-28T20:24:55.152Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hf-gradio" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gradio-client" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/86/c9694b7cfada5780e75769e60dc161a161f4dd7fc91b61db5e3a3338bef9/hf_gradio-0.4.1.tar.gz", hash = "sha256:a017d942618f0d495a58ee4563047fa04bef614c00e0cb789a9a6d0633cffa7b", size = 6560, upload-time = "2026-04-22T14:01:32.334Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/2d/afff2ee87e75d8eb85c92bb8cf0e15b05c23c2ebd8fd8dec781d8601ed7f/hf_gradio-0.4.1-py3-none-any.whl", hash = "sha256:76b8cb8be6abe62d74c1ad2d35b42f0629db89aa9e1a8d033cecfe7c856eeab3", size = 4482, upload-time = "2026-04-17T19:53:31.827Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/63/39/67be8d71f900d9a55761b6022821d6679fb56c64f1b6063d5af2c2606727/hf_xet-1.5.2.tar.gz", hash = "sha256:73044bd31bae33c984af832d19c752a0dffb67518fee9ddbd91d616e1101cf47", size = 903674, upload-time = "2026-07-16T17:29:56.833Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/be/525eabac5d1736b679c39e342ecd4292534012546a2d18f0043c8e3b6021/hf_xet-1.5.2-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:4a5ecb9cda8512ba2aa8ee5d37c87a1422992165892d653098c7b90247481c3b", size = 4064284, upload-time = "2026-07-16T17:29:29.907Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3f/699749dd78442480eda4e4fca494284b0e3542e4063cc37654d5fdc929e6/hf_xet-1.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8764488197c1d7b1378c8438c18d2eea902e150dbca0b0f0d2d32603fb9b5576", size = 3828537, upload-time = "2026-07-16T17:29:31.549Z" }, + { url = "https://files.pythonhosted.org/packages/22/d7/2658ac0a5b9f4664ca27ce31bd015044fe9dea50ed455fb5197aba819c11/hf_xet-1.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8d7446f72abbf7e01ca5ff131786bc2e74a56393462c17a6bf1e303fbab81db4", size = 4417133, upload-time = "2026-07-16T17:29:33.391Z" }, + { url = "https://files.pythonhosted.org/packages/d9/58/8343f3cb63c8fa058d576136df3871550f7d5214a8f048a7ea2eab6ac906/hf_xet-1.5.2-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:580e59e29bf37aece1f2b68537de1e3fb04f43a23d910dcf6f128280b5bfbba4", size = 4212613, upload-time = "2026-07-16T17:29:34.989Z" }, + { url = "https://files.pythonhosted.org/packages/0c/33/a968f4e4535037b36941ec00714625fb60e026302407e7e26ca9f3e65f4e/hf_xet-1.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bee28c619622d36968056532fd49cf2b35ca75099b1d616c31a618a893491380", size = 4412710, upload-time = "2026-07-16T17:29:36.646Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/9e33981173dbaf194ba0015202b02d467b624d44d4eba89e1bf06c0d2995/hf_xet-1.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e396ab0faf6298199ad7a95305c3ca8498cb825978a6485be6d00587ee4ec577", size = 4628455, upload-time = "2026-07-16T17:29:38.352Z" }, + { url = "https://files.pythonhosted.org/packages/e9/4b/cc682832de4264a03880a2d1b5ec3e1fab3bf307f508817250baafdb9996/hf_xet-1.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fd3add255549e8ef58fa35b2e42dc016961c050600444e7d77d030ba6b57120e", size = 3979044, upload-time = "2026-07-16T17:29:40.329Z" }, + { url = "https://files.pythonhosted.org/packages/ea/09/b2cdf2a0fb39a08af3222b96092a36bd3b40c54123eef07de4422e870971/hf_xet-1.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d6f9c58549407b84b9a5383afd68db0acc42345326a3159990b36a5ca8a20e4e", size = 3808037, upload-time = "2026-07-16T17:29:42.357Z" }, + { url = "https://files.pythonhosted.org/packages/de/ba/2b70603c7552db82baeb2623e2336898304a17328845151be4fe1f48d420/hf_xet-1.5.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f922b8f5fb84f1dd3d7ab7a1316354a1bca9b1c73ecfc19c76e51a2a49d29799", size = 4033760, upload-time = "2026-07-16T17:29:43.884Z" }, + { url = "https://files.pythonhosted.org/packages/60/ac/b097a86a1e4a6098f3a79382643ab09d5733d87ccc864877ad1e12b49b70/hf_xet-1.5.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:045f84440c55cdeb659cf1a1dd48c77bcd0d2e93632e2fea8f2c3bdee79f38ed", size = 3841438, upload-time = "2026-07-16T17:29:45.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/35/db860aa3a0780660324a506ad4b3d322ddc6ecbba4b9340aed0942cbf21c/hf_xet-1.5.2-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db78c39c83d6279daddc98e2238f373ab8980685556d42472b4ec51abcf03e8c", size = 4428006, upload-time = "2026-07-16T17:29:46.996Z" }, + { url = "https://files.pythonhosted.org/packages/af/6b/832dd980af4b0c3ae0660e309285f2ffcdff2faa38129390dbb47aa4a3f9/hf_xet-1.5.2-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7db73c810500c54c6760be8c39d4b2e476974de85424c50063efc22fdda13025", size = 4221099, upload-time = "2026-07-16T17:29:48.525Z" }, + { url = "https://files.pythonhosted.org/packages/9e/05/ae50f0d34e3254e6c3e208beb2519f6b8673016fc4b3643badaf6450d186/hf_xet-1.5.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6395cfe3c9cbead4f16b31808b0e67eac428b66c656f856e99636adaddea878f", size = 4420766, upload-time = "2026-07-16T17:29:50.092Z" }, + { url = "https://files.pythonhosted.org/packages/07/a9/c050bc2743a2bcd68928bfee157b08681667a164a24ec95fbfcfcd717e08/hf_xet-1.5.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cde8cd167126bb6109b2ceb19b844433a4988643e8f3e01dd9dd0e4a34535097", size = 4636716, upload-time = "2026-07-16T17:29:51.62Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f8/68b01c5c2edb56ac9a67b3d076ffddcb90867abaee923923eb34e7a14e76/hf_xet-1.5.2-cp38-abi3-win_amd64.whl", hash = "sha256:ecf63d1cb69a9a7319910f8f83fcf9b46e7a32dfcf4b8f8eeddb55f647306e65", size = 3988373, upload-time = "2026-07-16T17:29:53.395Z" }, + { url = "https://files.pythonhosted.org/packages/39/c6/988383e9dc17294d536fcbcd6fd16eed882e411ad16c954984a53e47b09c/hf_xet-1.5.2-cp38-abi3-win_arm64.whl", hash = "sha256:1da28519496eb7c8094c11e4d25509b4a468457a0302d58136099db2fd9a671d", size = 3816957, upload-time = "2026-07-16T17:29:54.991Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "1.24.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/9b/d3bb4e7d792835daf34dd7091bbc7d7b4e0437d9388f1ea7239cce49f478/huggingface_hub-1.24.0.tar.gz", hash = "sha256:18431ff4daae0749aa9ba102fc952e314c98e1d30ebdec5319d85ca0a83e1ae5", size = 921848, upload-time = "2026-07-17T09:54:01.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/c3/aeaaf3911d2529614be18d1c8b5496afc185560e76568063d517283318af/huggingface_hub-1.24.0-py3-none-any.whl", hash = "sha256:6ed4120a84a6beec900640aa7e346bd766a6b7341e41526fef5dc8bd81fb7d59", size = 771904, upload-time = "2026-07-17T09:53:59.106Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "jaraco-classes" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, +] + +[[package]] +name = "jaraco-context" +version = "6.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-tarfile", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/50/4763cd07e722bb6285316d390a164bc7e479db9d90daa769f22578f698b4/jaraco_context-6.1.2.tar.gz", hash = "sha256:f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3", size = 16801, upload-time = "2026-03-20T22:13:33.922Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl", hash = "sha256:bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535", size = 7871, upload-time = "2026-03-20T22:13:32.808Z" }, +] + +[[package]] +name = "jaraco-functools" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/1f/c23395957d41ccf27c4e535c3d334c4051e5395b3752057ba4cbaec35c56/jaraco_functools-4.6.0.tar.gz", hash = "sha256:880c577ec9720b3a052d5bc611fb9f2269b3d87902ef42440df443b88e443280", size = 20837, upload-time = "2026-07-14T01:28:02.544Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/36/ecc85bc96c273dc8a11273ed4782272975e6338d4a3e9228621175edf0e3/jaraco_functools-4.6.0-py3-none-any.whl", hash = "sha256:99e3dc0060c5cbe8fcd1cdb36258e2a65ca40f1566b2033b12abb1bb44dd3c30", size = 11677, upload-time = "2026-07-14T01:28:01.59Z" }, +] + +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jiter" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/1f/10936e16d8860c70698a1aa939a46aa0224813b782bce4e000e637da0b2d/jiter-0.16.0.tar.gz", hash = "sha256:7b24c3492c5f4f84a37946ad9cf504910cf6a782d6a4e0689b6673c5894b4a1c", size = 176431, upload-time = "2026-06-29T13:05:13.657Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/d8/b959609e44012a42b1f3e5ba98ea3b33c7e41e6d4b77cd8f00fd19b1d3ad/jiter-0.16.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fc4f8def331036a7b8e981b4347ebe409981edbc8308a5ea842b8c3614fa6c", size = 310082, upload-time = "2026-06-29T13:02:31.356Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3d/4d7f5667ea0e0548534ba880b84bb3d12924fd133aa83ad6c6c80fca3d76/jiter-0.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a71d0d2014c3275043e1170bf3d4e771493cb0dcf07be54c567155f4d8ee64b", size = 315643, upload-time = "2026-06-29T13:02:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/9b/83/bed2dcb5c9f3e1ccfcbc67dda48265fe7d5ad0c9cadda5fe95f6e3b87f94/jiter-0.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:741eed508c233a76313a1c7b001f8f21b82f14327e9196ae8bd29a2cc164ae84", size = 341363, upload-time = "2026-06-29T13:02:34.853Z" }, + { url = "https://files.pythonhosted.org/packages/f4/2f/6bb3c3dda668ebc0445689c81a2b0f26a82b10843d67ed9c9b2c3edc177f/jiter-0.16.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3fb7bc819187b56dc48aa5c833aaf92257da8e07efdb9306156667bd2eeb491c", size = 365483, upload-time = "2026-06-29T13:02:36.295Z" }, + { url = "https://files.pythonhosted.org/packages/92/35/8a045ccb39164e70dcdae696413b661771f148b68b12b175c3a04d901937/jiter-0.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c9610fd25ebccb43fca584136f5c2fbb26802447eccd430dfdbab95a0fd5126", size = 461219, upload-time = "2026-06-29T13:02:38.116Z" }, + { url = "https://files.pythonhosted.org/packages/e7/99/22292dbbf0ed0c610cfe5ddc7f3bd67237a412f121318f865196e62a07bd/jiter-0.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a1d68ff7ca1d3b5dee20a97a3decda7d5f15003823bf6d140c81f8561d3bc5c", size = 374905, upload-time = "2026-06-29T13:02:40.357Z" }, + { url = "https://files.pythonhosted.org/packages/29/ac/2f55ccb1f0eeafa6d89d24caf52f6f0944a59290ee199e9ade62177dca42/jiter-0.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb08c276dd02dac3a284acdd02cacc630d2e3cd6572a4b85519f35cbd133c3de", size = 348320, upload-time = "2026-06-29T13:02:41.923Z" }, + { url = "https://files.pythonhosted.org/packages/50/e3/7d88b9174c40064fabc07c84a9b62e6b10f5644562ec0e0a29392edbe978/jiter-0.16.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:8fc4d94713c4697347e38faf7d6ef91547c142219bdcfc7220c4870879974244", size = 356519, upload-time = "2026-06-29T13:02:43.436Z" }, + { url = "https://files.pythonhosted.org/packages/27/57/c4a33aeef513a9d5e26e31534e0bcc752d6ea0e54c94ddb7b68bade669c2/jiter-0.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0f05e229edb29e68cdd0ccb83cea13b64263416120cf943767a6fd72e6787f", size = 394204, upload-time = "2026-06-29T13:02:44.987Z" }, + { url = "https://files.pythonhosted.org/packages/9d/70/c6c23e76ebb3766b111bc399437bbc9f870a76e2a92e10b2a5f561d57372/jiter-0.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2c842cbf374a8daf50b2c04212995bee34ca2ac2cdc29a901b4cdb072c9c4131", size = 521477, upload-time = "2026-06-29T13:02:46.724Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d3/0001c8c0c5976af2625bb1cfb1895e8ec693b6589fe4574b8e6fc2c85501/jiter-0.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5ed466aee31294d7cdcd4d37dfe5c42c97bc29d9a5f00eacf24504358309cb9b", size = 552187, upload-time = "2026-06-29T13:02:48.144Z" }, + { url = "https://files.pythonhosted.org/packages/f6/76/311b718e07e85740e48619c0632b36f7e0b8d113984499e436452ed13a9a/jiter-0.16.0-cp310-cp310-win32.whl", hash = "sha256:b42e9ff5376819c053da25809a8d4b6fa6e473b4856ebe42e298ac958be3d7f9", size = 206513, upload-time = "2026-06-29T13:02:49.515Z" }, + { url = "https://files.pythonhosted.org/packages/db/7f/ac680eeb0777dc0eb7dc824800ba27880d7f6bc712e362d34ad8ee559f36/jiter-0.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:10438939205546132189c8e74a2d536a707841f3a25cd7c74ee91fe503407a26", size = 199505, upload-time = "2026-06-29T13:02:50.829Z" }, + { url = "https://files.pythonhosted.org/packages/4e/3f/fae6cc967d120ec89e31c5418a51176d8278b3087fbb384a9176754f353c/jiter-0.16.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:67fddeda1688f0cce2d2ae83ccf8a80f79936f2d2997d6cc2261f82fdb54a4d3", size = 309289, upload-time = "2026-06-29T13:02:52.301Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e3/97c6c3562c077f6247d6e6ce5c82562500b6316c0d928e97e106b7a1321a/jiter-0.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c90c0f63df322be920eda6ce622e3083d8906ba267f8220fe7873213b8b4430e", size = 315181, upload-time = "2026-06-29T13:02:53.964Z" }, + { url = "https://files.pythonhosted.org/packages/7b/89/d8d073f8aa2667e46c6c0873f86fe4a512bba4293cc730f626a076211a62/jiter-0.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64c0203212098470032aabcde9356fc168f377aade3e43def61dfe17e92f2037", size = 340939, upload-time = "2026-06-29T13:02:55.412Z" }, + { url = "https://files.pythonhosted.org/packages/87/c9/db4fda3ed73fb864139305e935e5b8b38a5a24692a5a9dd356c22f1b9c8d/jiter-0.16.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12288303c9844e61e1651d02a9a6f6633e47d39f897d6991d1427161ce6b746e", size = 364932, upload-time = "2026-06-29T13:02:57.28Z" }, + { url = "https://files.pythonhosted.org/packages/a2/74/52b5e86241057f52ddd7c9a580f90effb51f9d06239f6fc612279b91a838/jiter-0.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cf109d010b4b05a105afb3d43be36a21322d345ad3111e13d15f680afef0e5b", size = 461132, upload-time = "2026-06-29T13:02:58.994Z" }, + { url = "https://files.pythonhosted.org/packages/a9/87/544a700f7447c1f31c5d7833821a4daa5683165c2d5a094fbf5b5800c3dc/jiter-0.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62c1b7fe1f77925acf5af68b6140b8810fa87dfd4dc0a9c8568ec2fa2a10429c", size = 374857, upload-time = "2026-06-29T13:03:00.455Z" }, + { url = "https://files.pythonhosted.org/packages/40/cd/0fcc3f7d39183674d5bfa9ec640faaeb506c60be7c8f94625dfba366e37c/jiter-0.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8597d23c87f59294f83bcb6229b9ed1fccee13dbba967b46930d2f1759466fee", size = 347053, upload-time = "2026-06-29T13:03:02.045Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ae/c7e64e7932ad597fa395b61440b249ada6366716e25c6e08dd2afbd021e6/jiter-0.16.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:3126a5dbad56401989ac769aca0cb56005bfb3e2366eea0ca99d1a91c3c1ee03", size = 356153, upload-time = "2026-06-29T13:03:03.706Z" }, + { url = "https://files.pythonhosted.org/packages/d4/1c/1c719044f14da814e1a060191ab19b96f3e99207bc5b4bfc6d6be34b3f80/jiter-0.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c4b4717bdb35ae456f831a6b08d01880fff399887a6bbc526a583a406e484eea", size = 393956, upload-time = "2026-06-29T13:03:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/3b/dc/7b2f303a2847207e265503853a2d964a55354cffd62a5f2936c155486798/jiter-0.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:adff21bc78edfe086c15eb495b900306076de378dc2337c132401fc39bd79c91", size = 521081, upload-time = "2026-06-29T13:03:06.886Z" }, + { url = "https://files.pythonhosted.org/packages/c2/5f/501cf6e1e09caeb420195179ffc6f62aca603f1220ec53fd80d0d70b3e56/jiter-0.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dab907db06fc593645e73109acf4581ba5b548897d28b9348dc41ddc8343b2d3", size = 552085, upload-time = "2026-06-29T13:03:08.339Z" }, + { url = "https://files.pythonhosted.org/packages/79/54/aa5be86520113b79455c3877f3d1f07a348098df4083ba3688e9537e52dd/jiter-0.16.0-cp311-cp311-win32.whl", hash = "sha256:560b2cf3fb03240cd34f27409a238547488708f05b7c3924f571a60422251ec7", size = 206755, upload-time = "2026-06-29T13:03:09.653Z" }, + { url = "https://files.pythonhosted.org/packages/64/ec/2feb893eb330bd69b413866f4d5daada33c3962f1c6f270c91ca2d87fdf9/jiter-0.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:e431cfc9caf44c1d5459ff77d4e64cbf85fddb6a35dad836a15c6a9ec23087c1", size = 199155, upload-time = "2026-06-29T13:03:10.979Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9c/ca040d94415048a3666fc237774df8151c96f8d2b661cbe3b184acc95876/jiter-0.16.0-cp311-cp311-win_arm64.whl", hash = "sha256:2a8e9e39cf083016137aa5cadafe3188adc2ba6ba1fbf1e5d18889ad3e9ad056", size = 194403, upload-time = "2026-06-29T13:03:12.341Z" }, + { url = "https://files.pythonhosted.org/packages/83/2b/52ace16ed031354f0539749a49e4bf33797d82bea5137910835fa4b09793/jiter-0.16.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:67c3bc1760f8c99d805dcab4e644027142a53b1d5d861f18780ebdbd5d40b72a", size = 306943, upload-time = "2026-06-29T13:03:14.035Z" }, + { url = "https://files.pythonhosted.org/packages/94/2e/34957c2c1b661c252ba9bcc60ae0bddc27e0f7202c6073326a13c5390eec/jiter-0.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5af7780e4a26bd7d0d989592bf9ef12ebf806b74ab709223ecca37c749872ea9", size = 307779, upload-time = "2026-06-29T13:03:15.418Z" }, + { url = "https://files.pythonhosted.org/packages/88/6c/59bd309cab4460c54cf1079f3eb7fe7af6a4c895c5c957a53378693bad2b/jiter-0.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5bf78d0e05e45cfdd66558893938d59afe3d1b1a824a202039b20e607d25a72", size = 335826, upload-time = "2026-06-29T13:03:17.11Z" }, + { url = "https://files.pythonhosted.org/packages/3b/8c/f5ef7b65f0df47afa16596969defb281ebb86e96df346d62be6fd853d620/jiter-0.16.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f4444a83f946605990c98f625cdd3d2725bfb818158760c5748c653170a20e0e", size = 362573, upload-time = "2026-06-29T13:03:18.781Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0b/ace4354da061ee38844a0c27dc2c21eecd27aea119e8da324bea987522d0/jiter-0.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a23f0e4f957e1be65752d2dfac9a5a06b1917af8dc85deb639c3b9d02e31290", size = 457979, upload-time = "2026-06-29T13:03:20.293Z" }, + { url = "https://files.pythonhosted.org/packages/55/40/c0253d3772eb9dcd8e6606ee9b2d53ec8e5b814589c47f140aa585f21eaa/jiter-0.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c22a488f7b9218e245a0025a9ba6b100e2e54700831cf4cf16833a27fba3ad01", size = 372302, upload-time = "2026-06-29T13:03:21.739Z" }, + { url = "https://files.pythonhosted.org/packages/a8/d2/4839422241aa12860ce597b20068727094ba0bc480723c74924ca5bad483/jiter-0.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46add52f4ad47a08bfb1219f3e673da972191489a33016edefdb5ea55bfa8c48", size = 343805, upload-time = "2026-06-29T13:03:23.384Z" }, + { url = "https://files.pythonhosted.org/packages/e2/59/e196888a05befdda7dbe299b722d56f2f6eec65402bc34c0a3306d595feb/jiter-0.16.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:9c8a956fd72c2cf1e730d01ea080341f13aa0a97a4a33b51abebe725b7ae9ca9", size = 351107, upload-time = "2026-06-29T13:03:24.815Z" }, + { url = "https://files.pythonhosted.org/packages/ec/74/4cd9e0fca65232136400354b630fbfcd2de634e22ccbb96567725981b548/jiter-0.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:561926e0573ffe4a32498420a76d64b16c513e1ab413b9d28158a8764ac701e5", size = 388441, upload-time = "2026-06-29T13:03:26.266Z" }, + { url = "https://files.pythonhosted.org/packages/d9/8c/554691e48bc711299c0a293dd8a6179e24b2d66a54dc295421fcf64569c0/jiter-0.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:44d019fa8cdaf89bf29c71b39e3712143fdd0ac76725c6ef954f9957a5ea8730", size = 516354, upload-time = "2026-06-29T13:03:28.02Z" }, + { url = "https://files.pythonhosted.org/packages/a4/cb/01e9d69dc2cc6759d4f91e230b34489c4fdb2518992650633f9e20bece89/jiter-0.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0df91907609837f33341b8e6fe73b95991fdaa57caf1a0fbd343dffe826f386f", size = 547880, upload-time = "2026-06-29T13:03:29.534Z" }, + { url = "https://files.pythonhosted.org/packages/79/70/2953195f1c6ad00f49fa67e13df7e60acb3dd4f387101bc15abccddd905e/jiter-0.16.0-cp312-cp312-win32.whl", hash = "sha256:51d7b836acb0108d7c77df1742332cac2a1fa04a74d6dacec46e7091f0e91274", size = 203473, upload-time = "2026-06-29T13:03:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/05/2909a8b10699a4d560f8c502b6b2c5f3991b682b1922c1eedda242b225bd/jiter-0.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:1878349266f8ee36ecb1375cc5ba2f115f35fd9f0a1a4119e725e379126647f7", size = 196905, upload-time = "2026-06-29T13:03:32.472Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a9/6b82bb1c8d7790d602489b967b982a909e5d092875a6c2ade96444c8dfc5/jiter-0.16.0-cp312-cp312-win_arm64.whl", hash = "sha256:2ed5738ae4af18271a51a528b8811b0cbfa4a1858de9d83359e4169855d6a331", size = 190618, upload-time = "2026-06-29T13:03:34.672Z" }, + { url = "https://files.pythonhosted.org/packages/91/c0/555fc60473d30d66894ba825e63615e3be7524fac23858356afa7a38906c/jiter-0.16.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:41977aa5654023948c2dae2a81cbf9c43343954bef1cd59a154dd15a4d84c195", size = 306203, upload-time = "2026-06-29T13:03:36.243Z" }, + { url = "https://files.pythonhosted.org/packages/d0/2b/c3eaf16f5d7c9bad66ea32f40a95bd169b29a91217fcc7f081375157e99c/jiter-0.16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d28bb3c26762358dadf3e5bf0bccd29ae987d65e6988d2e6f49829c76b003c09", size = 306489, upload-time = "2026-06-29T13:03:37.846Z" }, + { url = "https://files.pythonhosted.org/packages/96/3f/02fdfc6705cad96127d883af5c34e4867f554f29ec7705ec1a46156400a9/jiter-0.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0542a7189c26920778658fc8fcf2af8bae05bae9924577f71804acef37996536", size = 335453, upload-time = "2026-06-29T13:03:39.221Z" }, + { url = "https://files.pythonhosted.org/packages/b2/a6/e4bda5920d4b0d7c5dfb7174ce4a6b2e4d3e11c9162c452ef0eab4cdbdbd/jiter-0.16.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8fb8de1e23a0cb2a7f53c335049c7b72b6db41aa6227cdcc0972a1de5cb39450", size = 361625, upload-time = "2026-06-29T13:03:40.597Z" }, + { url = "https://files.pythonhosted.org/packages/b7/97/4e6b59b2c6e55cbb3e183595f81ad65dcfb21c915fee5e19e335df21bc55/jiter-0.16.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b72d0b2990ca754a9102779ac98d8597b7cb31678958562214a007f909eab78e", size = 456958, upload-time = "2026-06-29T13:03:42.074Z" }, + { url = "https://files.pythonhosted.org/packages/15/e0/97e9557686d2f94f4b93786eccb7eed28e9228ad132ea8237f44727314a7/jiter-0.16.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5f91b1c27fc22a57993d5a5cb8a627cb8ed4b10502716fac1ffbfe1d19d84e8", size = 372017, upload-time = "2026-06-29T13:03:43.658Z" }, + { url = "https://files.pythonhosted.org/packages/0f/94/db768b6938e0df35c86beeba3dfbbb025c9ee5c19e1aa271f2396e50864d/jiter-0.16.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c682bea068a90b764577bdb78a60a4c1d1606daf9cd4c893832a37c7cc9d9026", size = 343320, upload-time = "2026-06-29T13:03:45.226Z" }, + { url = "https://files.pythonhosted.org/packages/c1/d6/5a59d938244a30735fe62d9433fd325f9021ea29d89780ea4596ea93bc89/jiter-0.16.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:8d031aabecc4f1b6276adfb42e3aabb77c89d468bf616600e8d3a11328929053", size = 350520, upload-time = "2026-06-29T13:03:46.671Z" }, + { url = "https://files.pythonhosted.org/packages/67/f8/c4a857f49c9af125f6bbcac7e3eee7f7978ed89682833062e2dbf62576b1/jiter-0.16.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eab2cd170150e70153de16896a1774e3a1dca80154c56b54d7a812c479a7165e", size = 387550, upload-time = "2026-06-29T13:03:48.361Z" }, + { url = "https://files.pythonhosted.org/packages/8b/d6/5fbc2f7d6b67b754caa61a993a2e626e815dec47ffc2f9e35f01adfebec7/jiter-0.16.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:6edb63a46e65a82c26800a868e49b2cac30dd5a4218b88d74bc2c848c8ad60bb", size = 515424, upload-time = "2026-06-29T13:03:49.881Z" }, + { url = "https://files.pythonhosted.org/packages/ed/54/284f0164b64a5fed915fea6ba7e9ba9b3d8d37c67d59cf2e3bb99d45cdfe/jiter-0.16.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:659039cc50b5addcc35fcc87ae2c1833b7c0a8e5326ef631a75e4478447bcf84", size = 546981, upload-time = "2026-06-29T13:03:51.363Z" }, + { url = "https://files.pythonhosted.org/packages/13/c5/2a467585a576594384e1d2c43e1224deaafc085f24e243529cf98beef8e1/jiter-0.16.0-cp313-cp313-win32.whl", hash = "sha256:c9c53be232c2e206ef9cdbad81a48bfa74c3d3f08bcf8124630a8a748aad993e", size = 202853, upload-time = "2026-06-29T13:03:53.015Z" }, + { url = "https://files.pythonhosted.org/packages/88/6a/de61d04b9eec69c71719968d2f716532a3bc121170c44a39e14979c6be81/jiter-0.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:baad945ed47f163ad833314f8e3288c396118934f94e7bbb9e243ce4b341a4fd", size = 196160, upload-time = "2026-06-29T13:03:54.447Z" }, + { url = "https://files.pythonhosted.org/packages/19/4b/b390ed59bafb3f31d008d1218578f10327714484b334439947f7e5b11e7f/jiter-0.16.0-cp313-cp313-win_arm64.whl", hash = "sha256:3c1fd2dbe1b0af19e987f03fe66c5f5bd105a2229c1aff4ab14890b24f41d21a", size = 189862, upload-time = "2026-06-29T13:03:55.754Z" }, + { url = "https://files.pythonhosted.org/packages/a7/89/bc4f1b57d5da938fd344a466396541e586d161320d70bffd929aaafcd8f4/jiter-0.16.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b2c61484666ad42726029af0c00ef4541f0f3b5cdc550221f56c2343208018ee", size = 308239, upload-time = "2026-06-29T13:03:57.205Z" }, + { url = "https://files.pythonhosted.org/packages/65/7a/c415453e5213001bf3b411ff65dec3d303b0e76a4a2cfea9768cd4960994/jiter-0.16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:63efadc657488f45db1c676d81e704cac2abf3fdb892def1faea61db053127e2", size = 308928, upload-time = "2026-06-29T13:03:58.643Z" }, + { url = "https://files.pythonhosted.org/packages/11/fc/1f4fb7ebf9a724c7741994f4aae18fba1e2f3133df14521a79194952c34a/jiter-0.16.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf0d73f50e7b6935677854f6e8e31d499ca7064dd24734f703e060f5b237d883", size = 336998, upload-time = "2026-06-29T13:04:00.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/8d/72cadaac05ccfa7cc3a0a2232862e6c72443ca40cf300ba8b57f9f18b69b/jiter-0.16.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf3ea07d9bc8e7d03a9fbc051295462e6dbc295b894fd72457c3136e3e43d898", size = 362112, upload-time = "2026-06-29T13:04:01.52Z" }, + { url = "https://files.pythonhosted.org/packages/58/4a/c4b0d5f651fda90a24ffce9f8d56cde462a2e09d31ae3de3c68cef34c04e/jiter-0.16.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26798522707abb47d767db536e4148ceac1b14446bf028ee85e579a2e043cfe5", size = 459807, upload-time = "2026-06-29T13:04:03.214Z" }, + { url = "https://files.pythonhosted.org/packages/80/58/ef77879ea9aa56b50824edc5a445e226422c7a8d211f3fd2a56bcb9493cf/jiter-0.16.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bc837c1b9631be10abfe0191537fe8009838204cec7e44827401ace390ddb567", size = 373181, upload-time = "2026-06-29T13:04:04.629Z" }, + { url = "https://files.pythonhosted.org/packages/49/2e/ffbc3f254e4d8a66da3062c624a7df4b7c2b2cf9e1fe43cf394b3e104041/jiter-0.16.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49060fd70737fad59d33ba9dcc0d83247dc9e77187de26053a19c16c9f32bd69", size = 344927, upload-time = "2026-06-29T13:04:06.067Z" }, + { url = "https://files.pythonhosted.org/packages/9a/f6/0be5dc6d64a89f80aa8fec984f94dedb2973e251edcae55841d60786d578/jiter-0.16.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:adbb8edeadd431bc4477879d5d371ece7cb1334486584e0f252656dd7ffada29", size = 352754, upload-time = "2026-06-29T13:04:07.477Z" }, + { url = "https://files.pythonhosted.org/packages/da/6e/7d31243b3b91cd261dd19e9d3557fc3251a80883d3d8049c86174e7ab7af/jiter-0.16.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:31aaee5b80f672c1dc21272bcfb9cbdcfc1ea04ff50f00ed5af500b80c44fa93", size = 390553, upload-time = "2026-06-29T13:04:08.92Z" }, + { url = "https://files.pythonhosted.org/packages/25/33/51ae371fde3c88897520f62b4d5f8b27ad7103e2bb10812ff52195609853/jiter-0.16.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:6722bcef4ffc86c835574b1b2fac6b33b9fb4a889c781e67950e891591f3c55a", size = 516900, upload-time = "2026-06-29T13:04:10.407Z" }, + { url = "https://files.pythonhosted.org/packages/a0/45/6449b3d123ea439ba79507c657288f461d55049e7bcbdc2cf8eb8210f491/jiter-0.16.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:5ab4f50ff971b611d656554ea10b75f80097392c827bc32923c6eeb6386c8b00", size = 548754, upload-time = "2026-06-29T13:04:12.046Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e7/fd2fb11ae3e2649333da3aa170d04d7b3000bbdc3b270f6513382fdf4e04/jiter-0.16.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:710cc51d4ebdcd3c1f70b232c1db1ea1344a075770422bbd4bede5708335acbe", size = 122381, upload-time = "2026-06-29T13:04:13.413Z" }, + { url = "https://files.pythonhosted.org/packages/26/80/f0b147a62c315a164ed2168908286ca302310824c218d3aae52b06c0c9a9/jiter-0.16.0-cp314-cp314-win32.whl", hash = "sha256:57b37fc887a32d44798e4d8ebfa7c9683ff3da1d5bf38f08d1bb3573ccb39106", size = 204578, upload-time = "2026-06-29T13:04:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/5e/e6/4758a14304b4523a6f5adb2419340086aa3593bd4327c2b25b5948a90548/jiter-0.16.0-cp314-cp314-win_amd64.whl", hash = "sha256:cbd18dd5e2df96b580487b5745adf57ef64ad89ba2d9662fc3c19386acce7db8", size = 198154, upload-time = "2026-06-29T13:04:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/26/be/41fa54a2e7ea41d6c99f1dc5b1f0fd4cb474680304b5d268dd518e81da3a/jiter-0.16.0-cp314-cp314-win_arm64.whl", hash = "sha256:a32d2027a9fa67f109ff245a3252ece3ccc32cc56703e1deab6cc846a59e0585", size = 191458, upload-time = "2026-06-29T13:04:17.707Z" }, + { url = "https://files.pythonhosted.org/packages/81/6b/59127338b86d9fe4d99418f5a15118bea778103ee0fe9d9dd7e0af174e95/jiter-0.16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2577196f4474ef3fc4779a088a23b0897bbf86f9ea3679c372d45b8383b43207", size = 316739, upload-time = "2026-06-29T13:04:19.663Z" }, + { url = "https://files.pythonhosted.org/packages/2d/95/49461034d5388196d3dabf98748935f017b7785d8f3f5349f834bcc4ed0d/jiter-0.16.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e89e008a93c01104161c75b4988e58716b01d62307ebfe161e52a56d2a818", size = 340911, upload-time = "2026-06-29T13:04:21.257Z" }, + { url = "https://files.pythonhosted.org/packages/cd/97/a4369f2fb82cb3dda13b98622f31249b2e014b223fe64ee534413ad72294/jiter-0.16.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e2e9efbe042210df657bade597f66d6d75723e3d8f45a12ea6d8167ff8bbce3", size = 361747, upload-time = "2026-06-29T13:04:22.677Z" }, + { url = "https://files.pythonhosted.org/packages/28/51/49b6ed456261646e1906016a6760367a28aacd3c24805e4e5fe64116c1db/jiter-0.16.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f4d9e473a5ce7d27fef8b848df4dc16e283893d3f53b4a585e72c9595f3c284", size = 460225, upload-time = "2026-06-29T13:04:24.441Z" }, + { url = "https://files.pythonhosted.org/packages/33/b5/5689aff4f66c5b60be63106e591dbfcba2190df97d2c9c7cf052361ddb98/jiter-0.16.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d30a4a1c87713060c8d1cc59a7b6c8fb6b8ef0a6900368014c76c87922a2929", size = 373169, upload-time = "2026-06-29T13:04:25.884Z" }, + { url = "https://files.pythonhosted.org/packages/a2/96/3ae1b85ee0d6d6cab254fb7f8da018272b932bbf2d69b07e98aa2a96c746/jiter-0.16.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae96332410f866e5900d809298b1ed82735932986c672495f9701daacd80620", size = 350332, upload-time = "2026-06-29T13:04:27.302Z" }, + { url = "https://files.pythonhosted.org/packages/15/32/c99d7bafd78986556c95bf60ce84c6cc98786eac56066c12d7f828bb6747/jiter-0.16.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:da3d7ec75dc83bb18bca888b5edfae0656a26849056c59e05a7728badd17e7af", size = 353377, upload-time = "2026-06-29T13:04:28.731Z" }, + { url = "https://files.pythonhosted.org/packages/0e/4b/f99a8e571287c3dec766bcc18528bbe8e8fb5365522ab5e6d64c93e87066/jiter-0.16.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ee6162b77d49a9939229df666dfa8af3e656b6701b54c4c84966d740e189264e", size = 387746, upload-time = "2026-06-29T13:04:30.319Z" }, + { url = "https://files.pythonhosted.org/packages/75/69/c78a5b3f71040e34eb5917df26fb7ae9a2174cad1ccbf277512507c53a6e/jiter-0.16.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:63ffdbdae7d4499f4cda14eadc12ddcabef0fc0c081191bdc2247489cb698077", size = 517292, upload-time = "2026-06-29T13:04:31.709Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f7/095b38eda4c70d03651c403f29a5590f16d12ddc5d544aac9f9cddf72277/jiter-0.16.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a111256a7193bea0759267b10385e5870949c239ed7b6ddbaaf57573edb38734", size = 549259, upload-time = "2026-06-29T13:04:33.721Z" }, + { url = "https://files.pythonhosted.org/packages/2e/c5/6a0207d90e5f656d95af98ebd0934f382d37674416f215aeda2ff8063e51/jiter-0.16.0-cp314-cp314t-win32.whl", hash = "sha256:de5ba8763e56b793561f43bed197c9ea55776daa5e9a6b91eed68a909bc9cdbf", size = 206523, upload-time = "2026-06-29T13:04:35.068Z" }, + { url = "https://files.pythonhosted.org/packages/a5/31/c757d5f30a8980fd945ce7b98be10be9e4ff59c7c42f5fd86804c2e87db8/jiter-0.16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b8a3f9a6008048fe9def7bf465180564a6e458047d2ce499149cfbe73c3ae9db", size = 200366, upload-time = "2026-06-29T13:04:36.61Z" }, + { url = "https://files.pythonhosted.org/packages/7c/a2/d88de6d313d734a544a7901353ad5db67cb38dcfcd91713b7979dafc345d/jiter-0.16.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0fa25b09b13075c46f5bc174f2690525a925a4fc2f7c82969a2bbabff22386ce", size = 190516, upload-time = "2026-06-29T13:04:38.004Z" }, + { url = "https://files.pythonhosted.org/packages/06/d3/8e278946d43eeca2585b4dd0834a887cd71136329b837f3a16ed86a8b4b0/jiter-0.16.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:850ccb1d7eedb4200f4014b1c0e8a577de114fc3cd88faad646dcc9bc4bb12ad", size = 304518, upload-time = "2026-06-29T13:05:00.172Z" }, + { url = "https://files.pythonhosted.org/packages/72/43/28d4ef495028bf0506a413d4db3f4eb3e7288a382e0f065f306a17bbeb5e/jiter-0.16.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:e34e97bda77eb63242a410243c071e28ac7e0d8c0948c5ee658498690a4b2f2f", size = 310207, upload-time = "2026-06-29T13:05:02.123Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ca/c366b1012da1d640de975d9683acd44e4d150d9068845d0ca2610435253f/jiter-0.16.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7dc85ea77d4abbae8bad0d3538678aedee75bceec4e2f6c8dfb1c74772e5aa5", size = 342771, upload-time = "2026-06-29T13:05:03.55Z" }, + { url = "https://files.pythonhosted.org/packages/16/52/50cc4056fc1ae02e7154704e7ecc89df0afb8300222cfe8a52d3f67e4730/jiter-0.16.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17ca7fae79f6d99cd9a042b75f917eaada7b895cfc7dd2ee3a16089dcaec7a85", size = 346468, upload-time = "2026-06-29T13:05:05.452Z" }, + { url = "https://files.pythonhosted.org/packages/98/ab/664fd8c4be028b2bedd3d2ff08769c4ede23d0dbc87a77c62384a0515b5d/jiter-0.16.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:f17d61a28b4b3e0e3e2ba98490c70501403b4d196f78732439160e7fd3678127", size = 303106, upload-time = "2026-06-29T13:05:07.118Z" }, + { url = "https://files.pythonhosted.org/packages/1a/07/421f1d5b65493a76e16027b848aba6a7d28073ae75944fa4289cc914d39f/jiter-0.16.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:96e38eea538c8ddf853a35727c7be0741c76c13f04148ac5c116222f50ece3b3", size = 304658, upload-time = "2026-06-29T13:05:08.708Z" }, + { url = "https://files.pythonhosted.org/packages/0a/db/bba1155f01a01c3c37a89425d571da751bbedf5c54247b831a04cb971798/jiter-0.16.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d284fb8d94d5855d60c44fefcab4bf966f1da6fada73992b01f6f0c9bc0c6702", size = 339719, upload-time = "2026-06-29T13:05:10.41Z" }, + { url = "https://files.pythonhosted.org/packages/78/f7/18a1afcd64f35314b68c1f23afcd9994d0bc13e65cc77517afff4e83986d/jiter-0.16.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64d613743df53199b1aa256a7d328340da6d7078aac7705a7db9d7a791e9cfd2", size = 343885, upload-time = "2026-06-29T13:05:12.087Z" }, +] + +[[package]] +name = "joserfc" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/e0/27a6a081ae25420eda6768ceae05d7022a7f2447f420588843f2a44e4298/joserfc-1.7.4.tar.gz", hash = "sha256:b3bc561672ae541b17a9237053b48a03dacddd92d68047b3ecdfb4b5714a88ed", size = 234027, upload-time = "2026-07-19T15:43:02.739Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/bf/249dcd99b3376375910b7fa922383b57792975c8758f50d44612e749226c/joserfc-1.7.4-py3-none-any.whl", hash = "sha256:32d46c2cd5e3203c13e87a6c61333cab310b1ba80cd54b4c4f386a848a122463", size = 71000, upload-time = "2026-07-19T15:43:01.299Z" }, +] + +[[package]] +name = "jsonref" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/0d/c1f3277e90ccdb50d33ed5ba1ec5b3f0a242ed8c1b1a85d3afeb68464dca/jsonref-1.1.0.tar.gz", hash = "sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552", size = 8814, upload-time = "2023-01-16T16:10:04.455Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/ec/e1db9922bceb168197a558a2b8c03a7963f1afe93517ddd3cf99f202f996/jsonref-1.1.0-py3-none-any.whl", hash = "sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9", size = 9425, upload-time = "2023-01-16T16:10:02.255Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-path" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "pathable" }, + { name = "pyyaml" }, + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/79/cd02a4df6d9270efdc7d3feefe6edd730b0820c39eeaa107a2faee8322d5/jsonschema_path-0.5.0.tar.gz", hash = "sha256:493b156ba895c97602655b620a8456caa2ce08c1aa389f5a7addec065e6e855c", size = 19597, upload-time = "2026-05-19T20:45:00.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/2c/9e69d73c4297508be9e3b64a970ea3971b3eb8db64ffc5802d40bd25981f/jsonschema_path-0.5.0-py3-none-any.whl", hash = "sha256:2790a070bc7abb08ea3dbe4d340ece4efadf639223001f020c7503229ba068e2", size = 24077, upload-time = "2026-05-19T20:44:59.225Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "keyring" +version = "25.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, + { name = "jaraco-classes" }, + { name = "jaraco-context" }, + { name = "jaraco-functools" }, + { name = "jeepney", marker = "sys_platform == 'linux'" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, + { name = "secretstorage", marker = "sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mcp" +version = "1.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/77/9450b8f251a13affb6281997d0523c4615f8a8b35d0b21ff30db3a5aac9d/mcp-1.28.1.tar.gz", hash = "sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683", size = 638501, upload-time = "2026-06-26T12:57:29.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/5e/d118fce19f87a2e7d8101c35c8ae0ec289098a4df0ff244cec23e415aca0/mcp-1.28.1-py3-none-any.whl", hash = "sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df", size = 222620, upload-time = "2026-06-26T12:57:27.218Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "more-itertools" +version = "11.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/1d/f4da6f02cdffe04d6362210b807146a26044c88d839208aec273bb0d9184/more_itertools-11.1.0.tar.gz", hash = "sha256:48e8f4d9e7e5878571ecf6f2b4e57634f93cd474cc8cfbd2376f2d11b396e30d", size = 145772, upload-time = "2026-05-22T14:14:29.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl", hash = "sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192", size = 72226, upload-time = "2026-05-22T14:14:28.824Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/0b/19348d4c98980c4851d2f943f8ebafdece2ae7ef737adcfa5994ce8e5f10/multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5", size = 77176, upload-time = "2026-01-26T02:42:59.784Z" }, + { url = "https://files.pythonhosted.org/packages/ef/04/9de3f8077852e3d438215c81e9b691244532d2e05b4270e89ce67b7d103c/multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8", size = 44996, upload-time = "2026-01-26T02:43:01.674Z" }, + { url = "https://files.pythonhosted.org/packages/31/5c/08c7f7fe311f32e83f7621cd3f99d805f45519cd06fafb247628b861da7d/multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872", size = 44631, upload-time = "2026-01-26T02:43:03.169Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7f/0e3b1390ae772f27501199996b94b52ceeb64fe6f9120a32c6c3f6b781be/multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991", size = 242561, upload-time = "2026-01-26T02:43:04.733Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f4/8719f4f167586af317b69dd3e90f913416c91ca610cac79a45c53f590312/multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03", size = 242223, upload-time = "2026-01-26T02:43:06.695Z" }, + { url = "https://files.pythonhosted.org/packages/47/ab/7c36164cce64a6ad19c6d9a85377b7178ecf3b89f8fd589c73381a5eedfd/multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981", size = 222322, upload-time = "2026-01-26T02:43:08.472Z" }, + { url = "https://files.pythonhosted.org/packages/f5/79/a25add6fb38035b5337bc5734f296d9afc99163403bbcf56d4170f97eb62/multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6", size = 254005, upload-time = "2026-01-26T02:43:10.127Z" }, + { url = "https://files.pythonhosted.org/packages/4a/7b/64a87cf98e12f756fc8bd444b001232ffff2be37288f018ad0d3f0aae931/multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190", size = 251173, upload-time = "2026-01-26T02:43:11.731Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ac/b605473de2bb404e742f2cc3583d12aedb2352a70e49ae8fce455b50c5aa/multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92", size = 243273, upload-time = "2026-01-26T02:43:13.063Z" }, + { url = "https://files.pythonhosted.org/packages/03/65/11492d6a0e259783720f3bc1d9ea55579a76f1407e31ed44045c99542004/multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee", size = 238956, upload-time = "2026-01-26T02:43:14.843Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a7/7ee591302af64e7c196fb63fe856c788993c1372df765102bd0448e7e165/multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2", size = 233477, upload-time = "2026-01-26T02:43:16.025Z" }, + { url = "https://files.pythonhosted.org/packages/9c/99/c109962d58756c35fd9992fed7f2355303846ea2ff054bb5f5e9d6b888de/multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568", size = 243615, upload-time = "2026-01-26T02:43:17.84Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5f/1973e7c771c86e93dcfe1c9cc55a5481b610f6614acfc28c0d326fe6bfad/multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40", size = 249930, upload-time = "2026-01-26T02:43:19.06Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a5/f170fc2268c3243853580203378cd522446b2df632061e0a5409817854c7/multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962", size = 243807, upload-time = "2026-01-26T02:43:20.286Z" }, + { url = "https://files.pythonhosted.org/packages/de/01/73856fab6d125e5bc652c3986b90e8699a95e84b48d72f39ade6c0e74a8c/multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505", size = 239103, upload-time = "2026-01-26T02:43:21.508Z" }, + { url = "https://files.pythonhosted.org/packages/e7/46/f1220bd9944d8aa40d8ccff100eeeee19b505b857b6f603d6078cb5315b0/multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122", size = 41416, upload-time = "2026-01-26T02:43:22.703Z" }, + { url = "https://files.pythonhosted.org/packages/68/00/9b38e272a770303692fc406c36e1a4c740f401522d5787691eb38a8925a8/multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df", size = 46022, upload-time = "2026-01-26T02:43:23.77Z" }, + { url = "https://files.pythonhosted.org/packages/64/65/d8d42490c02ee07b6bbe00f7190d70bb4738b3cce7629aaf9f213ef730dd/multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db", size = 43238, upload-time = "2026-01-26T02:43:24.882Z" }, + { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, + { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/13/bf/9676c0392309b5fdae322333d22a829715b570edb9baa8016a517b55b558/multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a", size = 41302, upload-time = "2026-01-26T02:43:48.753Z" }, + { url = "https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b", size = 45981, upload-time = "2026-01-26T02:43:49.921Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/9dd5305253fa00cd3c7555dbef69d5bf4133debc53b87ab8d6a44d411665/multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6", size = 43159, upload-time = "2026-01-26T02:43:51.635Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd", size = 45456, upload-time = "2026-01-26T02:43:53.893Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3b/d6bd75dc4f3ff7c73766e04e705b00ed6dbbaccf670d9e05a12b006f5a21/multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53", size = 251018, upload-time = "2026-01-26T02:43:56.198Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/c959c5933adedb9ac15152e4067c702a808ea183a8b64cf8f31af8ad3155/multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75", size = 258883, upload-time = "2026-01-26T02:43:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/86/85/7ed40adafea3d4f1c8b916e3b5cc3a8e07dfcdcb9cd72800f4ed3ca1b387/multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b", size = 242413, upload-time = "2026-01-26T02:43:58.755Z" }, + { url = "https://files.pythonhosted.org/packages/d2/57/b8565ff533e48595503c785f8361ff9a4fde4d67de25c207cd0ba3befd03/multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733", size = 268404, upload-time = "2026-01-26T02:44:00.216Z" }, + { url = "https://files.pythonhosted.org/packages/e0/50/9810c5c29350f7258180dfdcb2e52783a0632862eb334c4896ac717cebcb/multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a", size = 269456, upload-time = "2026-01-26T02:44:02.202Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961", size = 256322, upload-time = "2026-01-26T02:44:03.56Z" }, + { url = "https://files.pythonhosted.org/packages/31/6e/d8a26d81ac166a5592782d208dd90dfdc0a7a218adaa52b45a672b46c122/multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582", size = 253955, upload-time = "2026-01-26T02:44:04.845Z" }, + { url = "https://files.pythonhosted.org/packages/59/4c/7c672c8aad41534ba619bcd4ade7a0dc87ed6b8b5c06149b85d3dd03f0cd/multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e", size = 251254, upload-time = "2026-01-26T02:44:06.133Z" }, + { url = "https://files.pythonhosted.org/packages/7b/bd/84c24de512cbafbdbc39439f74e967f19570ce7924e3007174a29c348916/multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3", size = 252059, upload-time = "2026-01-26T02:44:07.518Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ba/f5449385510825b73d01c2d4087bf6d2fccc20a2d42ac34df93191d3dd03/multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6", size = 263588, upload-time = "2026-01-26T02:44:09.382Z" }, + { url = "https://files.pythonhosted.org/packages/d7/11/afc7c677f68f75c84a69fe37184f0f82fce13ce4b92f49f3db280b7e92b3/multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a", size = 259642, upload-time = "2026-01-26T02:44:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/2b/17/ebb9644da78c4ab36403739e0e6e0e30ebb135b9caf3440825001a0bddcb/multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba", size = 251377, upload-time = "2026-01-26T02:44:12.042Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a4/840f5b97339e27846c46307f2530a2805d9d537d8b8bd416af031cad7fa0/multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511", size = 41887, upload-time = "2026-01-26T02:44:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19", size = 46053, upload-time = "2026-01-26T02:44:15.371Z" }, + { url = "https://files.pythonhosted.org/packages/0c/5b/aba28e4ee4006ae4c7df8d327d31025d760ffa992ea23812a601d226e682/multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf", size = 43307, upload-time = "2026-01-26T02:44:16.852Z" }, + { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, + { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" }, + { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" }, + { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" }, + { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" }, + { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" }, + { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, + { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" }, + { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, + { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, + { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, + { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "multiprocess" +version = "0.70.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/f2/e783ac7f2aeeed14e9e12801f22529cc7e6b7ab80928d6dcce4e9f00922d/multiprocess-0.70.19.tar.gz", hash = "sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897", size = 2079989, upload-time = "2026-01-19T06:47:39.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/b6/10832f96b499690854e574360be342a282f5f7dba58eff791299ff6c0637/multiprocess-0.70.19-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:02e5c35d7d6cd2bdc89c1858867f7bde4012837411023a4696c148c1bdd7c80e", size = 135131, upload-time = "2026-01-19T06:47:20.479Z" }, + { url = "https://files.pythonhosted.org/packages/99/50/faef2d8106534b0dc4a0b772668a1a99682696ebf17d3c0f13f2ed6a656a/multiprocess-0.70.19-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:79576c02d1207ec405b00cabf2c643c36070800cca433860e14539df7818b2aa", size = 135131, upload-time = "2026-01-19T06:47:21.879Z" }, + { url = "https://files.pythonhosted.org/packages/94/b1/0b71d18b76bf423c2e8ee00b31db37d17297ab3b4db44e188692afdca628/multiprocess-0.70.19-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6b6d78d43a03b68014ca1f0b7937d965393a670c5de7c29026beb2258f2f896", size = 135134, upload-time = "2026-01-19T06:47:23.262Z" }, + { url = "https://files.pythonhosted.org/packages/7e/aa/714635c727dbfc251139226fa4eaf1b07f00dc12d9cd2eb25f931adaf873/multiprocess-0.70.19-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1bbf1b69af1cf64cd05f65337d9215b88079ec819cd0ea7bac4dab84e162efe7", size = 144743, upload-time = "2026-01-19T06:47:24.562Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e1/155f6abf5e6b5d9cef29b6d0167c180846157a4aca9b9bee1a217f67c959/multiprocess-0.70.19-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5be9ec7f0c1c49a4f4a6fd20d5dda4aeabc2d39a50f4ad53720f1cd02b3a7c2e", size = 144738, upload-time = "2026-01-19T06:47:26.636Z" }, + { url = "https://files.pythonhosted.org/packages/af/cb/f421c2869d75750a4f32301cc20c4b63fab6376e9a75c8e5e655bdeb3d9b/multiprocess-0.70.19-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1c3dce098845a0db43b32a0b76a228ca059a668071cfeaa0f40c36c0b1585d45", size = 144741, upload-time = "2026-01-19T06:47:27.985Z" }, + { url = "https://files.pythonhosted.org/packages/e3/45/8004d1e6b9185c1a444d6b55ac5682acf9d98035e54386d967366035a03a/multiprocess-0.70.19-py310-none-any.whl", hash = "sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87", size = 134948, upload-time = "2026-01-19T06:47:32.325Z" }, + { url = "https://files.pythonhosted.org/packages/86/c2/dec9722dc3474c164a0b6bcd9a7ed7da542c98af8cabce05374abab35edd/multiprocess-0.70.19-py311-none-any.whl", hash = "sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c", size = 144457, upload-time = "2026-01-19T06:47:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/71/70/38998b950a97ea279e6bd657575d22d1a2047256caf707d9a10fbce4f065/multiprocess-0.70.19-py312-none-any.whl", hash = "sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28", size = 150281, upload-time = "2026-01-19T06:47:35.037Z" }, + { url = "https://files.pythonhosted.org/packages/7f/74/d2c27e03cb84251dfe7249b8e82923643c6d48fa4883b9476b025e7dc7eb/multiprocess-0.70.19-py313-none-any.whl", hash = "sha256:8d5eb4ec5017ba2fab4e34a747c6d2c2b6fecfe9e7236e77988db91580ada952", size = 156414, upload-time = "2026-01-19T06:47:35.915Z" }, + { url = "https://files.pythonhosted.org/packages/a0/61/af9115673a5870fd885247e2f1b68c4f1197737da315b520a91c757a861a/multiprocess-0.70.19-py314-none-any.whl", hash = "sha256:e8cc7fbdff15c0613f0a1f1f8744bef961b0a164c0ca29bdff53e9d2d93c5e5f", size = 160318, upload-time = "2026-01-19T06:47:37.497Z" }, + { url = "https://files.pythonhosted.org/packages/7e/82/69e539c4c2027f1e1697e09aaa2449243085a0edf81ae2c6341e84d769b6/multiprocess-0.70.19-py39-none-any.whl", hash = "sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5", size = 133477, upload-time = "2026-01-19T06:47:38.619Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" }, + { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" }, + { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" }, + { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" }, + { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" }, + { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" }, + { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" }, + { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" }, + { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" }, + { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" }, + { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" }, + { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" }, + { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" }, + { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" }, + { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" }, + { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" }, + { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" }, +] + +[[package]] +name = "openai" +version = "2.46.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/ac/f725c4efbda8657d02be684607e5a2e5ce362e4790fdbcbdfb7c15018647/openai-2.46.0.tar.gz", hash = "sha256:0421e0735ac41451cad894af4cddf0435bfbf8cbc538ac0e15b3c062f2ddc06a", size = 1114628, upload-time = "2026-07-17T02:48:06.05Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/7b/206238ebcb50b235942b1c66dba4974776f2057402a8d91c399be587d66a/openai-2.46.0-py3-none-any.whl", hash = "sha256:672381db55efb3a1e2610f29304c130cccdd0b319bace4d492b2443cb64c1e7c", size = 1637556, upload-time = "2026-07-17T02:48:03.695Z" }, +] + +[[package]] +name = "openapi-pydantic" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/2e/58d83848dd1a79cb92ed8e63f6ba901ca282c5f09d04af9423ec26c56fd7/openapi_pydantic-0.5.1.tar.gz", hash = "sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d", size = 60892, upload-time = "2025-01-08T19:29:27.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381, upload-time = "2025-01-08T19:29:25.275Z" }, +] + +[[package]] +name = "openenv" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastapi" }, + { name = "fastmcp" }, + { name = "gradio" }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "openai" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "rich" }, + { name = "tomli" }, + { name = "tomli-w" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "uvicorn" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/38/5552b1b208c8b8971a1895a74f3b9e52f824059d3aa5d08992088931d969/openenv-0.4.1.tar.gz", hash = "sha256:08c7c13455854beee5c8f311f57d95180772e3e9ac9c85278d681864488016a3", size = 201919, upload-time = "2026-07-03T11:37:24.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/18/787ddb930e29705479fdd0a58b2ca7fa243c9441f8f1ece33629f8d82b8b/openenv-0.4.1-py3-none-any.whl", hash = "sha256:24c46788c80fa322b34b8e1f8b3adfe42fb8ceec7df99a8b96b44eea0a295921", size = 236036, upload-time = "2026-07-03T11:37:22.607Z" }, +] + +[[package]] +name = "openenv-latex-ocr-env" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "datasets" }, + { name = "openenv" }, + { name = "pillow" }, + { name = "requests" }, +] + +[package.optional-dependencies] +dev = [ + { name = "openai" }, + { name = "pytest" }, +] + +[package.metadata] +requires-dist = [ + { name = "datasets", specifier = ">=4.0.0" }, + { name = "openai", marker = "extra == 'dev'", specifier = ">=1.40.0" }, + { name = "openenv", specifier = ">=0.4.1" }, + { name = "pillow", specifier = ">=10.0.0" }, + { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0.0" }, + { name = "requests", specifier = ">=2.31.0" }, +] +provides-extras = ["dev"] + +[[package]] +name = "opentelemetry-api" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/8b/aa9e2d8b8dfa7c946f7dec5d1f8f6ba8eca062f43509a06bdb5ce93d26c0/opentelemetry_api-1.44.0.tar.gz", hash = "sha256:67647e5e9566edcf421166fdf022b3537f818635daa852b289e34604dc6fb33a", size = 72406, upload-time = "2026-07-16T15:25:32.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/6f/a04e900f465ff3221ccc395522503e2d10e79fa21f2723c8e177aae1e0d1/opentelemetry_api-1.44.0-py3-none-any.whl", hash = "sha256:94b98c893a91b88657eaac1e3ba89618cdb85be6918196705354f34728b2cdef", size = 60018, upload-time = "2026-07-16T15:25:11.657Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:135869ef917b8704ea0a94e01620e0c05021c15c52036e4663baffe75e72f8ce", size = 228986, upload-time = "2026-05-06T15:09:14.765Z" }, + { url = "https://files.pythonhosted.org/packages/80/01/be33fbff646e22f93398429ea645f20d2097aea1a6cdc1e6628e70125f83/orjson-3.11.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115ab5f5f4a0f203cc2a5f0fb09aee503a3f771aa08392949ab5ca230c4fbdbd", size = 132558, upload-time = "2026-05-06T15:09:17.431Z" }, + { url = "https://files.pythonhosted.org/packages/4e/61/73d49333bba660a075daccca10970dc6409ce1cf42ae4046646a19468aad/orjson-3.11.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4da3c38a2083ca4aaf9c2a36776cce3e9328e6647b10d118948f3cfb4913ffe4", size = 128213, upload-time = "2026-05-06T15:09:18.719Z" }, + { url = "https://files.pythonhosted.org/packages/1f/7d/30e844b3dac3f74aed66b1f984daf9db3c98c0328c03d965a9e8dc06449e/orjson-3.11.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53b50b0e14084b8f7e29c5ce84c5af0f1160169b30d8a6914231d97d2fe297d4", size = 135430, upload-time = "2026-05-06T15:09:20.257Z" }, + { url = "https://files.pythonhosted.org/packages/16/64/bd815f5c610b3facc204f26ba94e87a9eb49b0d83de3d5fc1eee2402d91b/orjson-3.11.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:231742b4a11dad8d5380a435962c57e91b7c37b79be858f4ef1c0df1a259897e", size = 146178, upload-time = "2026-05-06T15:09:21.616Z" }, + { url = "https://files.pythonhosted.org/packages/c7/35/e744fd36c79b339d27beb06068b5a08a8882ef5418804d0ce545a31f718d/orjson-3.11.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34fd2317602587321faab75ab76c623a0117e80841a6413654f04e47f339a8fb", size = 133068, upload-time = "2026-05-06T15:09:23.228Z" }, + { url = "https://files.pythonhosted.org/packages/2a/56/d54152b67b63a0b3e556cfc549d6ce84f74d7f425ddeadc6c8a74d913da7/orjson-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f3db16e69b667b132e0f305a833d5497da302d801508cbb051ed9a9819da47", size = 134217, upload-time = "2026-05-06T15:09:24.847Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ee/66154baf69f71c7164a268a5e888908aec5a0819d13c81d5e2755a257758/orjson-3.11.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0b34789fa0da61cf7bef0546b09c738fb195331e017e477096d129e9105ab03d", size = 141917, upload-time = "2026-05-06T15:09:26.647Z" }, + { url = "https://files.pythonhosted.org/packages/09/d3/c5824260ca8b9d7ba82648d042a3f8f4815d18c15bb98a1f30edd1bb2d83/orjson-3.11.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:87e4d4ab280b0c87424d47695bec2182caf8cfc17879ea78dab76680194abc13", size = 415356, upload-time = "2026-05-06T15:09:28.252Z" }, + { url = "https://files.pythonhosted.org/packages/64/cb/509c2e816fe4df641d93dc92f6a89adc8df3ada8ebdee2bd44aba3264c3c/orjson-3.11.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ace6c58523302d3b97b6ac5c38a5298a54b473762b6be82726b4265c41029f92", size = 148112, upload-time = "2026-05-06T15:09:29.783Z" }, + { url = "https://files.pythonhosted.org/packages/db/b5/3ceae56d2e4962979eedb023ba6a46a4bb65f333960379be0ca470686220/orjson-3.11.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:97d0d932803c1b164fde11cb542a9efcb1e0f63b184537cca65887147906ff48", size = 137112, upload-time = "2026-05-06T15:09:31.432Z" }, + { url = "https://files.pythonhosted.org/packages/d7/7a/81fa3f2c7bef79b04cf2ab7838e5ac74b1f12511ceab979759b0275d6bb4/orjson-3.11.9-cp310-cp310-win32.whl", hash = "sha256:b3afcf569c15577a9fe64627292daa3e6b3a70f4fb77a5df246a87ec21681b94", size = 131706, upload-time = "2026-05-06T15:09:32.707Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d8/b64600f9083c7f151ad39717a5877fccbeb0ef6d7efcb55f971ce00b6bee/orjson-3.11.9-cp310-cp310-win_amd64.whl", hash = "sha256:8697ab6a080a5c46edaad50e2bc5bd8c7ca5c66442d24104fa44ec74910a8244", size = 127282, upload-time = "2026-05-06T15:09:33.955Z" }, + { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" }, + { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" }, + { url = "https://files.pythonhosted.org/packages/88/b1/6ceafc2eefd0a553e3be77ce6c49d107e772485d9568629376171c50e634/orjson-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ee05097750de0ff69ed5b7bbcf0732182fd57a24043dcc2a1da780a5ead3a5", size = 132306, upload-time = "2026-05-06T15:09:38.299Z" }, + { url = "https://files.pythonhosted.org/packages/ea/76/f11311285324a40aab1e3031385c50b635a7cd0734fdaf60c7e89a696f60/orjson-3.11.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6082706765a95a6680d812e1daf1c0cfe8adec7831b3ff3b625693f3b461b1c", size = 127988, upload-time = "2026-05-06T15:09:39.597Z" }, + { url = "https://files.pythonhosted.org/packages/9e/85/0ef63bcf1337f44031ce9b91b1919563f62a37527b3ea4368bb15a22e5d7/orjson-3.11.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:277fefe9d76ee17eb14debf399e3533d4d63b5f677a4d3719eb763536af1f4bd", size = 135188, upload-time = "2026-05-06T15:09:40.957Z" }, + { url = "https://files.pythonhosted.org/packages/05/94/b0d27090ea8a2095db3c2bd1b1c96f96f19bbb494d7fef33130e846e613d/orjson-3.11.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03db380e3780fa0015ed776a90f20e8e20bb11dde13b216ce19e5718e3dfba62", size = 145937, upload-time = "2026-05-06T15:09:42.249Z" }, + { url = "https://files.pythonhosted.org/packages/09/eb/75d50c29c05b8054013e221e598820a365c8e64065312e75e202ed880709/orjson-3.11.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33d7d766701847dc6729846362dc27895d2f2d2251264f9d10e7cb9878194877", size = 132758, upload-time = "2026-05-06T15:09:43.945Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/360686f39348aa88827cb6fbf7dc606fd41c831a35235e1abf1db8e3a9e6/orjson-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147302878da387104b66bb4a8b0227d1d487e976ce41a8501916161072ed87b1", size = 133971, upload-time = "2026-05-06T15:09:45.239Z" }, + { url = "https://files.pythonhosted.org/packages/0e/30/3178eb16f3221aeef068b6f1f1ebe05f656ea5c6dffe9f6c917329fe17a3/orjson-3.11.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3513550321f8c8c811a7c3297b8a630e82dc08e4c10216d07703c997776236cd", size = 141685, upload-time = "2026-05-06T15:09:46.858Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f1/ff2f19ed0225f9680fafa42febca3570dd59444ebf190980738d376214c2/orjson-3.11.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c5d001196b89fa9cf0a4ab79766cd835b991a166e4b621ba95089edc50c429ff", size = 415167, upload-time = "2026-05-06T15:09:48.312Z" }, + { url = "https://files.pythonhosted.org/packages/9b/61/863bddf0da6e9e586765414debd54b4e58db05f560902b6d00658cb88636/orjson-3.11.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:16969c9d369c98eb084889c6e4d2d39b77c7eb38ceccf8da2a9fff62ae908980", size = 147913, upload-time = "2026-05-06T15:09:49.733Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4081492586d75b073d60c5271a8d0f05a0955cabf1e34c8473f6fcd84235/orjson-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:63e0efbc991250c0b3143488fa57d95affcabbfc63c99c48d625dd37779aafe2", size = 136959, upload-time = "2026-05-06T15:09:51.311Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533, upload-time = "2026-05-06T15:09:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106, upload-time = "2026-05-06T15:09:54.204Z" }, + { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848, upload-time = "2026-05-06T15:09:55.551Z" }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" }, + { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" }, + { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" }, + { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" }, + { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" }, + { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" }, + { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" }, + { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" }, + { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" }, + { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" }, + { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" }, + { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" }, + { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" }, + { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" }, + { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" }, + { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" }, + { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" }, + { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465, upload-time = "2026-05-06T15:10:44.097Z" }, + { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364, upload-time = "2026-05-06T15:10:45.839Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063, upload-time = "2026-05-06T15:10:47.267Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356, upload-time = "2026-05-06T15:10:48.765Z" }, + { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592, upload-time = "2026-05-06T15:10:50.13Z" }, + { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491, upload-time = "2026-05-06T15:10:51.582Z" }, + { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309, upload-time = "2026-05-06T15:10:53.329Z" }, + { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030, upload-time = "2026-05-06T15:10:54.988Z" }, + { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482, upload-time = "2026-05-06T15:10:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178, upload-time = "2026-05-06T15:10:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089, upload-time = "2026-05-06T15:11:00.441Z" }, + { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921, upload-time = "2026-05-06T15:11:02.176Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638, upload-time = "2026-05-06T15:11:03.696Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078, upload-time = "2026-05-06T15:11:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687, upload-time = "2026-05-06T15:11:06.602Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11'" }, + { name = "pytz", marker = "python_full_version < '3.11'" }, + { name = "tzdata", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" }, + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, + { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, + { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, + { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, + { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, + { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, + { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, + { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, + { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, + { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, + { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, + { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, + { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, + { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, +] + +[[package]] +name = "pathable" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/f3/5a20387de9bcd0607871bfc2198ee0e15836da7baa4592ccd7f24c27c986/pathable-0.6.0.tar.gz", hash = "sha256:6404b8b82aef5ff0fd478934137128b99b12212ba35afdde5525ca4f8388ea58", size = 18970, upload-time = "2026-05-19T18:15:11.911Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/e8/6d75ffd9784bce2e93d1ae4415649427e39a53bb172d4672b2b59c6f0a7b/pathable-0.6.0-py3-none-any.whl", hash = "sha256:82c4ca6c98c502ad12e0d4e9779b6210afee93c38990988c8c5d1b49bdcdf566", size = 18983, upload-time = "2026-05-19T18:15:10.728Z" }, +] + +[[package]] +name = "pillow" +version = "12.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/c2/669d88644cddb1485bd9534e63e8cf476c8e51cb3c3a1297677023505c0e/pillow-12.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a", size = 5392418, upload-time = "2026-07-01T11:53:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ba/3762f376a2948e3036488d773a146e0ae6ecc2ca03ac20e2615bd0b2ba02/pillow-12.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bcc33feacfaefce60c12fd500a277533bdc02b10a19f7f6d348763d8140bbba7", size = 4785287, upload-time = "2026-07-01T11:53:29.761Z" }, + { url = "https://files.pythonhosted.org/packages/07/50/b5d688cc9c52d4482f3d5bcab6ce20bc2a74a85d2343841c907444a3be2c/pillow-12.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f", size = 6253754, upload-time = "2026-07-01T11:53:32.298Z" }, + { url = "https://files.pythonhosted.org/packages/4e/89/36f4cd76cf4baf05c50ababb976249153f18c959171c7f6ba09a6f217260/pillow-12.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec", size = 6925605, upload-time = "2026-07-01T11:53:34.487Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c0/4de58cf6633b9e3a6061ef4be6fb91fc3c90b812ece886f531e3c523d777/pillow-12.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:85f998ea1848bc6757289e739cfbdda3a04adfd58b02fc018ce54d754a5ce468", size = 6327788, upload-time = "2026-07-01T11:53:36.433Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/14d53682a19550dbbaf3b598f807d5457646c510805a44c7d7891cd1cd1a/pillow-12.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:25b9b82bb22e6e2b3cd07b39c68b7b862001226cb3dff7130d1cb914121b39ed", size = 7036288, upload-time = "2026-07-01T11:53:38.712Z" }, + { url = "https://files.pythonhosted.org/packages/38/1d/36279e3c77efe034e4cc2b0393ee74ffdb5a62391dacbf9b916154f5f0b8/pillow-12.3.0-cp310-cp310-win32.whl", hash = "sha256:37dc8f7bbb66efe481bb60defacef820c950c24713fb44962ed6aa2a50966de1", size = 6472396, upload-time = "2026-07-01T11:53:40.781Z" }, + { url = "https://files.pythonhosted.org/packages/48/7c/8fa0039574c476d7c6fa57dd7c32a130436877c6ec1e5ce1cc8ec44878c1/pillow-12.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb", size = 7226887, upload-time = "2026-07-01T11:53:42.764Z" }, + { url = "https://files.pythonhosted.org/packages/fa/17/e324be141d173c1c919428066c3259f21c1b8982e564e01a4a81e96dbdcf/pillow-12.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:514435a37670e3e5e08f3945b68718b6ed329bb84367777e16f9f4dfe1e61a0f", size = 2568039, upload-time = "2026-07-01T11:53:45.372Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c8/0a78b0e02d7ac54bc03e5321c9220da52f0c2ea83b21f7c40e7f3169c502/pillow-12.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756", size = 5392415, upload-time = "2026-07-01T11:53:47.162Z" }, + { url = "https://files.pythonhosted.org/packages/b2/5b/a02d30018abd97ced9f5a6c63d28597694a00d066516b9c1c6de45859fc9/pillow-12.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6", size = 4785266, upload-time = "2026-07-01T11:53:49.079Z" }, + { url = "https://files.pythonhosted.org/packages/c8/98/766667a4be768150a202836acd9fad19c06824ca86c4286d3cf6b274964e/pillow-12.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd", size = 6263814, upload-time = "2026-07-01T11:53:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/ede717bc1144f63886c21fd349bb95860b0d1a21149ff16f2bb362b612b6/pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd", size = 6934408, upload-time = "2026-07-01T11:53:53.487Z" }, + { url = "https://files.pythonhosted.org/packages/a3/48/9c58b685e69d49c31af6c8eb9012055fab7e665785165c84796e2c73ce72/pillow-12.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4f883547d4b7f0495ebe7056b0cc2aea76094e7a4abc8e933540f3271df27d9c", size = 6337160, upload-time = "2026-07-01T11:53:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/dc2a5c0ba6df93f67c31d34b808b7ce440b40cdbf96f0b81cde1d1e6fa93/pillow-12.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:236ff70b9312fb68943c703aa842ca6a758abfa45ac187a5e7c1452e96ef72b5", size = 7045172, upload-time = "2026-07-01T11:53:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/86/a5/444817a4d4c4c2417df00513086ca196f388d8f9ef40c2e4ccd1ad1af54b/pillow-12.3.0-cp311-cp311-win32.whl", hash = "sha256:10e41f0fbf1eec8cfd234b8fe17a4caac7c9d0db4c204d3c173a8f9f6ef3232b", size = 6472232, upload-time = "2026-07-01T11:53:59.767Z" }, + { url = "https://files.pythonhosted.org/packages/63/c6/4bad1b18d132a50b27e1365e1ab163616f7a5bb56d330f66f9d1d9d4f9d4/pillow-12.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a", size = 7233653, upload-time = "2026-07-01T11:54:02.066Z" }, + { url = "https://files.pythonhosted.org/packages/fd/16/00f91ab7760dc842f5aad55217e80fc4a7067a0604535249bc8a2d6d9870/pillow-12.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:ebaea975e03d3141d9d3a507df75c9b3ec90fa9d2ffd07567b3a978d9d790b26", size = 2568195, upload-time = "2026-07-01T11:54:04.622Z" }, + { url = "https://files.pythonhosted.org/packages/37/bf/fb3ebff8ddcb76aac5a01389251bbbb9519922a9b520d8247c1ca864a25d/pillow-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965", size = 5345969, upload-time = "2026-07-01T11:54:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/d8/66/9a386a92561f402389a4fc70c18838bf6d35eb5eb5c6850b4b2dc64f5048/pillow-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7", size = 4780323, upload-time = "2026-07-01T11:54:09.351Z" }, + { url = "https://files.pythonhosted.org/packages/25/27/ac8f99618ffd3dde21db0f4d4b1d2ab00c0880595bfd17df103f7f39fd0c/pillow-12.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9", size = 6266838, upload-time = "2026-07-01T11:54:11.71Z" }, + { url = "https://files.pythonhosted.org/packages/84/21/a35af28dcc61f37ed850a2d64c65c701321dfbf25085e469d5559360cbbf/pillow-12.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91", size = 6940830, upload-time = "2026-07-01T11:54:13.732Z" }, + { url = "https://files.pythonhosted.org/packages/eb/51/8b08617af3ad95e33ce6d7dd2c99ed6c8298f7fb131636303956be022e25/pillow-12.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e491916b378fba47242221bb9ead245211b70d504f495d105d17b14a24b4907c", size = 6344383, upload-time = "2026-07-01T11:54:15.756Z" }, + { url = "https://files.pythonhosted.org/packages/1d/72/cf78ac9780bb93c28328f408973845a309d4d145041665f734572ced1b52/pillow-12.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0dd2064cbc55aaec028ef5fbb60fa47bb6c3e7918e07ff17935284b227a9d2df", size = 7052934, upload-time = "2026-07-01T11:54:17.721Z" }, + { url = "https://files.pythonhosted.org/packages/20/20/25e0f4dc178a6bc0696793720055519a0de89e7661dae886992decbd2f81/pillow-12.3.0-cp312-cp312-win32.whl", hash = "sha256:dbce0b29841537a2fa4a214c2bbf14de3587c9680caa9b4e217568472490b28f", size = 6472684, upload-time = "2026-07-01T11:54:19.839Z" }, + { url = "https://files.pythonhosted.org/packages/45/89/da2f7971a317f83d807fdd4065c0af40208e59e692cc43d315a71a0e96d1/pillow-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09", size = 7227137, upload-time = "2026-07-01T11:54:22.025Z" }, + { url = "https://files.pythonhosted.org/packages/de/47/4845a0a6c0dbf1db8456bd9fc791f13c5ced7ced20606d08a0aacfd25b49/pillow-12.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:331b624368d4f1d069149002f25f44bc61c8919ce8ddb3c45bdad8f6e2d89510", size = 2568267, upload-time = "2026-07-01T11:54:24.051Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, + { url = "https://files.pythonhosted.org/packages/dc/01/001f65b68192f0228cc1dbbc8d2530ab5d58b61037ba0587f946fea607cd/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9cf95fe4d0f84c82d282745d9bb08ad9f926efa00be4697e767b814ce40d4330", size = 4161736, upload-time = "2026-07-01T11:54:51.156Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d2/0219746d0fd16fc8a84498e79452375be3797d3ce4044596ce565164b84f/pillow-12.3.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:8728f216dcdb6e6d555cf971cb34076139ad74b31fc2c14da4fafc741c5f6217", size = 4255435, upload-time = "2026-07-01T11:54:53.414Z" }, + { url = "https://files.pythonhosted.org/packages/c8/02/8d0bc62ef0302318c46ff2a512822d2610e81c7aa46c9b3abe6cbaca5ad0/pillow-12.3.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a45650e8ce7fafffd731db8550230db6b0d306d181a90b67d3e6bca2f1990930", size = 3696262, upload-time = "2026-07-01T11:54:55.739Z" }, + { url = "https://files.pythonhosted.org/packages/85/e2/73c77d218410b14f5f2d565e8a998d5317b7b9c75368d29985139f7a46f0/pillow-12.3.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8", size = 5350344, upload-time = "2026-07-01T11:54:57.657Z" }, + { url = "https://files.pythonhosted.org/packages/c7/da/32c752228ae345f489e3a42499d817b6c3996da7e8a3bc7a04fc806b243b/pillow-12.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0", size = 4780131, upload-time = "2026-07-01T11:54:59.713Z" }, + { url = "https://files.pythonhosted.org/packages/b1/9d/8b2c807dbef61a5197c047afe99823787eb66f63daf9fb2432f91d6f0462/pillow-12.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321", size = 6263757, upload-time = "2026-07-01T11:55:01.778Z" }, + { url = "https://files.pythonhosted.org/packages/5c/44/c85361f65dbe00eea8576ee467c768d25129989efb76e94f205e9ca9bb46/pillow-12.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b", size = 6936962, upload-time = "2026-07-01T11:55:03.93Z" }, + { url = "https://files.pythonhosted.org/packages/18/7e/e483414b35800b86b6f08dbbc7803fb5cd52c4d6f897f47d53ea2c7e6f65/pillow-12.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fe3cca2e4e8a592be0f269a1ca4835c25199d9f3ce815c8491048f785b0a0198", size = 6339171, upload-time = "2026-07-01T11:55:05.989Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f4/68c491844841ede6bed70189546b3ee9731cf9f2cbad396faff5e1ccba45/pillow-12.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:23aceaa007d6172b02c277f0cd359c79492bbb14f7072b4ede9fbcaf20648130", size = 7048116, upload-time = "2026-07-01T11:55:08.131Z" }, + { url = "https://files.pythonhosted.org/packages/a3/34/77f3f793fed8efc7d243f21b33c5a3f0d1c97ee70346d3db855587e155ff/pillow-12.3.0-cp314-cp314-win32.whl", hash = "sha256:af8d94b0db561cf68b88a267c5c44b49e134f525d0dc2cb7ed413a66bc23559a", size = 6467209, upload-time = "2026-07-01T11:55:10.408Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e0/492879f69d94f91f60fc8cd05ba03650e9520afebb2fb7aa12777d7c7f38/pillow-12.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d", size = 7237707, upload-time = "2026-07-01T11:55:12.745Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ac/6b11f2875f1c2ac040d84e1bbf9cf22a88038f901ca1037898b280b38365/pillow-12.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:e91206ee562682b51b98ef4b26a6ef48fd84e15fd4c4bc5ec768eb641d206838", size = 2565995, upload-time = "2026-07-01T11:55:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/52/69/c2208e56af9bfc1913afb24020297a691eb1d4ef688474c8a04913f65e04/pillow-12.3.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e", size = 5352503, upload-time = "2026-07-01T11:55:17.076Z" }, + { url = "https://files.pythonhosted.org/packages/07/70/e5686d753e898a45d778ff1718dba8516ead6ab6b95d85fc8c4b70650cf2/pillow-12.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17", size = 4782956, upload-time = "2026-07-01T11:55:19.448Z" }, + { url = "https://files.pythonhosted.org/packages/d5/37/25c6692f06927ee973ff18c8d9ee98ad0b4d84ee67a09610c2dd1447958e/pillow-12.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385", size = 6322855, upload-time = "2026-07-01T11:55:21.613Z" }, + { url = "https://files.pythonhosted.org/packages/cc/91/420637fcb8f1bc11029e403b4538e6694744428d8246118e45719f944556/pillow-12.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c", size = 6989642, upload-time = "2026-07-01T11:55:24.006Z" }, + { url = "https://files.pythonhosted.org/packages/10/08/b94d7811281ccf0d143a1cf768d1c49e1e54af63e7b708ab2ee3eb87face/pillow-12.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:24870b09b224f7ae3c39ed07d10e819d06f8720bc551847b1d623832b5b0e28d", size = 6391281, upload-time = "2026-07-01T11:55:26.252Z" }, + { url = "https://files.pythonhosted.org/packages/d2/87/24233f785f55474dc02ce3e739c5528a77e3a862e9333d1dd7a25cc31f70/pillow-12.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:30f2aa603c41533cc25c05acd0da21636e84a315768feb631c937177db558931", size = 7096716, upload-time = "2026-07-01T11:55:28.318Z" }, + { url = "https://files.pythonhosted.org/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7", size = 6474125, upload-time = "2026-07-01T11:55:30.956Z" }, + { url = "https://files.pythonhosted.org/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c", size = 7242939, upload-time = "2026-07-01T11:55:34.044Z" }, + { url = "https://files.pythonhosted.org/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45", size = 2567506, upload-time = "2026-07-01T11:55:35.988Z" }, + { url = "https://files.pythonhosted.org/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139", size = 4162063, upload-time = "2026-07-01T11:55:37.941Z" }, + { url = "https://files.pythonhosted.org/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402", size = 4255549, upload-time = "2026-07-01T11:55:40.022Z" }, + { url = "https://files.pythonhosted.org/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c", size = 3696331, upload-time = "2026-07-01T11:55:41.98Z" }, + { url = "https://files.pythonhosted.org/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f", size = 5350370, upload-time = "2026-07-01T11:55:44.028Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701", size = 4780147, upload-time = "2026-07-01T11:55:46.073Z" }, + { url = "https://files.pythonhosted.org/packages/0c/08/93fa2e70e30a2d81547e481b6ee2bb9522117221fb1e0ce4b5df70967677/pillow-12.3.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28ce87c5ab450a9dd970b52e5aca5fe63ed432d18a2eaddd1979a00a1ba24ace", size = 6273659, upload-time = "2026-07-01T11:55:48.264Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6d/043e96ff814fc31a33077e4cba86082167db520c93632afdf2042febbb0c/pillow-12.3.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b02afb9b97f65fbca5f31db6a2a3ba21aa93030225f150fa3f249717e938fb4", size = 6947439, upload-time = "2026-07-01T11:55:50.503Z" }, + { url = "https://files.pythonhosted.org/packages/af/92/ba71d2ee2ac0edf3fa33bd9d5ee9ee080da70b1766f3ca3934f9938ddac9/pillow-12.3.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:1182d52bc2d5e5d7d0949503aa7e36d12f42205dc287e4883f407b1988820d39", size = 6353577, upload-time = "2026-07-01T11:55:52.697Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ce/e63064e2122923ff687c8ad792d0d736a7b3920a56a46982e81a7fdd25d6/pillow-12.3.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e795b7eb908249c4e43c7c99fac7c2c75dab0c43566e37db472a355f63693d71", size = 7060394, upload-time = "2026-07-01T11:55:55.149Z" }, + { url = "https://files.pythonhosted.org/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827", size = 6467375, upload-time = "2026-07-01T11:55:57.769Z" }, + { url = "https://files.pythonhosted.org/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5", size = 7237048, upload-time = "2026-07-01T11:55:59.975Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658", size = 2566006, upload-time = "2026-07-01T11:56:02.143Z" }, + { url = "https://files.pythonhosted.org/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf", size = 5352509, upload-time = "2026-07-01T11:56:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64", size = 4783167, upload-time = "2026-07-01T11:56:06.631Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/9e049dfa21af7c22427275720e2490267ba8138120add5c4c574deb69782/pillow-12.3.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:446c34dcc4324b084a53b705127dc15717b22c5e140ae0a3c38349d4efec071e", size = 6329237, upload-time = "2026-07-01T11:56:08.868Z" }, + { url = "https://files.pythonhosted.org/packages/36/16/cf6eeaae8d0fce8dd390a33437cf68c5d5bd73834a2bc6e2f14efda0ab45/pillow-12.3.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf1845d02ad822a369a49f2bb9345b1614744267682e7a03527dc3bf6eea1777", size = 6997047, upload-time = "2026-07-01T11:56:11.379Z" }, + { url = "https://files.pythonhosted.org/packages/1e/69/dbf769bdd55f48bf5733cac28edc6364ffaa072ec9ba336266e4fe66be55/pillow-12.3.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:186941b6aef820ad110fb01fb06eb925374dc3a21b17e37ec9a53b250c6fe2d1", size = 6400440, upload-time = "2026-07-01T11:56:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e1/ffc9cfc2eea0d178da8018e18e959301ad9d6bc9f3edb7181e748a474b97/pillow-12.3.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:f13c32a3abd6079a66d9526e18dad9b6d280384d49d7c54040cd57b6424041d9", size = 7105895, upload-time = "2026-07-01T11:56:16.575Z" }, + { url = "https://files.pythonhosted.org/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8", size = 6474384, upload-time = "2026-07-01T11:56:18.855Z" }, + { url = "https://files.pythonhosted.org/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418", size = 7243537, upload-time = "2026-07-01T11:56:21.214Z" }, + { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" }, + { url = "https://files.pythonhosted.org/packages/75/18/2e8b40223153ccbc60df07f9e8928dc0c76202aa4e55ae9f53962b6510d6/pillow-12.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b3c777e849237620b022f7f297dd67705f9f5cf1685f09f02e46f93e92725468", size = 5302510, upload-time = "2026-07-01T11:56:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/46/3e/51fabf59d5ab801ceab709453d3ab6b180083496579549de4c45ced6528a/pillow-12.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b343699e8308bdc51978310e1c959c584e7869cc8c40780058c87da7781a1e94", size = 4736058, upload-time = "2026-07-01T11:56:28.041Z" }, + { url = "https://files.pythonhosted.org/packages/bf/20/22fe9384b7949e25fb1293bcfc84fb82590ff4ea6b37c95b24d26d793d86/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbd139c8447d25dd750ab79ee274cc5e1fe80fc56340ab10b18a195e1b6eca3e", size = 5237776, upload-time = "2026-07-01T11:56:30.263Z" }, + { url = "https://files.pythonhosted.org/packages/08/14/f6ba68107680ffa74b39985f3f30884e41318fbc4250caa423c79b4788bb/pillow-12.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7e480451b9fa137494bccd3a7d69adbe8ac65a87d97be61e11f1b1050a5bac3", size = 5860358, upload-time = "2026-07-01T11:56:32.68Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0169bc772ec491108b62f644f8ecf1fe5d8ae5ebafde2ee2142210166903/pillow-12.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a", size = 7231786, upload-time = "2026-07-01T11:56:35.046Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", size = 31953, upload-time = "2026-07-21T13:09:36.565Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74", size = 23247, upload-time = "2026-07-21T13:09:35.422Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "propcache" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/56/030b7b4719d53085722893e0009dffb9236aa10bca1b12121bdc5626ef16/propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b", size = 93417, upload-time = "2026-05-08T20:59:15.597Z" }, + { url = "https://files.pythonhosted.org/packages/1a/55/1140a8e067b8ec093a18a4ae7bb0045d9db65da38a08618ddc5e2f1994aa/propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c", size = 53847, upload-time = "2026-05-08T20:59:17.096Z" }, + { url = "https://files.pythonhosted.org/packages/20/42/0e7443c90310498561addf346e7d57fe3c6ba1914e1ba938b5464c7bbfd2/propcache-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb", size = 53512, upload-time = "2026-05-08T20:59:18.64Z" }, + { url = "https://files.pythonhosted.org/packages/b7/db/cf51a71bab2009517d1a7f0ee07657e3bd446c4d69f67e6966cf17bcf956/propcache-0.5.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8ea531c794b9d6274acd4e8d2c2ebcac590a4361d27482edd3010b79f1325e", size = 58068, upload-time = "2026-05-08T20:59:20.683Z" }, + { url = "https://files.pythonhosted.org/packages/b7/43/39b6bdee9699fa1e1641c519feeb64a67e2a9f93bb465c70776b37a7333f/propcache-0.5.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:decfca4c79dd53ebab484b00cc4b6717d8c369f86e74aa4ca395a64ac651495e", size = 61020, upload-time = "2026-05-08T20:59:22.112Z" }, + { url = "https://files.pythonhosted.org/packages/26/0b/843726fbb0a29a8c5684fdb25971823638399f31e52e9d1f06a02dc9aa6b/propcache-0.5.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4621064bbf28fa77ff64dd5d94367c04684c67d3a5bf1dff25f0cd0d98a38f3b", size = 62732, upload-time = "2026-05-08T20:59:23.805Z" }, + { url = "https://files.pythonhosted.org/packages/39/6e/899fed76dc1942b8a64193a4f059d7f1a2c7ef65085e8a9366ed8ec0d199/propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b96db7141a592cbc968daf1feea83a118e6ab378af4abbc72b248c895414c22d", size = 60140, upload-time = "2026-05-08T20:59:25.389Z" }, + { url = "https://files.pythonhosted.org/packages/ab/09/3da4be9b5b879219ad234aa535b3dd4a080ed1ad48d3a73ca07a9e798f22/propcache-0.5.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ca071adabaab6e9219924bbe00af821f1ee7de113a9eca1cdc292de3d120f4d", size = 60400, upload-time = "2026-05-08T20:59:27.238Z" }, + { url = "https://files.pythonhosted.org/packages/60/2f/09b72b874a9aa0044faf52a69807a6ed618e267ceaa9ec4a63195fa5b504/propcache-0.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e4294d04a94dcab1b3bccd8b66d962dcad411a1d19414b2a41d1445f1de32ad0", size = 58155, upload-time = "2026-05-08T20:59:28.48Z" }, + { url = "https://files.pythonhosted.org/packages/8a/37/97489848c54c95578045473954f10956d619ce6a09e7ac137b71cdcb698b/propcache-0.5.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a0e399a2eccb91ed18721f86aa85757727400b6865c89e88934781deb9c8498b", size = 57037, upload-time = "2026-05-08T20:59:30.146Z" }, + { url = "https://files.pythonhosted.org/packages/22/db/6c695285ccfc49012743ee9c98212b8c5dd0aed7b63cfd816d4a0f7a1601/propcache-0.5.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:823581fd5cb08b12a48bfa11fe962a7916766b6170c17b028fbdf762b85eb9bf", size = 61103, upload-time = "2026-05-08T20:59:31.626Z" }, + { url = "https://files.pythonhosted.org/packages/98/a9/1e500401ca593b0bdb6bf75a70bc2d723835fd53360edff6af70692c7546/propcache-0.5.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:949c91d1a990cf3b2e8188dfcfb25005e0b834a06c63fa4ef9f360878ce21ecf", size = 60394, upload-time = "2026-05-08T20:59:32.829Z" }, + { url = "https://files.pythonhosted.org/packages/1f/87/f638b6e375eae0f30a1a2325d8b34fd85fdc785bb9960cf805f3bf1ec69a/propcache-0.5.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc1177027eda740fdb152706bd215a3f124e3eea15afc39f2cb9fe351b50619e", size = 63084, upload-time = "2026-05-08T20:59:35.964Z" }, + { url = "https://files.pythonhosted.org/packages/f6/18/884573f5d97b6d9eba68de759a82c901b7e39d7904d30f7b8d58d42d2a12/propcache-0.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b05d643f944a8c3c4bd86d65ffd87bf3264b617f87791940302bc474d2ff5274", size = 60999, upload-time = "2026-05-08T20:59:38.481Z" }, + { url = "https://files.pythonhosted.org/packages/8f/1a/c3915eb059ceec9e758a56e4cfd955292bc0f201be2176a46b76d94b303a/propcache-0.5.2-cp310-cp310-win32.whl", hash = "sha256:8114f28879e0904748e831c3a7774261bd9e75f49be089f389a76f959dcd13fe", size = 39036, upload-time = "2026-05-08T20:59:40.323Z" }, + { url = "https://files.pythonhosted.org/packages/5b/02/1dfd5607501a602d19c1c449d2d193b7d1c611f9246b4059026a1189a80e/propcache-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:5fcb98e7598b1ee0addab320d90f65b530297a867dbfe9de52ea838077e16e3d", size = 42190, upload-time = "2026-05-08T20:59:42.232Z" }, + { url = "https://files.pythonhosted.org/packages/57/93/f71588ad08b3e6f4b555b5ef215808a3c02b042d0151ad82fa6f15be677a/propcache-0.5.2-cp310-cp310-win_arm64.whl", hash = "sha256:04dc2390d9edbbaef7461f33322555976ffddf0b650a038649d026358714e6c5", size = 38545, upload-time = "2026-05-08T20:59:44.087Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, + { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, + { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, + { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, + { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, + { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, + { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, + { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, + { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, + { url = "https://files.pythonhosted.org/packages/b8/9b/2da6dee38871c3c8772fabc2758325a5c9077d6d18c597737dc04dd884cd/propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0", size = 38966, upload-time = "2026-05-08T21:00:06.511Z" }, + { url = "https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82", size = 42135, upload-time = "2026-05-08T21:00:08.088Z" }, + { url = "https://files.pythonhosted.org/packages/c6/eb/6af6685077d22e8b33358d3c548e3282706a0b3cd85044ffba4e5dd08e3b/propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab", size = 38381, upload-time = "2026-05-08T21:00:09.692Z" }, + { url = "https://files.pythonhosted.org/packages/4a/cb/e27bc2b2737a0bb49962b275efa051e8f1c35a936df7d5139b6b658b7dc9/propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba", size = 95887, upload-time = "2026-05-08T21:00:11.277Z" }, + { url = "https://files.pythonhosted.org/packages/e6/13/b8ae04c59392f8d11c6cd9fb4011d1dc7c86b81225c770280300e259ffe1/propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a", size = 54654, upload-time = "2026-05-08T21:00:12.604Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7d/49777a3e20b55863d4794384a38acd460c04157b0a00f8602b0d508b8431/propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf", size = 55190, upload-time = "2026-05-08T21:00:13.935Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/085d0cd63062e84044e3f05797749c3f8e3938ff3aeb0eb2f69d43fafc91/propcache-0.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144", size = 59995, upload-time = "2026-05-08T21:00:15.526Z" }, + { url = "https://files.pythonhosted.org/packages/9c/42/32cf8e3009e92b2645cf1e944f701e8ea4e924dffde1ee26db860bcbf7e4/propcache-0.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9", size = 63422, upload-time = "2026-05-08T21:00:16.824Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/f112433f99fc979431b87a39ef169e3f8df070d99a72792c56d6937ac48b/propcache-0.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42", size = 64342, upload-time = "2026-05-08T21:00:18.362Z" }, + { url = "https://files.pythonhosted.org/packages/14/15/5574111ae50dd6e879456888c0eadd4c5a869959775854e18e18a6b345f3/propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476", size = 61639, upload-time = "2026-05-08T21:00:19.692Z" }, + { url = "https://files.pythonhosted.org/packages/cc/da/4d775080b1490c0ae604acda868bd71aabe3a89ed16f2aa4339eb8a283e7/propcache-0.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba", size = 61588, upload-time = "2026-05-08T21:00:21.155Z" }, + { url = "https://files.pythonhosted.org/packages/04/ac/f076982cbe2195ee9cf32de5a1e46951d9fb399fc207f390562dd0fd8fb2/propcache-0.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a", size = 60029, upload-time = "2026-05-08T21:00:22.713Z" }, + { url = "https://files.pythonhosted.org/packages/70/60/189be62e0dd898dce3b331e1b8c7a543cd3a405ac0c81fe8ee8a9d5d77e1/propcache-0.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64", size = 56774, upload-time = "2026-05-08T21:00:24.001Z" }, + { url = "https://files.pythonhosted.org/packages/ea/9e/93377b9c7939c1ffae98f878dee955efadfd638078bc86dbc21f9d52f651/propcache-0.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913", size = 63532, upload-time = "2026-05-08T21:00:25.545Z" }, + { url = "https://files.pythonhosted.org/packages/14/f9/590ef6cfb9b8028d516d287812ece32bb0bc5f11fbb9c8bf6b2e6313fec8/propcache-0.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1", size = 61592, upload-time = "2026-05-08T21:00:27.186Z" }, + { url = "https://files.pythonhosted.org/packages/b4/5e/70958b3034c297a630bba2f17ca7abc2d5f39a803ad7e370ab79d1ecd022/propcache-0.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33", size = 64788, upload-time = "2026-05-08T21:00:28.8Z" }, + { url = "https://files.pythonhosted.org/packages/12/fd/77fe5936d8c3086ca9048f7f415f122ed82e53884a9ec193646b42deef06/propcache-0.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a", size = 62514, upload-time = "2026-05-08T21:00:30.098Z" }, + { url = "https://files.pythonhosted.org/packages/cf/74/66bd798b5b3be70aa1b391f5cc9d6a0a5532d7fd3b19ec0b213e72e6ad9d/propcache-0.5.2-cp312-cp312-win32.whl", hash = "sha256:8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031", size = 39018, upload-time = "2026-05-08T21:00:31.622Z" }, + { url = "https://files.pythonhosted.org/packages/61/7c/5c0d34aa3024694d6dcb9271cdbdd08c4e47c1c0ad95ec7e7bc74cdea145/propcache-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42", size = 42322, upload-time = "2026-05-08T21:00:32.918Z" }, + { url = "https://files.pythonhosted.org/packages/4d/91/875812f1a3feb20ceba818ef39fbe4d92f1081e04ac815c822496d0d038b/propcache-0.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84", size = 38172, upload-time = "2026-05-08T21:00:35.124Z" }, + { url = "https://files.pythonhosted.org/packages/c5/09/f049e45385503fe67db75a6b6186a7b9f0c3930366dc960522c312a825b1/propcache-0.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a", size = 94457, upload-time = "2026-05-08T21:00:36.355Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/83d1d05655baf63113731bd5a1008435e14f8d1e5a06cbe4ec5b23ad7a31/propcache-0.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117", size = 53835, upload-time = "2026-05-08T21:00:38.072Z" }, + { url = "https://files.pythonhosted.org/packages/a9/12/a6ba6482bb5ea3260c000c9b20881c95fa11c6b30173715668259f844ed7/propcache-0.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098", size = 54545, upload-time = "2026-05-08T21:00:39.319Z" }, + { url = "https://files.pythonhosted.org/packages/a9/19/7fa086f5764c59ec8a8e157cd93aa8497acc00aba9dcdec56bfffb32602d/propcache-0.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4", size = 59886, upload-time = "2026-05-08T21:00:40.621Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e4/5d7663dc8235956c8f5281698a3af1d351d8820341ddd890f59d9a9127f2/propcache-0.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e", size = 63261, upload-time = "2026-05-08T21:00:41.775Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/15a03adee24d6350da4292caeac44c34c033d2afe5e87eb370f38854560f/propcache-0.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7", size = 64184, upload-time = "2026-05-08T21:00:43.018Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c6/979176efdaa3d239e36d503d5af63a0a773b36662ed8f52e5b6a6d9fd40e/propcache-0.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d", size = 61534, upload-time = "2026-05-08T21:00:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/c8/22/63e8cd1bae4c2d2be6493b6b7d10566ddafad88137cfbc99964a1119853c/propcache-0.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a", size = 61500, upload-time = "2026-05-08T21:00:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/60/5a/28e5d9acbac1cc9ccb67045e8c1b943aa8d79fdf39c93bd73cacd68008ea/propcache-0.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2", size = 59994, upload-time = "2026-05-08T21:00:47.093Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/db650677f554a95b9c01a7c9d93d629e93a15562f5deb4573c9ee136fed2/propcache-0.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa", size = 56884, upload-time = "2026-05-08T21:00:48.376Z" }, + { url = "https://files.pythonhosted.org/packages/80/45/70b39b89516ff8b96bf732fa6fded8cef20f293cb1508690101c3c07ec51/propcache-0.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853", size = 63464, upload-time = "2026-05-08T21:00:49.954Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e2/fa59d3a89eac5534293124af4f1d0d0ada091ce4a0ab4610ce03fd2bdd8d/propcache-0.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a", size = 61588, upload-time = "2026-05-08T21:00:51.281Z" }, + { url = "https://files.pythonhosted.org/packages/0b/97/efb547a55c4bc7381cfb202d6a2239ac621045277bc1ea5dfd3a7f0516c0/propcache-0.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704", size = 64667, upload-time = "2026-05-08T21:00:52.602Z" }, + { url = "https://files.pythonhosted.org/packages/92/56/f5c7d9b4b7595d5127da38974d791b2153f3d1eae6c674af3583ace92ad3/propcache-0.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4", size = 62463, upload-time = "2026-05-08T21:00:54.303Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3b/484a3a65fc9f9f60c41dcd17b428bace5389544e2c680994534a20755066/propcache-0.5.2-cp313-cp313-win32.whl", hash = "sha256:f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d", size = 38621, upload-time = "2026-05-08T21:00:55.808Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fd/3f0f10dba4dabad3bf53102be007abf55481067952bde0fdddff439e7c61/propcache-0.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757", size = 41649, upload-time = "2026-05-08T21:00:57.061Z" }, + { url = "https://files.pythonhosted.org/packages/90/ec/6ce619cc32bb500a482f811f9cd509368b4e58e638d13f2c68f370d6b475/propcache-0.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f", size = 37636, upload-time = "2026-05-08T21:00:58.646Z" }, + { url = "https://files.pythonhosted.org/packages/1b/82/c1d268bbbf2ef981c5bf0fbbe746db617c66e3bcefe431a1aa8943fbe23a/propcache-0.5.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d", size = 98872, upload-time = "2026-05-08T21:00:59.889Z" }, + { url = "https://files.pythonhosted.org/packages/f4/d4/52c871e73e864e6b34c0e2d58ac1ec5ccd149497ddc7ad2137ae98323a35/propcache-0.5.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa", size = 56257, upload-time = "2026-05-08T21:01:01.195Z" }, + { url = "https://files.pythonhosted.org/packages/67/f0/9b90ca2a210b3d09bcfcd96ecd0f55545c091535abce2a45de2775cfd357/propcache-0.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94", size = 56696, upload-time = "2026-05-08T21:01:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0e/6e9d4ba07c8e56e21ddec1e75f12148142b21ca83a51871babce095334f4/propcache-0.5.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164", size = 62378, upload-time = "2026-05-08T21:01:04.475Z" }, + { url = "https://files.pythonhosted.org/packages/65/19/c10badaa463dde8a27ce884f8ee2ec37e6035b7c9f5ff0c8f74f06f08dac/propcache-0.5.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f", size = 65283, upload-time = "2026-05-08T21:01:05.959Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b6/93bea99ca80e19cef6512a8580e5b7857bbe09422d9daa7fd4ef5723306c/propcache-0.5.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c", size = 66616, upload-time = "2026-05-08T21:01:07.228Z" }, + { url = "https://files.pythonhosted.org/packages/83/e4/5c7462e50625f051f37fb38b8224f7639f667184bbd34424ec83819bb1b7/propcache-0.5.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc", size = 63773, upload-time = "2026-05-08T21:01:08.514Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b6/99238894047b13c823be25027e736626cd414a52a5e30d2c3347c2733529/propcache-0.5.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f", size = 63664, upload-time = "2026-05-08T21:01:09.874Z" }, + { url = "https://files.pythonhosted.org/packages/85/1e/a3a1a63116a2b8edb415a8bb9a6f0c34bd03830b1e18e8ce2904e1dc1cf4/propcache-0.5.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb", size = 62643, upload-time = "2026-05-08T21:01:11.132Z" }, + { url = "https://files.pythonhosted.org/packages/e4/03/893cf147de2fc6543c5eaa07ad833170e7e2a2385725bbebe8c0503723bb/propcache-0.5.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751", size = 59595, upload-time = "2026-05-08T21:01:12.387Z" }, + { url = "https://files.pythonhosted.org/packages/86/3b/04c1a2e12c57766568ba75ba72b3bf2042818d4c1425fab6fc07155c7cff/propcache-0.5.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836", size = 65711, upload-time = "2026-05-08T21:01:13.676Z" }, + { url = "https://files.pythonhosted.org/packages/1c/34/80f8d0099f8d6bacc4de1624c85672681c8cd1149ca2da0e38fd120b817f/propcache-0.5.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f", size = 64247, upload-time = "2026-05-08T21:01:14.936Z" }, + { url = "https://files.pythonhosted.org/packages/f3/1a/8b08f3a5f1037e9e370c55883ceeeee0f6dd0416fb2d2d67b8bfc91f2a79/propcache-0.5.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55", size = 67102, upload-time = "2026-05-08T21:01:16.281Z" }, + { url = "https://files.pythonhosted.org/packages/34/68/8bdb7bb7756d76e005490649d10e4a8369e610c74d619f71e1aedf889e9c/propcache-0.5.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568", size = 64964, upload-time = "2026-05-08T21:01:17.57Z" }, + { url = "https://files.pythonhosted.org/packages/0a/aa/50fb0b5d3968b61a510926ff8b8465f1d6e976b3ab74496d7a4b9fc42515/propcache-0.5.2-cp313-cp313t-win32.whl", hash = "sha256:72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191", size = 42546, upload-time = "2026-05-08T21:01:18.946Z" }, + { url = "https://files.pythonhosted.org/packages/ae/4c/0ddbae64321bd4a95bcbfc19307238016b5b1fee645c84626c8d539e5b74/propcache-0.5.2-cp313-cp313t-win_amd64.whl", hash = "sha256:0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7", size = 46330, upload-time = "2026-05-08T21:01:20.162Z" }, + { url = "https://files.pythonhosted.org/packages/00/d9/9cddc8efb78d8af264c5ec9f6d10b62f57c515feda8d321595f56010fb23/propcache-0.5.2-cp313-cp313t-win_arm64.whl", hash = "sha256:6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96", size = 40521, upload-time = "2026-05-08T21:01:21.399Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ea/23ee535d90ce8bcc465a3028eb3cc0ce3bd1005f4bb27710b30587de798d/propcache-0.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999", size = 94662, upload-time = "2026-05-08T21:01:22.683Z" }, + { url = "https://files.pythonhosted.org/packages/b5/06/c5a52f419b5d8972f8d46a7577476090d8e3263ff589ce40b5ca4968d5be/propcache-0.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e", size = 53928, upload-time = "2026-05-08T21:01:23.986Z" }, + { url = "https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539", size = 54650, upload-time = "2026-05-08T21:01:25.305Z" }, + { url = "https://files.pythonhosted.org/packages/70/06/2f46c318e3307cd7a6a7481def374ce838c0fe20084b39dd54b0879d0e99/propcache-0.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e", size = 59912, upload-time = "2026-05-08T21:01:26.545Z" }, + { url = "https://files.pythonhosted.org/packages/4c/29/fe1aebec2ce57ab985a9c382bded1124431f85078113aa222c5d278430d4/propcache-0.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979", size = 63300, upload-time = "2026-05-08T21:01:27.937Z" }, + { url = "https://files.pythonhosted.org/packages/b4/18/2334b26768b6c82be8c69e83671b767d5ef426aa09b0cba6c2ea47816774/propcache-0.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80", size = 64208, upload-time = "2026-05-08T21:01:29.484Z" }, + { url = "https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825", size = 61633, upload-time = "2026-05-08T21:01:31.068Z" }, + { url = "https://files.pythonhosted.org/packages/c4/46/b3ff8aba2b4953a3e50de2cf72f1b5748b8eca93b15f3dc2c84339084c09/propcache-0.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39", size = 61724, upload-time = "2026-05-08T21:01:32.374Z" }, + { url = "https://files.pythonhosted.org/packages/c5/01/814cfcafbcff954f94c01cf30e097ddc88a076b5440fbcf4570753437d40/propcache-0.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4", size = 60069, upload-time = "2026-05-08T21:01:33.67Z" }, + { url = "https://files.pythonhosted.org/packages/da/68/5c6f7622d510cc666a300687e06fd060c1a43361c0c9b20d284f06d8096a/propcache-0.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5", size = 57099, upload-time = "2026-05-08T21:01:34.915Z" }, + { url = "https://files.pythonhosted.org/packages/55/27/9cb0b4c679124085327957d42521c99dba04c88c90c3e55a6f0b633ebccc/propcache-0.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702", size = 63391, upload-time = "2026-05-08T21:01:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/f0/9d/7258aaa5bdf60fc6f27591eef6fe52768cb0beda7140be477c8b12c9794a/propcache-0.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3", size = 61626, upload-time = "2026-05-08T21:01:37.545Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0d/41c602003e8a9b16fe1e7eadf62c7bfba9d5474370b24200bf48b315f45f/propcache-0.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5", size = 64781, upload-time = "2026-05-08T21:01:38.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f3/38e66b1856e9bd079deea015bc4a55f7767c0e4db2f7dcf69e7e680ba4ce/propcache-0.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4", size = 62570, upload-time = "2026-05-08T21:01:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/95/ca/bbfe9b910ce57dde8bb4876b4520fc02a4e89497c10de26be936758a3aaa/propcache-0.5.2-cp314-cp314-win32.whl", hash = "sha256:cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0", size = 39436, upload-time = "2026-05-08T21:01:41.654Z" }, + { url = "https://files.pythonhosted.org/packages/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c", size = 42373, upload-time = "2026-05-08T21:01:43.041Z" }, + { url = "https://files.pythonhosted.org/packages/44/68/9ea5103f41d5217d7d6ec24db90018e23aebec070c3f9a6e54d12b841fd8/propcache-0.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0", size = 38554, upload-time = "2026-05-08T21:01:44.336Z" }, + { url = "https://files.pythonhosted.org/packages/8a/81/fadf555f42d3b762eea8a53950b0489fdc0aa9da5f8ed9e10ce0a4e01b48/propcache-0.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb", size = 99395, upload-time = "2026-05-08T21:01:45.883Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c9/c61e134a686949cf7971af3a390148b1156f7be81c73bc0cd12c873e2d48/propcache-0.5.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078", size = 56653, upload-time = "2026-05-08T21:01:47.307Z" }, + { url = "https://files.pythonhosted.org/packages/cb/73/daf935ea7048ddd7ec8eec5345b4a40b619d2d178b3c0a0900796bc3c794/propcache-0.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa", size = 56914, upload-time = "2026-05-08T21:01:48.573Z" }, + { url = "https://files.pythonhosted.org/packages/79/9f/aba959b435ea18617edd7cf0a7ad0b9c574b8fc7e3d2cd55fb59cb255d33/propcache-0.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917", size = 62567, upload-time = "2026-05-08T21:01:49.903Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a1/859942de9a791ff42f6141736f5b37749b8f53e65edfa49638c67dd67e6a/propcache-0.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe", size = 65542, upload-time = "2026-05-08T21:01:51.204Z" }, + { url = "https://files.pythonhosted.org/packages/b5/61/315bc0fd6c0fc7f80a528b8afd209e5fc4a875ea79571b91b8f50f442907/propcache-0.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03", size = 66845, upload-time = "2026-05-08T21:01:52.539Z" }, + { url = "https://files.pythonhosted.org/packages/47/f7/9f8122e3132e8e354ac41975ef8f1099be7d5a16bc7ae562734e993665c0/propcache-0.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335", size = 63985, upload-time = "2026-05-08T21:01:53.847Z" }, + { url = "https://files.pythonhosted.org/packages/c8/54/c317819ec157cbf6f35df9df9657a6f82daf34d5faf15948b2f639c2192e/propcache-0.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285", size = 63999, upload-time = "2026-05-08T21:01:55.179Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/387e3f7dfce0a9233df41fb888aa1c30222cb4bbbf09537c02dd9bd85fe2/propcache-0.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837", size = 62779, upload-time = "2026-05-08T21:01:57.489Z" }, + { url = "https://files.pythonhosted.org/packages/a1/9c/596784cb5824ed61ee960d3f8655a3f0993e107c6e98ab6c818b7fb92ccb/propcache-0.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8", size = 59796, upload-time = "2026-05-08T21:01:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/c2/3d/1a6cfa1726a48542c1e8784a0761421476a5b68e09b7f36bf95eb954aaba/propcache-0.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366", size = 66023, upload-time = "2026-05-08T21:02:00.228Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0e/05fd6990369477076e4e280bcb970de760fddf0161a46e988bc95f7940ec/propcache-0.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56", size = 64448, upload-time = "2026-05-08T21:02:01.888Z" }, + { url = "https://files.pythonhosted.org/packages/cd/86/5f8da315a4309c62c10c0b2516b17492d5d3bbe1bb862b96604db67e2a37/propcache-0.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d", size = 67329, upload-time = "2026-05-08T21:02:03.484Z" }, + { url = "https://files.pythonhosted.org/packages/da/d3/3368efe79ab21f0cdf86ef49895811c9cc933131d4cde1f28a624e22e712/propcache-0.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2", size = 65172, upload-time = "2026-05-08T21:02:04.745Z" }, + { url = "https://files.pythonhosted.org/packages/d5/07/127e8b0bacfb325396196f9d976a22453049b89b9b2b08477cc3145faa44/propcache-0.5.2-cp314-cp314t-win32.whl", hash = "sha256:2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821", size = 43813, upload-time = "2026-05-08T21:02:06.025Z" }, + { url = "https://files.pythonhosted.org/packages/88/fb/46dad6c0ae49ed230ab1b16c890c2b6314e2403e6c412976f4a72d64a527/propcache-0.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370", size = 47764, upload-time = "2026-05-08T21:02:07.353Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c4/a47d0a63aa309d10d59ede6e9d4cff03a344a79d1f0f4cd0cd74997b53e0/propcache-0.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6", size = 41140, upload-time = "2026-05-08T21:02:09.065Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, +] + +[[package]] +name = "py-key-value-aio" +version = "0.4.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beartype" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/e2/d689d922894a7ecde73b6daeaf9b13dab5aae06fe6aaaf7514722644d382/py_key_value_aio-0.4.5.tar.gz", hash = "sha256:c6563a2c6abe5da5e20f4f9e875c2a9b425a2244a54fadbf46cf140a9eea45d7", size = 107547, upload-time = "2026-05-27T16:37:08.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/95/b8ba862968712caa12a19666175334fa979e1f198b896a430adb3bacfe87/py_key_value_aio-0.4.5-py3-none-any.whl", hash = "sha256:ab862adbcb8c72547d1c57821f22cbbb71ab86509039c96f36e914e0336c8dd7", size = 170005, upload-time = "2026-05-27T16:37:06.629Z" }, +] + +[package.optional-dependencies] +filetree = [ + { name = "aiofile", version = "3.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "aiofile", version = "3.11.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "anyio" }, +] +keyring = [ + { name = "keyring" }, +] +memory = [ + { name = "cachetools" }, +] + +[[package]] +name = "pyarrow" +version = "25.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/f3/95428098d1fa7d04432fb750eed06b41304c2f6a5d3319985e64db2d9d41/pyarrow-25.0.0.tar.gz", hash = "sha256:d2d697008b5ec06d75952ef260c2e9a8a0f6ccfce24266c04c9c8ade927cb3b4", size = 1199181, upload-time = "2026-07-10T08:29:50.116Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/2a/eaa70e6d6ed430c2e90c0599e2831a41a50251879e44788ccdbc73115af1/pyarrow-25.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ce0ca222802087b9a8cb031a6468442cb6b67c290a45a601cac64753d34954d3", size = 35945551, upload-time = "2026-07-10T08:25:23.153Z" }, + { url = "https://files.pythonhosted.org/packages/df/e0/917086af6b246143012cdc8a7c886b018b53204f3d69fc5f9be5857a8b80/pyarrow-25.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7d6da02ffc7a3a9bda3b7ded4cc2a27ff73969ab37153f3afd46bbbc1ba4f0f7", size = 37636698, upload-time = "2026-07-10T08:25:28.031Z" }, + { url = "https://files.pythonhosted.org/packages/68/6a/c87829f92503f84993721791c942f3d9aa81044de51a8cfb1da5810e5345/pyarrow-25.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:dbf9fa5d4bde73b1cc16377dcaaa010f971e6fa7f5083f5d44f34b50bc1d74af", size = 46858364, upload-time = "2026-07-10T08:25:34.527Z" }, + { url = "https://files.pythonhosted.org/packages/cc/ba/2030d454c2747e26cce23e4a0338067ee0830a155b7894da04caa96783a5/pyarrow-25.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b72d943ff4e10fec8d48aedb23322d8f6ea8bc2d698b81db37e73730f69e4862", size = 50056398, upload-time = "2026-07-10T08:25:40.785Z" }, + { url = "https://files.pythonhosted.org/packages/78/ce/ba7a5ce7bf0cfc372ec48203a34ece42f73aa2f3231706f61c55e105ecd0/pyarrow-25.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5fb2d837960f1df7f679ff9f1a55065e306347d379e0768cebf14781254d6194", size = 49958146, upload-time = "2026-07-10T08:25:46.98Z" }, + { url = "https://files.pythonhosted.org/packages/75/eb/c34a29fb7a70dca2f903c7d85a928928ef55af20cd56e99de6b4c0d897bc/pyarrow-25.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:add690feafa0953c443cdba9e9e87f5eaa198f1ea2e43a3b146ea83f202262d0", size = 53096264, upload-time = "2026-07-10T08:25:53.925Z" }, + { url = "https://files.pythonhosted.org/packages/36/f9/35b1f83a0727d84951588e4034aca2feb76dfb45b0725918c0037b0a48f7/pyarrow-25.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:d293e9959b29a24c82d936d04ab2b7fd8b8d334030de2e56a99aba94f008ad7a", size = 27840572, upload-time = "2026-07-10T08:25:58.966Z" }, + { url = "https://files.pythonhosted.org/packages/a7/98/ae2b5acf9876dbeffa6f320776242c52caab062df55c8ac5501ed2679e74/pyarrow-25.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:2e3b6544e26e393fe2cd530f523e36c1c8d3c345bbbb60cca3fd866be8322517", size = 35939080, upload-time = "2026-07-10T08:26:04.53Z" }, + { url = "https://files.pythonhosted.org/packages/80/09/3de2a968edbd496c86cb8b932cdbee2d4b08c4a28e9884a15e5c705a646b/pyarrow-25.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:b724d127783b4c19f088fcdfc844cbc318809246a30307bcabd5ed02045e890e", size = 37633420, upload-time = "2026-07-10T08:26:10.354Z" }, + { url = "https://files.pythonhosted.org/packages/19/86/8399243a4ce080426ec37db18d5e29148b7ec960a8a8c7f9059a7bf6ef0a/pyarrow-25.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:244f98a595f70fa4fd35faa7508c4ae67e14a173397a4b3b49d2b3c360fb0062", size = 46861050, upload-time = "2026-07-10T08:26:16.397Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/72d704b02bc5fc6d06954d76a0208c1e79cad3ab370f6d6a91ffe5078870/pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:0222f0071d13313962a88d21bf28b80d355ac39d81bfa6ff3fe00eeaf748e4be", size = 50056458, upload-time = "2026-07-10T08:26:23.271Z" }, + { url = "https://files.pythonhosted.org/packages/06/5d/3c31a60b6403d63cad2e0f829096f5fc5763a129ead4207a5d4690b96448/pyarrow-25.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b58726f118c079f9d4ed7e904975d4f15fd69d0741ba511a4e2dcaa4ef16354f", size = 49957793, upload-time = "2026-07-10T08:26:30.232Z" }, + { url = "https://files.pythonhosted.org/packages/34/f7/8f8a019061f9863a831915329264372a87ed25eaf9109ce56eb0e84012c5/pyarrow-25.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:38a2c887cb3883e241b70201688db34133b6dfadd04f03c8f9213df53770c18e", size = 53100544, upload-time = "2026-07-10T08:26:36.414Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e2/738071e95c5ddad7b3dfc12f569ffa992db89d7d7b4a95258fd184191249/pyarrow-25.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:161649d60a7a46c613a19fd795763ea8a88c36ba997dd99d9bc66e6794ee36e8", size = 27848311, upload-time = "2026-07-10T08:26:41.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/44/fdd3a4377807b7dcabe2d4b5aa99dbbc98e2e5df3f1ca4e7f0aec492d987/pyarrow-25.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:149730a3d1f0fb59d663a0b8aa210adfd9c17c27cd94a0d143e60daea8320d4e", size = 35850884, upload-time = "2026-07-10T08:26:47.357Z" }, + { url = "https://files.pythonhosted.org/packages/bf/71/9f053177a7709b8c90abb00a2375b916286f9f0d6cfb21a5cadd4ef811e8/pyarrow-25.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:0721332c30fdd453fdd1fc203b2ac1f4c9db5aea28fa38d41f2574c4b068b9ec", size = 37616197, upload-time = "2026-07-10T08:26:53.564Z" }, + { url = "https://files.pythonhosted.org/packages/95/1a/22bfb6597dcdc861fa83c39c06e1457cb56f698940eff42fbb25de30e8e5/pyarrow-25.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fa1482b3da10cac2d4db6e26b81da543e237616af2ef6d466018b31ca586496f", size = 46841966, upload-time = "2026-07-10T08:27:07.685Z" }, + { url = "https://files.pythonhosted.org/packages/55/0e/cd705c042bc4fe7022478db577fcab4abdcfabb9bc37ab7a75556b3fcb2b/pyarrow-25.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5d1dbf24e151042f2fa3c129563f65d66674128868496fb008c4272b16bdf778", size = 50088993, upload-time = "2026-07-10T08:27:14.268Z" }, + { url = "https://files.pythonhosted.org/packages/98/ee/d822e1ee31fe31ec5d057210e0605c950b975dcd8d9a332976cc859a9df8/pyarrow-25.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:20887a762dd61dcc530f93a140840ab1f6aa7836b33270e42d627ab3cf11e537", size = 49941005, upload-time = "2026-07-10T08:27:21.274Z" }, + { url = "https://files.pythonhosted.org/packages/33/1b/207a90cc64619a095eb75a263ae069735f2810056d43c667befd573ec083/pyarrow-25.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:58d1ab556b0cea1c93fdb799b24ad58adb2f2a2788dbce782a94f64ae1a5cc9b", size = 53112355, upload-time = "2026-07-10T08:27:27.911Z" }, + { url = "https://files.pythonhosted.org/packages/7e/fe/81d1e5f8beed15c01e98649d5c6e2167b67fd395884a2488f18bf1cf0dba/pyarrow-25.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:3f356afe61186395c861d5cd63dc21ff7d5fa335012a4668d979257df7fea0f5", size = 27945954, upload-time = "2026-07-10T08:27:32.903Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c8/098ce17d778fd9d29e40bb8c5f19a40cc90c3f0b46c9057b0d7993f42f54/pyarrow-25.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:8831a3ba52fa7cdb78d368d968b1dcd06171e6dff5461e16d90de91d371e47bc", size = 35844549, upload-time = "2026-07-10T08:27:37.956Z" }, + { url = "https://files.pythonhosted.org/packages/bc/66/24c28877219abf6263d909b1592c97ff82c59f13a59acbed11fc87c0654f/pyarrow-25.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:5f4bacb60f91dd2fca6c52f1b9a0012cd090e0294f1f781dc1881a247a352f8e", size = 37610397, upload-time = "2026-07-10T08:27:43.803Z" }, + { url = "https://files.pythonhosted.org/packages/53/55/6d1d5f5aff317ec5de9421594679ed51ed828fe7e2ce209327f819d801e4/pyarrow-25.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:59516c822d5fd8e544aaa0dfe72f36fed5d4c24ea8390aab1bcd31d7e959c6be", size = 46841701, upload-time = "2026-07-10T08:27:49.741Z" }, + { url = "https://files.pythonhosted.org/packages/b5/5d/f790fb6965ab54c9da0dda7856abc75fd0d7648d865f8d603c111d203a64/pyarrow-25.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6f9dbd83e91c239a1f5ee7ce13f108b5f6c0efbe40a4375260d8f08b43ad05e9", size = 50090118, upload-time = "2026-07-10T08:27:56.051Z" }, + { url = "https://files.pythonhosted.org/packages/0c/8c/faf025357ebf31bc96777f234277aa31e2aeca6dd4ecaa391f29085473c2/pyarrow-25.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:18dcc8cc50b5e72eae6fcbfc6c8776c21a007176b27a3cdec5c2f5bcf126708d", size = 49945559, upload-time = "2026-07-10T08:28:01.927Z" }, + { url = "https://files.pythonhosted.org/packages/07/a1/bd051871708ea99a5e0fc711926c26c6f2c6d0130c7aaac8093e34998af6/pyarrow-25.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4ec1895a87aa834c3b99b7a1e758747eb8bb57f922b32c0e0fa04afb8d6998b1", size = 53114238, upload-time = "2026-07-10T08:28:08.594Z" }, + { url = "https://files.pythonhosted.org/packages/7c/31/737f0c3cffcd6af647849477d1dd68045deac2e3963c3f9f211bedc48540/pyarrow-25.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:77c8d1ae46a44b4006e8db1cc977bbcc6ce4873c92f74137d68e45503b97fb18", size = 27861162, upload-time = "2026-07-10T08:28:12.975Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/581ccbcdb3d897eb2893328d68db3d52eca373bf2a7e964d0a6276b8e85b/pyarrow-25.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:72132b9a8a0a1840197794d4dea26080069b6b0981c116bc078762dc9691b21b", size = 35878945, upload-time = "2026-07-10T08:28:18.222Z" }, + { url = "https://files.pythonhosted.org/packages/64/d1/ccb01db7329ea0411ef4fbd9b62a04d3268b36777d4e758d5e39b91ddeab/pyarrow-25.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:e009ef945e498dca2f050ea10d2e9764cb44017254826fc4574fdb8d2530173b", size = 37630854, upload-time = "2026-07-10T08:28:23.452Z" }, + { url = "https://files.pythonhosted.org/packages/af/9f/2d81ba89d1e4198d0cb25fe7529de936830fdaec0db926bb52a1ef7080d4/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:f57a39dbcb416345401c2e77a4373669b45fd111a1768e6cf267a7a0607ff0ec", size = 46905617, upload-time = "2026-07-10T08:28:29.376Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/0ed312ec800fb536f93783215126cee4b8977dcfeccba6f0f44df0cc87d7/pyarrow-25.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:447df764beb07c544f0178a5f6b70ef44b9ecf382b3cdfad4c2d7867353c3887", size = 50119765, upload-time = "2026-07-10T08:28:35.826Z" }, + { url = "https://files.pythonhosted.org/packages/ca/88/cab5063ba0c4d46a9f6b4b7eb1c9029dc0302d65cd5ab3510c949a386568/pyarrow-25.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ac5dfeee59f9ceb4d45ba76e83b026c38c24334135bb329d8274baa49cec3c62", size = 50027563, upload-time = "2026-07-10T08:28:43.848Z" }, + { url = "https://files.pythonhosted.org/packages/7b/fb/4d24f1b7fe2e042dc4ef315ef75e4e702d8e46fe10c37e63caff00502b03/pyarrow-25.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f0f100dacf2c0f400601664a79d1a907ced4740514bb2b00917341038e2ce76f", size = 53162437, upload-time = "2026-07-10T08:28:52.819Z" }, + { url = "https://files.pythonhosted.org/packages/fa/65/da20806de93ca6ee91e72cb6a9b08b3ac890b46efc8d94a7326c651c4c81/pyarrow-25.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:2e093efbecb5317372f819228fa4b4e6157eee48d3f0a7b0303705ebf81a7104", size = 28613262, upload-time = "2026-07-10T08:29:47.544Z" }, + { url = "https://files.pythonhosted.org/packages/86/9f/c632afb1d3ef4a7814cee236718235f3a47eac46e97eb87df40f550b6b48/pyarrow-25.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:26be35b80780d2d21f4bae3d568b1666337c3a89722cc1794c956a77017cb24e", size = 36120702, upload-time = "2026-07-10T08:28:59.577Z" }, + { url = "https://files.pythonhosted.org/packages/36/0a/093d53a0e72ad06e45d6443e00651bbc2d21af4211295086cbf4d873d3b9/pyarrow-25.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:6f4812bfbf11ca7d8faf59eb8fff8bf4dd25ce3a38b62baa010cc17a0926d1b2", size = 37750674, upload-time = "2026-07-10T08:29:06.916Z" }, + { url = "https://files.pythonhosted.org/packages/8a/18/b37fc31a69cff4bdfb8842683def5612f551b93fff6f44375e4a4a6a5535/pyarrow-25.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:b8af8ceedf0c9c160fd2b63440f2d205b9404db85866c1217bfea601de7cfb50", size = 46912304, upload-time = "2026-07-10T08:29:14.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/35/5cae19ba72493e5598022468b56f6a5571f399f485bf412f157356476caa/pyarrow-25.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c70a5fd9a82bd1a702fd482bdc62d38dcb672fb2b449b1d7c0d7d1f4be7b7bfe", size = 50073652, upload-time = "2026-07-10T08:29:22.467Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a5/ddd508424bdfd5e6945765e9e2ffc687e2f6115972badc8ecf423076c407/pyarrow-25.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0490a7f8b38ffe11cc26526b50c65d111cb54ddac3717cec781806793f1244dc", size = 50058654, upload-time = "2026-07-10T08:29:29.689Z" }, + { url = "https://files.pythonhosted.org/packages/5f/a4/324d0db203ff5eebe8694ec2d6ec5a23f9aaa5d02e5b8c692914c518c33c/pyarrow-25.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e83916bbcf380866b4e14255850b33323ff678dc9758411d0409cdd2523880b0", size = 53140153, upload-time = "2026-07-10T08:29:36.041Z" }, + { url = "https://files.pythonhosted.org/packages/bd/8d/d236e9c82fe315f9128885c8be3ec719f41965a1eb6b6f4b42470904cd41/pyarrow-25.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:13240f0d3dc5932ccd0bfa90cd76d835680b9d94a7661c635df4b703d40ce849", size = 28743657, upload-time = "2026-07-10T08:29:42.742Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146, upload-time = "2026-05-06T13:37:36.537Z" }, + { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769, upload-time = "2026-05-06T13:37:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958, upload-time = "2026-05-06T13:37:28.611Z" }, + { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118, upload-time = "2026-05-06T13:36:55.216Z" }, + { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876, upload-time = "2026-05-06T13:38:25.455Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703, upload-time = "2026-05-06T13:37:53.304Z" }, + { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042, upload-time = "2026-05-06T13:38:46.981Z" }, + { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231, upload-time = "2026-05-06T13:39:23.146Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388, upload-time = "2026-05-06T13:40:08.06Z" }, + { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769, upload-time = "2026-05-06T13:38:13.901Z" }, + { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312, upload-time = "2026-05-06T13:39:08.24Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817, upload-time = "2026-05-06T13:38:43.2Z" }, + { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085, upload-time = "2026-05-06T13:39:25.497Z" }, + { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311, upload-time = "2026-05-06T13:39:59.922Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, +] + +[[package]] +name = "pydub" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/9a/e6bca0eed82db26562c73b5076539a4a08d3cffd19c3cc5913a3e61145fd/pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f", size = 38326, upload-time = "2021-03-10T02:09:54.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", size = 32327, upload-time = "2021-03-10T02:09:53.503Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pyperclip" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185, upload-time = "2025-09-26T14:40:37.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, +] + +[[package]] +name = "pytz" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, +] + +[[package]] +name = "pywin32" +version = "312" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/1b/9cfdeac80ee45bebbbcb31f1b7b99a0d81a1c72de48d837be984e0e88b1d/pywin32-312-cp310-cp310-win32.whl", hash = "sha256:772235332b5d1024c696f11cea1ae4be7930f0a8b894bb43db14e3f435f1ff7e", size = 6361387, upload-time = "2026-06-04T07:49:14.329Z" }, + { url = "https://files.pythonhosted.org/packages/33/b1/7afc96d041d982c27bc2df6f853d43f01fd273e3d39d04be3647ddeb533d/pywin32-312-cp310-cp310-win_amd64.whl", hash = "sha256:5dbc35d2b5320dc07f25fa31269cfb767471002b17de5eb067d03da68c7cb2db", size = 6926780, upload-time = "2026-06-04T07:49:16.881Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3a/4140da9ad54108e517f4a16b2d83da3033e08662144623e1239587cb7db6/pywin32-312-cp310-cp310-win_arm64.whl", hash = "sha256:3020656e34f1cf7faeb7bccd2b84653a607c6ff0c55ada85e6487d61716deabd", size = 4307203, upload-time = "2026-06-04T07:49:18.993Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f5/10a6e845a00fc5e7afd0a988b744f403d4d57162a28d160a093c4d9322f0/pywin32-312-cp311-cp311-win32.whl", hash = "sha256:17948aeadbdb091f0ced6ef0841620794e68327b94ee415571c1203594b7215c", size = 6362659, upload-time = "2026-06-04T07:49:21.349Z" }, + { url = "https://files.pythonhosted.org/packages/35/c4/dcd2d62b5944b6d5db53413a5899016ccd57ffcb7278f3f81655d25d2027/pywin32-312-cp311-cp311-win_amd64.whl", hash = "sha256:d11417d84412f859b722fad0841b3614459ed0047f7542d8362e77884f6b6e8a", size = 6928825, upload-time = "2026-06-04T07:49:23.934Z" }, + { url = "https://files.pythonhosted.org/packages/b7/56/3cbb433fe4501cdba2eb9040f56a4e1a8243faa4186b25295564d1a7a79d/pywin32-312-cp311-cp311-win_arm64.whl", hash = "sha256:b2200a054ca6d6625c4842fc56a4976a4b47f96b73dbe5538c3f813a80359f47", size = 6721875, upload-time = "2026-06-04T07:49:26.416Z" }, + { url = "https://files.pythonhosted.org/packages/83/ff/32aa7d2ed0ab12b323aaa64f9b75e6ad4f8fd09f9ccfc28c79414d46838d/pywin32-312-cp312-cp312-win32.whl", hash = "sha256:dab4f65ac9c4e48400a2a0530c46c3c579cd5905ecd11b80692373915269208b", size = 6371877, upload-time = "2026-06-04T07:49:28.836Z" }, + { url = "https://files.pythonhosted.org/packages/03/d9/77040d3b43df3f3be32ea289433d660d2727f5ba327bc73be835127d9d60/pywin32-312-cp312-cp312-win_amd64.whl", hash = "sha256:b457f6d628a47e8a7346ce22acb7e1a46a4a78b52e1d17e1af56871bd19a93bc", size = 6914841, upload-time = "2026-06-04T07:49:31.85Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cc/7b1ec671775756020a0ee7f4feeaf3c568f0ab86bd3900088cf986937a92/pywin32-312-cp312-cp312-win_arm64.whl", hash = "sha256:6017c58e12f6809fbb0555b75df144c2922a9ffd18e4b9b5afa863b6c1a9d950", size = 6727901, upload-time = "2026-06-04T07:49:34.244Z" }, + { url = "https://files.pythonhosted.org/packages/2d/41/12fbfd7f36ed2146d8bc9de96c2741296bf0d490b98508496cff322e274c/pywin32-312-cp313-cp313-win32.whl", hash = "sha256:7a27df850933d16a8eabfbaeb73d52b273e2da667f80d70b01a89d1f6828d02c", size = 6370184, upload-time = "2026-06-04T07:49:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/36a78e3403099d31d9746d13fdcde5accc43c1155f375a34d15983a479a7/pywin32-312-cp313-cp313-win_amd64.whl", hash = "sha256:c53e878d15a1c44788082bfe712a905433473aa38f86375b7cf8b45e3acbaaf9", size = 6914298, upload-time = "2026-06-04T07:49:38.876Z" }, + { url = "https://files.pythonhosted.org/packages/84/37/c1697194092b76de9ed47ca124323f02c57ffc8a45c06f88a3d5acaf01eb/pywin32-312-cp313-cp313-win_arm64.whl", hash = "sha256:59aba5d5940842075343a5ddc6b11f1cdf0d1567fe745290359dfbcc7c2eb831", size = 6727640, upload-time = "2026-06-04T07:49:41.083Z" }, + { url = "https://files.pythonhosted.org/packages/fc/2b/1f3cded5822fd49c02f40544cbb5f58c7cfd6b1694869fd476cb6170ee97/pywin32-312-cp314-cp314-win32.whl", hash = "sha256:a77a90fbb6881238d2ca9c6fd797b25817f3768fe78d214a90137ff055a75f5b", size = 6468928, upload-time = "2026-06-04T07:49:43.188Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl", hash = "sha256:a4dd3a848290ef724347b19f301045831d8e802fa4464f491b98b1e0a081432e", size = 7024157, upload-time = "2026-06-04T07:49:45.34Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0e/73f6d6800b4f27655abd9e9f6aaeaefcddb2b946e4674efa2bab184a7f7b/pywin32-312-cp314-cp314-win_arm64.whl", hash = "sha256:9fce94568364e0155e6dfb781ac5d95903be8baf28670632beab1b523f300daa", size = 6839598, upload-time = "2026-06-04T07:49:47.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/61/caa39686032d2ebdd04ff0ab5cbe163126c0066d98e00c9018646e42393b/pywin32-312-cp315-cp315-win32.whl", hash = "sha256:5c1fbe4a937a73ae9297384a3da38518cbc694c68ad8a809b2e19acd350f03ed", size = 6471159, upload-time = "2026-06-04T07:49:50.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/cd/7e1de64a4a6f69c04214169657ccab0d93a670ea50e35eb8f489d7378249/pywin32-312-cp315-cp315-win_amd64.whl", hash = "sha256:c2f03a0f73f804a13c2735b99392b0cd426bb4f2c4d0178e5ac966a0f21618d5", size = 7025293, upload-time = "2026-06-04T07:49:54.857Z" }, + { url = "https://files.pythonhosted.org/packages/23/ed/4532e9388e65fa16b46776ef47ad631a64eda1631884488af707666350ed/pywin32-312-cp315-cp315-win_arm64.whl", hash = "sha256:a8597d28f267b39074aef51fa593530082b39cbe5a074226096857b1fed2dfb9", size = 6840337, upload-time = "2026-06-04T07:49:57.531Z" }, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "rich-rst" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/d6/d0b9fafc73b65767200da027acab1db1bdb1048f4fea5ebf659df01c700e/rich_rst-2.1.0.tar.gz", hash = "sha256:f4d117b49697f338769759fa5cacf5197da4888b347b9fda2e50aef5cd8d93bd", size = 302732, upload-time = "2026-07-05T02:59:44.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/68/1fc93dd759605b5d00fc98b50200739e41ed32bd22d6ba35ca6c3932371b/rich_rst-2.1.0-py3-none-any.whl", hash = "sha256:7ecd1343ee12c879d0e7ae74c3eb6d263b023d2929c6d114212eb1fd91057255", size = 272987, upload-time = "2026-07-05T02:59:42.792Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" }, + { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" }, + { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" }, + { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" }, + { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" }, + { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" }, + { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" }, + { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" }, + { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" }, + { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, + { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" }, + { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" }, + { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" }, + { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" }, + { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" }, + { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" }, + { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" }, + { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.12.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.12.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/1f/a2dca5ffdbf1d475ffc4e80e4d5d720ff3a00f691795910116960ee12511/rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7", size = 342174, upload-time = "2026-06-30T07:14:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/323d08583c0832911768663d1944f0107fcd4088704858d84b5e06d105a0/rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911", size = 345513, upload-time = "2026-06-30T07:14:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2a/e31989834d18d2f26ec1d2774c5b1eb3331df4ea8ada525175294c94b48a/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4", size = 373783, upload-time = "2026-06-30T07:14:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/fe/e80107ee3639585c9941c17d6a42cd65325022f656c023191fce78c324c8/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261", size = 378316, upload-time = "2026-06-30T07:14:59.077Z" }, + { url = "https://files.pythonhosted.org/packages/22/6f/81e3adf81acfb6fa694de2a6e4e7d8863121e3e0799e0a7725e6cf5679c4/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278", size = 499423, upload-time = "2026-06-30T07:15:00.488Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/41263969df0ce3d9af2a96d5005a288200af1989aed3354bfceb5fc0b21f/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9", size = 386077, upload-time = "2026-06-30T07:15:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7", size = 371315, upload-time = "2026-06-30T07:15:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/2b973b4d371906a134b03decfea7f5d9835a2c6d263454392e15b64b5b18/rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3", size = 383502, upload-time = "2026-06-30T07:15:04.627Z" }, + { url = "https://files.pythonhosted.org/packages/98/2a/12e2799500af0a307bca76b63361c51f9fe479223561489c29eea1f2ee41/rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da", size = 402673, upload-time = "2026-06-30T07:15:05.856Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e3/21e5872d165fe08be4f229e3d5ee9d90019c0bf0e5538de60dbd54009450/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4", size = 549964, upload-time = "2026-06-30T07:15:07.159Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d0/5ee0fe36844297de8123bee27bc12078c1a7416ad9f1b8a8ca18d6b0c0ac/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6", size = 615446, upload-time = "2026-06-30T07:15:08.531Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/1ea5873cb683f2fbe5f21b23ea1f6d179ead19f3c5b249b7eb5dca568ef2/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93", size = 576975, upload-time = "2026-06-30T07:15:09.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e1/90ef639217a5ddb15b7f4f61b1c33911fd044ad03c311bafdd2bcab85582/rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a", size = 204453, upload-time = "2026-06-30T07:15:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b7/b7a1695d7af36f521fb11e80d6d3adbd744f73b921859bd3c2a2c0dc706f/rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127", size = 223219, upload-time = "2026-06-30T07:15:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/145afacf796e4506062825941176ad9445c2dcf2b3b6a1f13d3030a15e19/rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804", size = 219137, upload-time = "2026-06-30T07:15:13.631Z" }, + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9c/f0d19ac587fd0e4ab6b72cda355e9c5a6166b01ef7e064e437aef8eb9fef/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f", size = 349791, upload-time = "2026-06-30T07:17:33.315Z" }, + { url = "https://files.pythonhosted.org/packages/38/c7/1d49d204c9fd2ee6c537601dc4c1ba921e03363ca576bfab94a00254ac9a/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171", size = 352842, upload-time = "2026-06-30T07:17:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e5/c0b5dc93cd0d4c06ce1f438907649514e2ea077bcd911e3154a51e96c38e/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90", size = 382094, upload-time = "2026-06-30T07:17:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/54/ec0e907b4ca8d541112db352409bd15f871c9b243e0c92c9b5a46ae96f01/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca", size = 388662, upload-time = "2026-06-30T07:17:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f4/921c22a4fd0f1c1ac13a3996ffbf0aa67951e2c8ad0d1d9574938a2932e8/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9", size = 504896, upload-time = "2026-06-30T07:17:39.689Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1b/a114b972cefa1ab1cdb3c7bb177cd3844a12826c507c722d3a73516dbbaf/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c", size = 391545, upload-time = "2026-06-30T07:17:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/4e/98/af9b3db77d47fcbe6c8c1f36e2c2147ec70292819e99c325f871584a1c11/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9", size = 380059, upload-time = "2026-06-30T07:17:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ba/0efd8668b97c1d26a61566386c636a7a7a09829e474fdf807caa15a2c844/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41", size = 393235, upload-time = "2026-06-30T07:17:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/8c139ee9690f73b0829f32647de6f40d826f8f443af6fa72644f96351aac/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c", size = 413008, upload-time = "2026-06-30T07:17:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/0043896fdd7828ce09a1d9a8b06433714d0960fc4ff3fc4aa72b666b764e/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9", size = 558118, upload-time = "2026-06-30T07:17:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/02355f0e134f783a8f9814c4680a1bd311d37671577a5964ea838573ff37/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76", size = 623138, upload-time = "2026-06-30T07:17:49.355Z" }, + { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, +] + +[[package]] +name = "safehttpx" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/d1/4282284d9cf1ee873607a46442da977fc3c985059315ab23610be31d5885/safehttpx-0.1.7.tar.gz", hash = "sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23", size = 10385, upload-time = "2025-10-24T18:30:09.783Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/a3/0f0b7d78e2f1eb9e8e1afbff1d2bff8d60144aee17aca51c065b516743dd/safehttpx-0.1.7-py3-none-any.whl", hash = "sha256:c4f4a162db6993464d7ca3d7cc4af0ffc6515a606dfd220b9f82c6945d869cde", size = 8959, upload-time = "2025-10-24T18:30:08.733Z" }, +] + +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "jeepney", marker = "(python_full_version < '3.11' and sys_platform == 'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + +[[package]] +name = "semantic-version" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size = 52289, upload-time = "2022-05-26T13:35:23.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "sse-starlette" +version = "3.4.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "starlette" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/10/a34c656829ffc1c4b22ef36d70d9ebb6b99c020e2aeb17cee5485099f028/sse_starlette-3.4.6.tar.gz", hash = "sha256:725f8a1bd6d26ae1b2c9610c0ef5065dfdd496f3988d28adcf8c4b49dc25c627", size = 32542, upload-time = "2026-07-20T14:16:32.201Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/36/e10c1d1b7ca881d2625db2ec28508578499187bb1c389952c398474e1834/sse_starlette-3.4.6-py3-none-any.whl", hash = "sha256:56217ab4c9a9f9c5db7b21e08732d3e7c2b807f45231ad23de0551a24c4a41f6", size = 16516, upload-time = "2026-07-20T14:16:30.978Z" }, +] + +[[package]] +name = "starlette" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184, upload-time = "2025-01-15T12:07:24.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675, upload-time = "2025-01-15T12:07:22.074Z" }, +] + +[[package]] +name = "tomlkit" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/af/14b24e41977adb296d6bd1fb59402cf7d60ce364f90c890bd2ec65c43b5a/tomlkit-0.14.0.tar.gz", hash = "sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064", size = 187167, upload-time = "2026-01-13T01:14:53.304Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl", hash = "sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680", size = 39310, upload-time = "2026-01-13T01:14:51.965Z" }, +] + +[[package]] +name = "tqdm" +version = "4.69.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8c/69/40407dfc835517f058b603dbf37a6df094d8582b015a51eddc988febbcb7/tqdm-4.69.0.tar.gz", hash = "sha256:700c5e85dcd5f009dd6222588a29180a193a748247a5d855b4d67db93d79a53b", size = 792569, upload-time = "2026-07-17T18:09:06.2Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/21/99a0cdaf54eb35e77623c41b5a2c9472ee4404bba687052791fe2aba6773/tqdm-4.69.0-py3-none-any.whl", hash = "sha256:9979978912be667a6ef21fd5d8abf54e324e63d82f7f43c360792ebc2bc4e622", size = 676680, upload-time = "2026-07-17T18:09:04.172Z" }, +] + +[[package]] +name = "typer" +version = "0.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/37/78/fda3361b56efc27944f24225f6ecd13d96d6fcfe37bd0eb34e2f4c63f9fc/typer-0.27.0.tar.gz", hash = "sha256:629bd12ea5d13a17148125d9a264f949eb171fb3f120f9b04d85873cab054fa5", size = 203430, upload-time = "2026-07-15T19:21:07.007Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/03/26a383c9e58c213199d1aad1c3d353cfc22d4444ec6d2c0bf8ad02523843/typer-0.27.0-py3-none-any.whl", hash = "sha256:6f4b27631e47f077871b7dc30e933ec0131c1390fbe0e387ea5574b5bac9ccf1", size = 122716, upload-time = "2026-07-15T19:21:05.553Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, +] + +[[package]] +name = "uncalled-for" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/82/345cc927f7fbdae6065e7768759932fcc827fc20b29b45dfbafa2f1f7da4/uncalled_for-0.3.2.tar.gz", hash = "sha256:89f5dbcd71e2b8f47c030b1fa302e6cce2ec795d1ac565eeb6525c5fe55cb8a2", size = 50032, upload-time = "2026-05-06T13:38:25.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/25/2c87754f3a9e692315f7b811244090e68f362979fc8886b3fbd2985a1d8c/uncalled_for-0.3.2-py3-none-any.whl", hash = "sha256:0ff60b142c7d1f8070bde9d42afaa70aedc77dcc10998c227687e9c15713418e", size = 11444, upload-time = "2026-05-06T13:38:24.025Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.51.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/65/b7c6c443ccc58678c91e1e973bbe2a878591538655d6e1d47f24ba1c51f3/uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0", size = 94412, upload-time = "2026-07-08T10:59:05.962Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/ec/dbb7e5a6b91f86bfb9eb7d2988a2730907b6a729875b949c7f022e8b88fa/uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b", size = 73219, upload-time = "2026-07-08T10:59:04.44Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/5a/2bf22ecb24916983bf1cc0095e7dea2741d14d6553b0d6a2ac8bc96eca93/watchfiles-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9", size = 400471, upload-time = "2026-05-18T04:31:08.908Z" }, + { url = "https://files.pythonhosted.org/packages/55/70/dea1f6a0e76607841a60fb51af150e70124864673f61704abb62b90cdcc7/watchfiles-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4", size = 394599, upload-time = "2026-05-18T04:30:19.845Z" }, + { url = "https://files.pythonhosted.org/packages/18/52/752dcc7dc817baef5e89518732925795ce52e36a683a9a3c9fb68b21504e/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a0feab9af4c021c581f695258c642b3d10c5fd4c676e33a0d8606425d82631", size = 455458, upload-time = "2026-05-18T04:30:29.126Z" }, + { url = "https://files.pythonhosted.org/packages/12/48/366ebbb22fcc504c2f72b45f0b7e72f40a18795cc01752c16066d597b67a/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a16ffe19bf5cf9f5edaa1ad1dd830c5a816e8feec430c522302ab55483a4b994", size = 460513, upload-time = "2026-05-18T04:31:40.85Z" }, + { url = "https://files.pythonhosted.org/packages/ad/44/1f9e1b15e7a729062e0d0c3d0d7225ea4ab98b2267ef87287153be2495fc/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204f299afcbd65918ab78dbc52626b0ae45e9d8cef403fdbf33ecf9e40eac66e", size = 493616, upload-time = "2026-05-18T04:30:58.47Z" }, + { url = "https://files.pythonhosted.org/packages/7e/55/8b1086dcc8a1d6a697a62767bd7ea368e74c61c6fd171683cfe24a3fe5d2/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11743adfa510bfffebe97659fb280182b5c9b238708f667e866f308c3430dc19", size = 573154, upload-time = "2026-05-18T04:30:37.903Z" }, + { url = "https://files.pythonhosted.org/packages/14/7a/242f400cc77fafa7b18d53d19d9cb64fc6a6f61f28c55913bae7c674d92a/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb72919d93e3a16fc451d3aa3d4b1698423daca1b382d3d959c9ac51297c12a8", size = 467046, upload-time = "2026-05-18T04:30:41.869Z" }, + { url = "https://files.pythonhosted.org/packages/02/c8/79eee650c62d2c186598489814468e389b5def0ebe755399ff645b35b1b2/watchfiles-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62f042afde2dde21ec1d2c1a74361e804673df86f51e418a999c9acfe671b07", size = 457100, upload-time = "2026-05-18T04:31:13.064Z" }, + { url = "https://files.pythonhosted.org/packages/81/36/519f6dbb7a95e4fe7c1513ed25b1520295ef9905a27f1f2226a73892bfb7/watchfiles-1.2.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:027ae72bfdfd254862065d8b3e2a815c6ab9b1853ce41e6648ece84afd34a551", size = 467038, upload-time = "2026-05-18T04:30:32.915Z" }, + { url = "https://files.pythonhosted.org/packages/2f/12/951af6b9f89097e02511122258402cb3578443021930b70cf968d6310dc0/watchfiles-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1cfd51e97e13ff3bd047c140764d277fc9b95b7cb5da59e46a47d167adab310", size = 632563, upload-time = "2026-05-18T04:30:11.539Z" }, + { url = "https://files.pythonhosted.org/packages/28/cc/0cba1f0a6117b7ec117271bdc3cb3a5a252005959755a2c09a745e0942cc/watchfiles-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:24b2405c0a46738dd9e1cf7135aa5dbdb9d42d024628651b3b13d5117e99f8df", size = 660851, upload-time = "2026-05-18T04:31:53.186Z" }, + { url = "https://files.pythonhosted.org/packages/d0/f2/26347558cc8bf6877845e66b315f644d03c173906aa09e233a3f4fd23928/watchfiles-1.2.0-cp310-cp310-win32.whl", hash = "sha256:8c520725602756229f045b032a1ff33d7ef0f7404189d62f6c2438cb6d8ef6a1", size = 277023, upload-time = "2026-05-18T04:30:18.825Z" }, + { url = "https://files.pythonhosted.org/packages/6d/68/a5e67b6b68e94f4c1511d61c46c55eba0737583620b6febf194c7b9cc23f/watchfiles-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:03b14855c6f35539e2d95c442ae9530a75762f1e26567152b9ed05f96534a74d", size = 290107, upload-time = "2026-05-18T04:32:09.677Z" }, + { url = "https://files.pythonhosted.org/packages/fc/3d/8024c801df84d1587740d0359e7fdd80afeae3d159011f3d5376dd82f18e/watchfiles-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201", size = 400242, upload-time = "2026-05-18T04:31:19.014Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/f4dfd45323e949984a3a7f9dc31d1cbb049921e7d98253488dda72ccdaa9/watchfiles-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5", size = 394562, upload-time = "2026-05-18T04:30:08.46Z" }, + { url = "https://files.pythonhosted.org/packages/98/d8/19483ef075d601c409bce8bcbb5c0f81a10876fff870400568f08ce484a1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d8c2394a065ca86f5d2910ff263ae67c127e1376ccc4f9fc35c71db879f80a", size = 456611, upload-time = "2026-05-18T04:30:45.723Z" }, + { url = "https://files.pythonhosted.org/packages/b1/6a/cc81fbe7ee42f2f22e661a6e12def7807e01b14b2f39e0ff83fd373fd307/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1", size = 461379, upload-time = "2026-05-18T04:31:29.292Z" }, + { url = "https://files.pythonhosted.org/packages/b1/57/7e669002082c0a0f4fb5113bb70125f7110124b846b0a11bc5ae8e90eac1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d158cd89df6053823533e06fb1d73c549133bff5f0396170c0e53d9559340717", size = 493556, upload-time = "2026-05-18T04:30:05.44Z" }, + { url = "https://files.pythonhosted.org/packages/45/7d/f60a2b19807b21fe8281f3a8da4f59eef0d5f96825ac4680ba2d4f2ebf91/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b", size = 575255, upload-time = "2026-05-18T04:30:40.568Z" }, + { url = "https://files.pythonhosted.org/packages/bd/49/77f5b5e6efbcd57482f74948ebb1b97e5c0046d6b61475042d830c84b3ff/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5", size = 467052, upload-time = "2026-05-18T04:31:17.942Z" }, + { url = "https://files.pythonhosted.org/packages/ee/5a/73e2959af1b97fd5d556f9a8bdba017be23ceeef731869d5eaa0a753d5a3/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e", size = 456858, upload-time = "2026-05-18T04:30:30.182Z" }, + { url = "https://files.pythonhosted.org/packages/50/57/1bc8c27fad7e6c19bddee15d276dbb6ab72480ec01c127afff1673aee417/watchfiles-1.2.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165", size = 467579, upload-time = "2026-05-18T04:32:15.897Z" }, + { url = "https://files.pythonhosted.org/packages/09/6c/3c2e44edba3553c5e3c3b8c8a2a6dee6b9e12ae2cf4bd2378bebf9dc3038/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e0618518f282c4ebff60f5e5b1247b6d91bb8b9f4476947563a1e74acc66f3c6", size = 633253, upload-time = "2026-05-18T04:31:37.123Z" }, + { url = "https://files.pythonhosted.org/packages/30/c2/d8c84a882ab39bbefcc4915ab3e91830b7a7e990c5570b0b69075aba3faf/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5", size = 660713, upload-time = "2026-05-18T04:31:24.62Z" }, + { url = "https://files.pythonhosted.org/packages/a9/07/f97736a5fc605364fe67b25e9fa4a6965dfd4840d50c406ada507e9d735f/watchfiles-1.2.0-cp311-cp311-win32.whl", hash = "sha256:9342472aff9b093c5acd4f6d8f70ae0937964ab56542502bcf5579782da69ae8", size = 277222, upload-time = "2026-05-18T04:31:21.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/99/2b04981977fc2608afd60360d928c6aecf6b950292ca221d98f4005f6694/watchfiles-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:dbd6c97045dad81227c8d040173da044c1de08de64a5ea8b555da4aee1d5fa22", size = 290274, upload-time = "2026-05-18T04:31:45.966Z" }, + { url = "https://files.pythonhosted.org/packages/3c/74/f7f58a7075ee9cf612b0cfcddb78b8cd8234f0742d6f0075cf0da2dde1c6/watchfiles-1.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:57a2d9fa4fb4c2ecae57b13dfff2c7ab53e21a2ba674fe9f05506680fcdcc0d7", size = 283460, upload-time = "2026-05-18T04:31:39.126Z" }, + { url = "https://files.pythonhosted.org/packages/b8/2f/e42c992d2afda3108ea1c02acecc991b9f31d05c14adc2a7cee9ee211fc4/watchfiles-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bc13eb17538be00c874699dc0abe4ee2bc8d50bb1166a6b9e175ef3fd7eb8f26", size = 400115, upload-time = "2026-05-18T04:32:02.06Z" }, + { url = "https://files.pythonhosted.org/packages/5f/8f/6af2ea19065c91d8b0ea3516fdfc8c0d349f407e8e9fbf4e5a17360de8ad/watchfiles-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d95ddc1eb6914154253d239089900813f6a767e174b8e6a50e7fdacb7e4236c", size = 393659, upload-time = "2026-05-18T04:30:50.951Z" }, + { url = "https://files.pythonhosted.org/packages/13/01/b32a967c56fb3e3e5be3db52c3d3b87fa4513aa367d8ed1ad96d42952e5f/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f70d8b291ef6e88d19b1f297a6905ddb978888d9272b0d05e6f53309856bcfc", size = 453207, upload-time = "2026-05-18T04:31:04.231Z" }, + { url = "https://files.pythonhosted.org/packages/04/98/97557a812180338cb1abd32e1cffcc4588f59b5f23e0cb006b2ba95ba64a/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56d8641cf834c2836922899105bd3ce3d0dfc69291d52edf0b4d0436829b34c0", size = 459273, upload-time = "2026-05-18T04:31:50.377Z" }, + { url = "https://files.pythonhosted.org/packages/e8/a8/b4b08dcb7653b8087c6586f7ce649505900e866bbcfe40dc9587af02e686/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2581a94056e55d7d0a31a823ea92bf73749c489ca2285bfdc0fbe6b2bb49d50c", size = 489927, upload-time = "2026-05-18T04:31:42.485Z" }, + { url = "https://files.pythonhosted.org/packages/50/94/3dceea03545d2e5ddfd839f0ddd5e1cecbf1697b5a428d5ba11cef6af95d/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41bc1199f7523b3f82843c88cbb979180c949caef0342cf90968f178e5d49b01", size = 570476, upload-time = "2026-05-18T04:31:03.071Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f2/d39a5450c3532092b91f81d274360e613c2371bc874a89c7a1a3c5e8d138/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7571e4464cb6e434958f867f7f730b8ab0b75e3f8e5eac0499168486ab3c33a8", size = 465650, upload-time = "2026-05-18T04:30:12.701Z" }, + { url = "https://files.pythonhosted.org/packages/22/24/ed72f68cbc1333ca9b9f2200aa048bb6658ae41709bc1caad4310f4bdffd/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53a384f76b631c3ae5334ce6a52f0baa3a911eb94a4eac7f160079868b716d5", size = 456398, upload-time = "2026-05-18T04:30:13.784Z" }, + { url = "https://files.pythonhosted.org/packages/0d/64/982ef4a4e5bab5b6e5b6becc8cd5e732f6130a78b855f0abec6439a9a135/watchfiles-1.2.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d20029a60a71a052a24c4db7673bc4de39ab89adbaccbfb5d67987c5d73f424d", size = 465140, upload-time = "2026-05-18T04:31:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/a0/0c/95282abf4ed680b6096010bcfc30c5fa7a041fc5aa5a2ad17a2cc6c75bba/watchfiles-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2cb93af48550faf1cea04c303107c8b75833de7013e57ce27d3b8d21d8d0f58c", size = 630259, upload-time = "2026-05-18T04:31:25.676Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/607c1de1530c4bdcf2cf1d1ecc2505ddba5d96bd43ba9f2b0e79876f850f/watchfiles-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2995c176de7692b86a2e4c58d9ec718f753150a979cb4a754e2b4ffa38e70906", size = 659859, upload-time = "2026-05-18T04:30:24.333Z" }, + { url = "https://files.pythonhosted.org/packages/fa/08/d9e2e0f9e8e6791d33aefc694ad7eefa7f901f63caff84a81ded38692f9c/watchfiles-1.2.0-cp312-cp312-win32.whl", hash = "sha256:7a2cffd17d27d2ecbb310c2b1d8174f222a5495b1a721894afa88ec11e25b898", size = 275480, upload-time = "2026-05-18T04:30:31.307Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e6/9d42569c0102645cc8cea5d8c7d8a1e9d4ada2cb7f05f75e554b8aa2202a/watchfiles-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f155b3a1b2a5fc89cdc70d47ee5d54e3b75e88efa34982028a35daef9ba00379", size = 288718, upload-time = "2026-05-18T04:32:10.745Z" }, + { url = "https://files.pythonhosted.org/packages/0a/26/88e0dc6ee3898169d7fa22bb6a69cabf2502d2ee25cb8c876d1262d204f8/watchfiles-1.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:8fa585ede612ee9f9e91b18bebf9ba11b9ae29a4e3a0d0cf6fca3e382133f0d5", size = 281026, upload-time = "2026-05-18T04:30:22.23Z" }, + { url = "https://files.pythonhosted.org/packages/d1/4d/70a7feced9f87e2ff26dba42667290f41694fc64646c67261fbb8cab5d5c/watchfiles-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98", size = 399730, upload-time = "2026-05-18T04:31:38.162Z" }, + { url = "https://files.pythonhosted.org/packages/31/3a/0da302f2307aee316922806ebd5726c542cbd787c938271cf14a074c7daf/watchfiles-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ba0480b9a74af058f43b337e937a451e109295c420916d68ad24e3dc02f5e44", size = 392842, upload-time = "2026-05-18T04:30:27.051Z" }, + { url = "https://files.pythonhosted.org/packages/db/ef/d5bdb705c224dbc256aa0c1ec47bf4e61ec52558f2afb44a71a1fe4d7015/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f34e26a19f91f710c08e0183429f0d1d15df734e6bc78c31e77b9ea9c433658", size = 452989, upload-time = "2026-05-18T04:31:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/71/29/5495f2c1661949ef7a35e4d71111d129cfe7606414a26887a919d0a55406/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4e77f6a55f858504069abd35d336a637555c09bca453dde1ee1e5ada8a6a1fb", size = 458978, upload-time = "2026-05-18T04:30:52.606Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8c/7f9c07c433811c2fffd93e13fdfb7135de9aab5f2ae41be08960fa0047dc/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cb4d80e212f116474a545c21c912b445f16bb0cef9e6a73a498164223e14e2f", size = 490248, upload-time = "2026-05-18T04:31:36.003Z" }, + { url = "https://files.pythonhosted.org/packages/3c/11/d93632febc52fbc21be90231bb7c17fd5387f46c9076fd40a5f9c2ae6910/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b974946a10af379d425e2eef5b62f5c6ebeaccf91d45eaad6f5b27ecd4f91aa0", size = 571847, upload-time = "2026-05-18T04:31:10.862Z" }, + { url = "https://files.pythonhosted.org/packages/55/b4/383173e73aabb07ad1d9c7aa859d95437ac46a6d6a1e11005facda0c9d19/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86bc13c25a8d1fcd70b51d0ce7c9b65e90de5666fcbfd3e34957cc73ee19aeb5", size = 465974, upload-time = "2026-05-18T04:30:17.006Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6c/89b1a230a78f57c52dd8893adb1f92f94411721b6ec12596c56d98c74356/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca148d73dea36c9763aaa351e4d7a51780ec1584217c45276f4fe8239c768b71", size = 454782, upload-time = "2026-05-18T04:30:35.656Z" }, + { url = "https://files.pythonhosted.org/packages/24/62/1732118367cfff0a9fce3bf62ff4bfded09ef5df21d9d446b858b3f70a96/watchfiles-1.2.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:c525543d91961c6955b2636b308569e84a1d1c5f5f2932041ab9ef46422f43e3", size = 465182, upload-time = "2026-05-18T04:30:20.846Z" }, + { url = "https://files.pythonhosted.org/packages/28/96/716f7e5f51339bf22963f3345f9f27d7f3b30e2eadc597e257c881dd3c53/watchfiles-1.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a204794696ffb8f9b10fba6f7cb5216d42f3b2b71860ccac6b6e42f5f10973b0", size = 629841, upload-time = "2026-05-18T04:31:05.397Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/c40783950fd771ccf66ab3ec2722d188a9af1c7f96c6e811f36e40c6e03f/watchfiles-1.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:10d86db20695afe7997ac9e1717637d6714a8d0220458c33f3d2061f54cec427", size = 658028, upload-time = "2026-05-18T04:31:48.22Z" }, + { url = "https://files.pythonhosted.org/packages/71/72/4508db1856d1d87fcbb3b63f4839bab1b5682cb0e8d224d122263c09654a/watchfiles-1.2.0-cp313-cp313-win32.whl", hash = "sha256:eb283ee99e21ad6443c8cdb06ac5b34b1308c329cbdf03fa02b445363714c799", size = 275183, upload-time = "2026-05-18T04:30:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/f9/36/14b76ca57652e5cc5fd1c11f32a261292c08a0d19a00351013c2549cbfb2/watchfiles-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a0f27f01bee51861392bb6b7c4fdb290b27d1eb194e9e28788d68102a0e898d9", size = 288059, upload-time = "2026-05-18T04:32:07.937Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8d/0a85e395398d8d20fadfe5c5d32c726eee17a519e78fb356f2cf7531bffe/watchfiles-1.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:3651aa7058595e9cfb75d35dd5ada2bf9f48a5b8a0f3562821d3e210c507e077", size = 280186, upload-time = "2026-05-18T04:31:54.484Z" }, + { url = "https://files.pythonhosted.org/packages/37/68/36db056f1fdcc5f07302f56e631774d6835bcd6fa3ace402304621d5f9e5/watchfiles-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:faea288b6f0ab1902ef08f4ca6de005dccf856c4e0c4f21b8c5fce02d90a1b08", size = 399031, upload-time = "2026-05-18T04:30:44.576Z" }, + { url = "https://files.pythonhosted.org/packages/c1/64/01a9d6f66a82a5c101ce939274106cc72759d62427e153f01edd2b9f87c2/watchfiles-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9", size = 391205, upload-time = "2026-05-18T04:30:25.413Z" }, + { url = "https://files.pythonhosted.org/packages/84/2c/0a44fe058cb4bb7b8ede6b6670698bbb7c0400740e378d00022189b7b31d/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fff610d7bb2256a317bb1e96f0d7862c7aa8076733ee5df0fd41bbe76a24a4f4", size = 451892, upload-time = "2026-05-18T04:32:14.005Z" }, + { url = "https://files.pythonhosted.org/packages/67/a1/351e0d56cd35e6488b5c8b4fb11a809a5bc923e8fe8fed9faf8920be0c89/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b141a4891c995a039cd89e9a49e62df1dc8a559a5d1a6e4c7106d16c12777a55", size = 458867, upload-time = "2026-05-18T04:31:22.279Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7d/9d09605187f1b838998624049fcf8bf47b73c1a3b76901fcac1782f62277/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f22943b7770483f6ea0721c6b11d022947a98eb0acae14694de034f4d0d38925", size = 490217, upload-time = "2026-05-18T04:31:43.657Z" }, + { url = "https://files.pythonhosted.org/packages/60/5d/a17a16eccb182f04188cd308ec24b1a71a9b5c4e7098269cf35d9fa56d02/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bc6195825b7dcd217968bb1f801a60fd4c16e8eeab5bedc7fe917d7d5995ab4", size = 571458, upload-time = "2026-05-18T04:32:11.875Z" }, + { url = "https://files.pythonhosted.org/packages/d3/3d/4dd457062083ab1938e5dfd45032eb425cee2ac817287ca8ff4356183e5d/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4a4b147f5dca2a5d325a06a832fb43f345751adfbc63204aec30e0d9ca965a2", size = 464707, upload-time = "2026-05-18T04:30:43.492Z" }, + { url = "https://files.pythonhosted.org/packages/c6/71/ea8c57b128f5383de74d0c7d2d9c57ad7c9a65a930c451bd25d524b295b7/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4543579a9bdb0c9560039b4ffddbdb39545707659fbc430ce4c10f3f68d557f9", size = 454663, upload-time = "2026-05-18T04:30:16.061Z" }, + { url = "https://files.pythonhosted.org/packages/53/fd/2e812bf938406d7db351f0703ddd3fc6c061cf30d96153a77bc79a943a44/watchfiles-1.2.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:20aa0e708b920bde876a4aa82dc7dd6ebea228a63a67cda6632c2fc87b787efa", size = 463537, upload-time = "2026-05-18T04:31:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/86/56/d17a7f1dd1bc3035f1072694a551301272f1739c2d8e319c927cb9e29b38/watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:d413349d565dab74297f2a63e84a097936be69bf8f3b3801f27f380e32040f44", size = 629194, upload-time = "2026-05-18T04:31:14.141Z" }, + { url = "https://files.pythonhosted.org/packages/be/06/f1ff66bf5cae50aa4062779a0ecd0bbaf15e466195719074078947d9a17d/watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f28b2725eb8cce327b9b3ab02415c853011dc55c95832fe90de6bc56f5315f72", size = 656194, upload-time = "2026-05-18T04:31:47.14Z" }, + { url = "https://files.pythonhosted.org/packages/e7/54/a9c7ea9a82a4ac65e7004c0a03920b5cdd2f9c3b678757d9cd425aa51d53/watchfiles-1.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b8c8358484d5fa12ef34f05b7f4168eaf1932f408725ff6d023c33ec17bd79d4", size = 400205, upload-time = "2026-05-18T04:32:05.153Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5d/c9ab3534374a4a67450696905d6ef16a04405448b8dc52bd752ae50423d4/watchfiles-1.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f04b092229ad2c50126dd3c922c8822e51e605993764a33058d4a791ab42281", size = 392508, upload-time = "2026-05-18T04:30:54.849Z" }, + { url = "https://files.pythonhosted.org/packages/26/ca/1ad30103535cf0cecd7b993e8d50edc5351b1820e38f2d22e3df58962feb/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a7ce236284f002a156f70add88efe5c70879cccbb658be0822c54b1306fc09d", size = 452448, upload-time = "2026-05-18T04:30:53.727Z" }, + { url = "https://files.pythonhosted.org/packages/37/a1/ceee2cdf2afbd715fa07758d39c9859513eae411b23196f7fd039e5feedd/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b9909cc2b48468b575eefa944919e1fe8a36c5849d5c7c168f80a8c1db69398e", size = 459605, upload-time = "2026-05-18T04:30:23.312Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f6/421e30fd1cb3907a84ed92ab3f1983e37ba2dca015e9a894a048418417a2/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a37faaed405c67e28e6be45a1fa4f206ef5a2860f27c237db9fa30704c38242", size = 490757, upload-time = "2026-05-18T04:30:47.358Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/55ed1b97ed08be7bba6f9a541cac15f2a858e1d74d2b07b6da70a82aab00/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9649193aa27bd9ff2e80ff29bfaa93085496c7a3a377592823cc58b77ee88add", size = 568672, upload-time = "2026-05-18T04:30:38.915Z" }, + { url = "https://files.pythonhosted.org/packages/d1/cf/d8ae8a80dd7bafab395ea7681c10237311bbf34d37704a8c744e7cf31fc7/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e4ff8e37f99cf1da89e255e07c9c4b37c214038c4283707bdec308cb1b0ea1f", size = 464197, upload-time = "2026-05-18T04:30:09.914Z" }, + { url = "https://files.pythonhosted.org/packages/7c/8a/3076c496ca8dafe0e8cd03fcebdfc47be4b1174b4e5b24ff6e396e6b3af2/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:054dc20fd2e3132b4c3883b4a00d72fd6e1f56fdaf89fccd12e8057d74cd74d7", size = 453181, upload-time = "2026-05-18T04:30:14.829Z" }, + { url = "https://files.pythonhosted.org/packages/e5/10/9745e17c98e7b8a86454df0a3c7b5686bd650383f1e9f26e4ebcbd6cc0c0/watchfiles-1.2.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e140ed30ebde76796b686e67c182cff10ea2fbab186fafd1560f74bb5a473a6e", size = 465109, upload-time = "2026-05-18T04:30:28.123Z" }, + { url = "https://files.pythonhosted.org/packages/8f/95/8ef4a95481d3e0cb52d62a06fa6e972e81424be2d9698b91a2fecca9904c/watchfiles-1.2.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:bb7e52ecf68ba46d22df23467b87cffeb2146908aa523ebfe803019618cfda06", size = 630653, upload-time = "2026-05-18T04:31:49.304Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e4/3b3bf36b0f829b50c6ebcb8d031583863c59f923d6a6af3d485e470d0fac/watchfiles-1.2.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:23282a321c8baf9b3a3c4afff673f9fe65eb7fdc2338d765ccad9d3d1916a5ba", size = 657838, upload-time = "2026-05-18T04:31:06.497Z" }, + { url = "https://files.pythonhosted.org/packages/21/b1/6cbbb50c1f3002ab568777d44aa21206dfb8807a840990c4037523b51812/watchfiles-1.2.0-cp314-cp314-win32.whl", hash = "sha256:c0db965c5f79aa49fe672d297cf1febc5ad149b658594944f49a54a2b96270a7", size = 275108, upload-time = "2026-05-18T04:30:06.891Z" }, + { url = "https://files.pythonhosted.org/packages/92/45/190ce6db8dcb4536682cf75d3889ff1a27182a58cb519d343cb6d9ea63d8/watchfiles-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:71283b39fd17e5408eb123bd37aeecfd9d54c81fc184421943208aadb879d103", size = 288441, upload-time = "2026-05-18T04:32:12.901Z" }, + { url = "https://files.pythonhosted.org/packages/74/0d/3eae1c2313ab08378431d907c3f8095ecca00f3eda33111cf4f0f2591799/watchfiles-1.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:c5c19526f4e54a00f2666a6c0e9e40d582c09e865055ea7378bf0009aab857b3", size = 280684, upload-time = "2026-05-18T04:31:26.902Z" }, + { url = "https://files.pythonhosted.org/packages/b1/75/fb64e6c25d6b5ca636d03df34ffb1c6e9873303e76d27967e045f8df088f/watchfiles-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d73a585accffa5ae39c17264c36ec3166d2fad7000c780f5ef83b2722afb9dd2", size = 398857, upload-time = "2026-05-18T04:32:17.108Z" }, + { url = "https://files.pythonhosted.org/packages/73/4e/9f7adf01754cbf81843722ccfec169d8f26c69778281a302855cecd2ee08/watchfiles-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae99b14c5f21e026e0e9d96f40e07d8570ebee6cafd9d8fc318354606daa7a28", size = 392413, upload-time = "2026-05-18T04:31:07.911Z" }, + { url = "https://files.pythonhosted.org/packages/47/c8/bec626bcc2d69f44b9acb24ce7d60ed7b16b73628eea747fcbd169d8edda/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4429f3b105524a10b72c3a819b091c495d2811d419c1e1e8df773a5a5974f831", size = 452409, upload-time = "2026-05-18T04:31:20.142Z" }, + { url = "https://files.pythonhosted.org/packages/00/b7/b6362068e81e7c556d155a34c35d40ac3ef42d747b06d7f6e5bf58e359c2/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d818978d06062d9b22c4fab2ebe44cf5213d42dc8e62bda8c2760cfa2eeb33", size = 458827, upload-time = "2026-05-18T04:32:06.219Z" }, + { url = "https://files.pythonhosted.org/packages/67/f8/9a813fa42afb1e0b4625e75f0479826644d3ee8dc287e093799bc01f390c/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f732dc58b2dbe69e464ccf8fff7a03b0dd0be439da4c0720d3558527d3d6b4", size = 490104, upload-time = "2026-05-18T04:31:56.034Z" }, + { url = "https://files.pythonhosted.org/packages/2f/bf/27dfb6094ca4c9aad21298b5525b6c53cb36121ee454331d05161e58d130/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f200104103feb097de4cab8fe4f5dd18a2026934c7dea98c55a2f5fd6d5a33b", size = 571360, upload-time = "2026-05-18T04:31:57.133Z" }, + { url = "https://files.pythonhosted.org/packages/fb/39/44a096d67270ea93df91d33877dbe91fbda3aa4f8ec2edf799d93eda8736/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ac26eefbf4af1741247d6fb68b11c49a25b2f7413fbd318a83a12aaa9cf666", size = 464644, upload-time = "2026-05-18T04:30:57.33Z" }, + { url = "https://files.pythonhosted.org/packages/0e/80/c7472203bad6268e3ef1ad260739704847898938ad7ea8b63a5131f46b50/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4997d4e4a55f0d02b6cde327322daf3a0400e5df6c6b15948994bf72497925", size = 454771, upload-time = "2026-05-18T04:30:48.736Z" }, + { url = "https://files.pythonhosted.org/packages/51/cf/3b10b268b4b7f0fc26e9debb5eef1998b515887840f444cd3ec80c688755/watchfiles-1.2.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:4c887eba18b7945ac73067a8b4a66f21cd46c2539b2bc68588f7be6c7eb6d26b", size = 463494, upload-time = "2026-05-18T04:31:33.826Z" }, + { url = "https://files.pythonhosted.org/packages/3d/3e/a4302545cd589262a0dc7d140e86f7688eba3f9c72776c27f7e23b8864c4/watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3416ff151bb6b5a8d8d11664974fbef4d9305b9b2957839ab5a270468fd8df30", size = 629383, upload-time = "2026-05-18T04:31:15.596Z" }, + { url = "https://files.pythonhosted.org/packages/db/99/d5649df0a9a410d45b7c882304d0b790903ac9b6e8f2cfd12114e0c6b9f2/watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:0e831a271c035d89789cffc386b6aa1375f39f1cd25eb7ca0997e4970d152fc5", size = 656093, upload-time = "2026-05-18T04:31:58.707Z" }, + { url = "https://files.pythonhosted.org/packages/92/b9/362702539275019a54dd2e94511b31a9b89c5f9e6a21966de7eb692549fc/watchfiles-1.2.0-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:37a6721cdf3f65dbb13aa9503510ccb4451603ac837e44d265d7992a597e1374", size = 400109, upload-time = "2026-05-18T04:31:16.879Z" }, + { url = "https://files.pythonhosted.org/packages/8f/75/71d5ba62db781e5587bded1d944c675374bc4aa37ff33d5018d98e8b6538/watchfiles-1.2.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2b37d10b5a63bd4d87e18472d80fa525bd670586fae62e5dd580452764879b65", size = 392167, upload-time = "2026-05-18T04:31:28.058Z" }, + { url = "https://files.pythonhosted.org/packages/3c/01/c66dd95d0423fe30d31820e2d1d5bda773764131bbb6ac0cb1cf303ac328/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a105bc2283f67e8fbec74253ec2d94925de92ed72c0393f1206bf326b7b7b69", size = 452372, upload-time = "2026-05-18T04:31:00.836Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/2fe99557e72f85627c6a8eed50d889e8d101623e060a22ad75b875cb932d/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5327989a465505f05cfe06f04fa9d0c2fd5432bb243e10e6f012b1bdca3c8579", size = 459596, upload-time = "2026-05-18T04:31:34.96Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/d4acfa0023367428ed48351b3b9b267893037b6cadae55620c61c24bcfd4/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecb47f183a8025b2aa18b546725c3657e542112ae9c0613a2af79b4fa8d04ad7", size = 490869, upload-time = "2026-05-18T04:31:59.923Z" }, + { url = "https://files.pythonhosted.org/packages/a4/5f/3164cbdce06c9fb95c4f7b9e2f9760b5e2797af43a9ecc317ef42a23a278/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8520a4ab0e37f770afc34459c4f8f7019e153f9124dc101c15538365875d1ab2", size = 571641, upload-time = "2026-05-18T04:32:00.948Z" }, + { url = "https://files.pythonhosted.org/packages/41/e6/85d3731c55e65cd7690f3f803d24c139588aaf863e4bf2148fe7a7fa1a19/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71cd71740ed2c15211ebb237ced4e39a1cdf6f80566e5fe95428da1626f4fde6", size = 464444, upload-time = "2026-05-18T04:30:34.298Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/562641012b8b09872742c3b8adf9629ec479fd78f8d68ae4a0c13da8add6/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f88af53d6ddaf72179ef613ddc905e6f4785f712b49b80b3bef9f3525e6194b4", size = 453593, upload-time = "2026-05-18T04:31:23.464Z" }, + { url = "https://files.pythonhosted.org/packages/56/fe/cb8ef3d6f929d14158fdaaad9925985b7310abc9384dcd4d82dd0016fb59/watchfiles-1.2.0-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:cee9d5efd929efdac5f7e58f72b3376f676b64050a91c5b99a7094c5b2317488", size = 465096, upload-time = "2026-05-18T04:31:30.384Z" }, + { url = "https://files.pythonhosted.org/packages/25/91/80908e835e100527a9267147b08c0eee1fa6ab0ffec15edc04d1d44885f7/watchfiles-1.2.0-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:b718bf356bbc15e559bd8ef41782b573b8ae0e3f177ab244b440568d7ea02cfb", size = 630638, upload-time = "2026-05-18T04:30:49.89Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/95ab2f256bb4af3cb2eb23b9317bda984ee6e0f11733a5c004a6c95b06e3/watchfiles-1.2.0-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:922c0e019fe68b3ae392965a766b02a71ba1168c932cebc3733cd52c5fe5b377", size = 657684, upload-time = "2026-05-18T04:31:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/23/f4/7513ef1e85fc4c6331b59479d6d72661fc391fbe543678052ac72c8b6c19/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4674d49eb94706dfe666c069fc0a1b646ffcf920473492e209f6d5f60d3f0cc2", size = 403050, upload-time = "2026-05-18T04:30:36.753Z" }, + { url = "https://files.pythonhosted.org/packages/27/0b/a54103cfd732bb703c7a749222011a0483ef3705948dae3b203158601119/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:094b9b70103d4e963499bdea001ee3c2697b144cd9ae6218a62c0f89ec9e31db", size = 396629, upload-time = "2026-05-18T04:32:03.268Z" }, + { url = "https://files.pythonhosted.org/packages/5e/2c/73f31a3b893886206c3f54d73e8ad8dee58cdb2f69ad2622e0a8a9e07f4e/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0ef001f8c25ad0fa9529f914c1600647ecd0f542d11c19b7894768c67b6acb7", size = 457318, upload-time = "2026-05-18T04:31:01.932Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f9/45d021e4a5cc7b9dd567f7cbb06d3b75f751a690063fb6cc7ec60f4e46b7/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0", size = 457771, upload-time = "2026-05-18T04:30:56.331Z" }, +] + +[[package]] +name = "websockets" +version = "16.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/f7/bc3a25c5ec26ce62ce487690becc2f3710bbc7b33338f005ad390db0b986/websockets-16.1.1.tar.gz", hash = "sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57", size = 182204, upload-time = "2026-07-17T22:51:05.858Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/e7/d1671fb984f9dd844e1da5288070c7c23c9eaba3082d3871aae19c3ab8b9/websockets-16.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:49ae99bdfcae803a885c926bf14f886196e84925395bb3f568fef5c0f0979d7d", size = 179570, upload-time = "2026-07-17T22:48:24.032Z" }, + { url = "https://files.pythonhosted.org/packages/99/f5/70df723bf571f5e0b1b845e0a4ff1c966eeb84f667599fc251caa37d15a3/websockets-16.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5bfd1ac19b1b9986a9c95a82d5e23a391ebb09e12c34d7be6094b86efcc35731", size = 177252, upload-time = "2026-07-17T22:48:25.775Z" }, + { url = "https://files.pythonhosted.org/packages/90/72/2f14b2e167170b8bf1c8bb7f9b0d78000f470d41a2085a91f33e3917b6c9/websockets-16.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9246a0d063cfcbcc85f2359dd6876d681213f4790832272aa16641b4ed5d64d4", size = 177530, upload-time = "2026-07-17T22:48:27.337Z" }, + { url = "https://files.pythonhosted.org/packages/f3/18/a17e2f0cde02dc10154c808deed7e1d8528afff93612f70d3f0a5b19b011/websockets-16.1.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1214e673c404684b9bf7154f5cf43b45025b1a6160fac3a9e438e9c1a97e22cb", size = 186038, upload-time = "2026-07-17T22:48:28.756Z" }, + { url = "https://files.pythonhosted.org/packages/d5/b0/41de283899cf5929d637b72a508cdbc9aa40dc0f317c6b77613fd1000488/websockets-16.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90001d893bc368e302ef168d82130b4e4fdd27b85fa094682df9b667c2d48838", size = 187278, upload-time = "2026-07-17T22:48:30.328Z" }, + { url = "https://files.pythonhosted.org/packages/50/61/874aab5257e027f9f61b5004cec65e592babca7942b1bc09f38e72b7f1fd/websockets-16.1.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:130937b167a52af203c8d58e78d67705874e82759862e3b9671a452fec4abc87", size = 189936, upload-time = "2026-07-17T22:48:31.896Z" }, + { url = "https://files.pythonhosted.org/packages/a6/1a/42173913ac5519607220849ed417c864d77384e4119f06dbba964a50f096/websockets-16.1.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c9f23004a3d40e89c01a7955d186a6cc83418d93b749701944ce2de3e95a1f3", size = 187796, upload-time = "2026-07-17T22:48:33.344Z" }, + { url = "https://files.pythonhosted.org/packages/1b/f4/37c1840bd89b529479aec41470b97b7c683b107ca90b6399ac5afb99dedf/websockets-16.1.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f55f0b01956a094c8587146d9558c91937e78789c333860ffaf35931a6e5dbc4", size = 186481, upload-time = "2026-07-17T22:48:34.843Z" }, + { url = "https://files.pythonhosted.org/packages/9e/70/652d9b964adcfbeb056f42e0ca6bece34d108fe75534e74df20643cae199/websockets-16.1.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6aaface73b9c71974c6497366d8b9628357f6c9749e09c4ea3610176c63f2ae3", size = 184351, upload-time = "2026-07-17T22:48:36.307Z" }, + { url = "https://files.pythonhosted.org/packages/13/f1/af3850e5d48d482921985be72ebcb169c6180b3a77b57bd612deebcee23b/websockets-16.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc0fad4933f427acd5b1cec210f3ea6dce7089e1724e4b9ec6ef47c6c04d1b3b", size = 186791, upload-time = "2026-07-17T22:48:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/1d/40/1a4e3ed4969ec378dcad337e5f1472c5e292cb3e733bc392f0dc2e230abd/websockets-16.1.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f2769a0344a09e9ccf5b3cce538bc75a51b53eff3275d3896310c8552049195d", size = 185413, upload-time = "2026-07-17T22:48:39.127Z" }, + { url = "https://files.pythonhosted.org/packages/aa/3e/4e3fa1afe8f1a6a780434cd9ba8eb422632b044eff3dd73f6af67523c147/websockets-16.1.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f70541f3104339f59f830522d94ebadb1bf47426287381623443d8bb1cdbf33d", size = 187178, upload-time = "2026-07-17T22:48:40.676Z" }, + { url = "https://files.pythonhosted.org/packages/71/ab/dd742766aa5dda7f349be0de49e4d565b84cf6f7f7fa02e07692f0f2bdd9/websockets-16.1.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:dc385593a42e31cd6fb60c19f0ecb015b386603818fc2c6c274fb42bd2bb4165", size = 185051, upload-time = "2026-07-17T22:48:42.098Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f5/76438c6560f416f1c0a7f587679fb97cc6e99ed336011d43ce2002dd27c1/websockets-16.1.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:387e8e4aa5df2f90b198fa3cad3478822a89cf905b6a6d6c97dc3664689640cc", size = 185846, upload-time = "2026-07-17T22:48:43.472Z" }, + { url = "https://files.pythonhosted.org/packages/62/12/5c0320f2127823d27b2d56d611d31b0b284ad4edcb41364d66bf4c92b537/websockets-16.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fd46fff7eb62c24804d234f0051c7a8ea81285ad63e0337d3dcf33ca82aee58a", size = 186066, upload-time = "2026-07-17T22:48:44.884Z" }, + { url = "https://files.pythonhosted.org/packages/a2/97/875986b857b955c3f9dd192cb8a1af81254dfb2ea22cc9590f0a1e020b8b/websockets-16.1.1-cp310-cp310-win32.whl", hash = "sha256:7883388947767080f094950b342b30d35a2a06b849cd967c422fa0db72b40ea9", size = 179940, upload-time = "2026-07-17T22:48:46.481Z" }, + { url = "https://files.pythonhosted.org/packages/54/82/1013a5fe7ddae8e102bc3b4b39db81d8d28fd02100a324ce6ede8cd832b1/websockets-16.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d57685547e0060cc6fd90ee6a28405d6bd395e525545f13c8d7cd99c78afd79f", size = 180239, upload-time = "2026-07-17T22:48:48.043Z" }, + { url = "https://files.pythonhosted.org/packages/2b/03/47debfe28e9d6d354be5d777b67fd44c359b9eb299a5d103500bd7cc3e37/websockets-16.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d0fcf657e9f13ff4b177960ab2200237b12994232dfb6df16f1cfe1d4339f93c", size = 179566, upload-time = "2026-07-17T22:48:49.596Z" }, + { url = "https://files.pythonhosted.org/packages/72/93/31efa1ed78c17e5cfc229fd449e3966e1b9cc15753204cd585cc8dd01f4a/websockets-16.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b852788aa51764e2d8e4cf5493d559326bcae5e38d16ba25ffa322b034df272a", size = 177250, upload-time = "2026-07-17T22:48:50.942Z" }, + { url = "https://files.pythonhosted.org/packages/01/4a/542378ab3972b0c1cf1df3df3eff9591cea0d30c58c3aa3c4ddbc244e787/websockets-16.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1427fb4cf0d72f66333e2cacc3ff5f575bf2d7008166ce991a4a470b21d51a22", size = 177528, upload-time = "2026-07-17T22:48:52.59Z" }, + { url = "https://files.pythonhosted.org/packages/33/d9/162321f63c7eed558e9e1798ed7a1e34a4f6dab51f35419e4ed7a4907979/websockets-16.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:da4ca1a9d72f9030b3146b8d7022719a9f3d478f61efe6f7dd51d243f61c51b2", size = 186859, upload-time = "2026-07-17T22:48:53.915Z" }, + { url = "https://files.pythonhosted.org/packages/de/09/87df740f7430ce564bd52402e9c9458d4d0459cc7d2ee29e530c8204851b/websockets-16.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86d7f0f8bdb25d2c632b72527325e4776430fd5bc61b9118de4e2b8ddb5f5b01", size = 188095, upload-time = "2026-07-17T22:48:55.384Z" }, + { url = "https://files.pythonhosted.org/packages/d2/12/3d2703af7cc095f3c81904c92208cc1ae79affbc67376944b50ee9301f73/websockets-16.1.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7dfcad78ea1492ee3a9ec765cb7f51bbc17d477107aaf6b22abf7b2558d1c5a0", size = 191385, upload-time = "2026-07-17T22:48:56.742Z" }, + { url = "https://files.pythonhosted.org/packages/1d/69/986aa0234a964a00f5149cfc46e136e96c8faad1c783474550f40d31aef4/websockets-16.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fb9a0a6dc3d1b3986cb88091b6899f0396651e0f74e2c9766ab8d6ffc3842e29", size = 188653, upload-time = "2026-07-17T22:48:58.134Z" }, + { url = "https://files.pythonhosted.org/packages/35/6b/10f9d03e3970a69ba67bd3b46b87a929b586d0300fadbfe14f57c1f85490/websockets-16.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29dfa8114c4a620c69591c5973860f768eac29d3fd6904f37f34266cb219c512", size = 187426, upload-time = "2026-07-17T22:48:59.515Z" }, + { url = "https://files.pythonhosted.org/packages/56/db/bb3aad62bf63d8bb3f0634b2eabffcfb3677a34bd19492110ff6869cf703/websockets-16.1.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ff9417c0ada4d0f7d212f928303e5579bdf3ace4c802fa4afabb30995da58c3", size = 184882, upload-time = "2026-07-17T22:49:00.916Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4c/c09a2ea9bfbeccce52fdc383e5f28af4bc8843338aabac28c81489af6120/websockets-16.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fe0b50da2d84535fb4f7b4bfa951280f97ce3d558a0443b541166d609e67b57", size = 187584, upload-time = "2026-07-17T22:49:02.283Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8b/31bb4eb4d9eaacf1fdd39d115772a8aeaedfc19b5dc262e57ffbc8a9d42c/websockets-16.1.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:34420aaa64440ebd51ac72ca8a45ef4626429438c9b02e633ae412ed43f925d3", size = 186174, upload-time = "2026-07-17T22:49:03.973Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e4/dc02d725610a1ad49e193ef91a548194d71bdc6cdf27da83067dd1f73995/websockets-16.1.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a6a61aff018180c9c50b7b0da33bfd29d378af3497429c95006c589a23a11648", size = 187986, upload-time = "2026-07-17T22:49:05.553Z" }, + { url = "https://files.pythonhosted.org/packages/e0/73/30ed84c8bfd14c73d4af29d5ed9323c3073b48e0b7b23b67070f4e7fd59b/websockets-16.1.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:04fd29a0e2fe9414a95b00e92c67ae51bf900c50c0f8a4b2dafdad621f49ea1d", size = 185565, upload-time = "2026-07-17T22:49:06.959Z" }, + { url = "https://files.pythonhosted.org/packages/7d/d3/4be8d4959f51e31b4f8fc0ece12b45bd3b6c0d15ea23b9990d9c11fc805f/websockets-16.1.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5c31aa7e39ee3e8a358573257f1c0bb5c52430d1b637030dd9c8cc2c282926be", size = 186598, upload-time = "2026-07-17T22:49:08.293Z" }, + { url = "https://files.pythonhosted.org/packages/26/fa/abb38597a52d84ed9cfacadc7a0c6f2db282c0ab23cdf72b58a666a21227/websockets-16.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d14bfb217eb4701e850f1525c9d29d79c44794cdf1c299ead25f39f8c78dea81", size = 186834, upload-time = "2026-07-17T22:49:09.766Z" }, + { url = "https://files.pythonhosted.org/packages/59/80/1119ad08a228b90c4eb77fbe48df7836731a605f5f881ba701ca826a4a65/websockets-16.1.1-cp311-cp311-win32.whl", hash = "sha256:2e28e602bb13da44fbe518c1781a88e3b9d4c3d48d02c9bad83e546164336f57", size = 179940, upload-time = "2026-07-17T22:49:11.196Z" }, + { url = "https://files.pythonhosted.org/packages/71/b2/e511c1c6f64a95c2f3fc54bffda0e14eaa7e9442be605c29270f7589b918/websockets-16.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:7421fad442de870a8cbf2287d1cad7e706ece0dbfeba5e911df132cbdc1cb56a", size = 180239, upload-time = "2026-07-17T22:49:12.519Z" }, + { url = "https://files.pythonhosted.org/packages/17/9d/681cda21c9eee743203a6cb79b9d3d05adad9aa60ec660c6c9bf4dd619ca/websockets-16.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cc97814dfb786a83b6e2dc2e79351e1b83e6d715647d6887fcabd83026417a00", size = 179600, upload-time = "2026-07-17T22:49:13.92Z" }, + { url = "https://files.pythonhosted.org/packages/fb/8d/6195a88b45e8d2a8f745fc2046e36f885a3c9763e6767d2c46229bf9510c/websockets-16.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e047dc87ef7ca50f4d309bf775ad4a71711c58556d75d7bd0604b2317f43e94b", size = 177272, upload-time = "2026-07-17T22:49:15.453Z" }, + { url = "https://files.pythonhosted.org/packages/73/e3/fe2d498c64dea0095c9a9f9a351af4cd6eef31b618395582bc1f38ba45ff/websockets-16.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01fbdcbac298efe19360b94bc0039c8f746f0220ba570f327577bfee81059175", size = 177542, upload-time = "2026-07-17T22:49:16.875Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ed/f1831681fce0e3242346e5458486003c5f124ed69e5e0b847fd029db4973/websockets-16.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f62863e8a00a6d33c3d6566ec0b89f23787b747ffe0c3bc71ec0e76b82c94b1", size = 187137, upload-time = "2026-07-17T22:49:18.323Z" }, + { url = "https://files.pythonhosted.org/packages/6f/79/4ff9dcc1bb46f6b4c536936dde1fd60f9b564f3304307274db97f4c9496d/websockets-16.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8087e82f842609734c9b5a1330464f8e94e346ba0e18c832c08bafa4b0d63c15", size = 188374, upload-time = "2026-07-17T22:49:19.65Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/5c49b6efb36cab733d23773f6de575e1dba65736ead17d5d2b2a1daef779/websockets-16.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2bb5d041a8307d2e18782e7ce777f6fdb1e8c2f5d09291484b18c294b789d9aa", size = 191155, upload-time = "2026-07-17T22:49:21.331Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f6/56ccceda3a4838d18f1d40821480da4775397e8b1eecf4031e20c50e2e90/websockets-16.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1db4de4a0e95673f7545d393c49eeb0c2f18ac1ef93073218c79d5cdb2ee75ab", size = 189011, upload-time = "2026-07-17T22:49:22.889Z" }, + { url = "https://files.pythonhosted.org/packages/86/d6/ad5286241a2bce1107e2798d3bfbd62cf79aee167bdb654f8cb1e9dbf949/websockets-16.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f17dbe07eb3ea7f99e4df9b7e0efefe80fbf30d37a8cc4d561a0aed310bc8847", size = 187766, upload-time = "2026-07-17T22:49:24.339Z" }, + { url = "https://files.pythonhosted.org/packages/bc/67/d65c970b7e347fdca69479beb7811c2060529956730a7a4e3ae7c66b0e31/websockets-16.1.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4b57693728576d84ede0a77987ab16881b783d2cd9f1dc180a8fbbc3f79c4428", size = 185173, upload-time = "2026-07-17T22:49:25.743Z" }, + { url = "https://files.pythonhosted.org/packages/1d/5b/14af3cd4ee69d8ea9baca58f3dc3cfb1ba78332a347fd478cb096549d60e/websockets-16.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a636ff1e7a5c4edf71ef0e79adae7f25dba93b4fcbe3dc958733477ffeb0eaf", size = 187809, upload-time = "2026-07-17T22:49:27.147Z" }, + { url = "https://files.pythonhosted.org/packages/7b/11/be301710d70de97e3e7b3586e6d492c9c06d6a61bf1c2202c36cf0c75607/websockets-16.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d6bec75c290fe484a8ba4cacdf838501e17c06ecfbbf31eede81a9e431bd7751", size = 186412, upload-time = "2026-07-17T22:49:28.611Z" }, + { url = "https://files.pythonhosted.org/packages/db/07/fe1435bf6fe738a3d3b54dbe0c18dabf12cba4d909ac8b58b539ce27c1f4/websockets-16.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:54509b8e92fee4453e152b7558ddef37ce9705a044922f2095a6105e3f80c96f", size = 188290, upload-time = "2026-07-17T22:49:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0a/81f394aff8efcbb01208c1ced77df0a3c7fcce584a88c7273663697946c2/websockets-16.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f0aa4aad3b1b69ad3fd85a0fd0952ec64331c762bd77ec51cc814170873890b2", size = 185844, upload-time = "2026-07-17T22:49:31.447Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/dd485b995473f415510251fe9bd708f2d24458f439fce958daf8d66dc7c6/websockets-16.1.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:42290eb6db4ccaca7012656738214f8514082fb6fa40cdeb61bb9a471b52e383", size = 186823, upload-time = "2026-07-17T22:49:33.104Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0b/f78de76ff446f1e66af12b43c48a35f31744de93cfdec2f4ea67d5d7bbf1/websockets-16.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:53260c8930da5771cec89439bff99c20c8cb03ddb9588b980697355a83cd4bd3", size = 187102, upload-time = "2026-07-17T22:49:34.616Z" }, + { url = "https://files.pythonhosted.org/packages/37/a1/4cf892007778eaf84ad162bfc98046e0ed89b63ac55949e3236626b2a23f/websockets-16.1.1-cp312-cp312-win32.whl", hash = "sha256:1d27fa8462ad6a1cb36206a3d0640b2333340def181fae11ed7f9adeaa5c0747", size = 179943, upload-time = "2026-07-17T22:49:36.213Z" }, + { url = "https://files.pythonhosted.org/packages/d9/de/6abe251d28c3a3f217096575400b27750b18e0b1d2fff3a2a239960fea07/websockets-16.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:b436f6ec4fc3a6b4237c84d3f83170ed2b40bb584222f0ac47a0c8a5921980c7", size = 180243, upload-time = "2026-07-17T22:49:37.626Z" }, + { url = "https://files.pythonhosted.org/packages/ce/fd/6ec6c6d2850aea25b1b2aa9901a016980bb87d01e89b3eb00470b1b5d471/websockets-16.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ab59169ace05dcb49a1d4118f0bde139557adf45091bd85747e36bf5de984dd1", size = 179587, upload-time = "2026-07-17T22:49:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/5f/d8/1d299d2dd34087db39831a34cc645ef8a6f89d78efada6983093513cd81c/websockets-16.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5e3b7d601f6f84156b08cc4a5e541c2b50ad7b36cfc302b657a12477c904a5df", size = 177272, upload-time = "2026-07-17T22:49:40.293Z" }, + { url = "https://files.pythonhosted.org/packages/3d/86/0a70d3ae2f0f2256bb41302d9804dbca65d4360281e7feb3e1f94102ac46/websockets-16.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cd2ca96a082a36964aca83e992f72abeb61b7306c1a6cba4c7d06a7b93750cac", size = 177530, upload-time = "2026-07-17T22:49:41.786Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c2/c676c69444d9db448b3f0a55a98dcc534affce0bce961d9d2f0b8499b10a/websockets-16.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f5d497865f05bb222cab7016c6034542e84e5f29f49c6fd3f4939cda7197b5b8", size = 187197, upload-time = "2026-07-17T22:49:43.658Z" }, + { url = "https://files.pythonhosted.org/packages/0b/13/88137fbaf726ebe29d62c1117fa11fa2bbb6209dc79d4ad738efbe36a2aa/websockets-16.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bae954c382e013d5ea5b190d2830526bfa45ad121c326da0049b8c769f185db6", size = 188433, upload-time = "2026-07-17T22:49:45.147Z" }, + { url = "https://files.pythonhosted.org/packages/01/6d/46c2f2ce6751cb26f39293e1ecbf8544cb01321397cd476c2756b98c216d/websockets-16.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e09f753a169951eb4f28c2c774f71069304f66e7277e0f5a2892423599cfa854", size = 189868, upload-time = "2026-07-17T22:49:46.581Z" }, + { url = "https://files.pythonhosted.org/packages/29/2b/170a9e8097636cfde4dc3c592b6e00b18a44a2f5407606d96ca542dd5838/websockets-16.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:024193f8551a2b0eafbdd160911012c4e6c228c28430c84433253299a9e42d6a", size = 189059, upload-time = "2026-07-17T22:49:47.972Z" }, + { url = "https://files.pythonhosted.org/packages/a7/48/f0d4ebc9ab4b473b8861b9e20fdb663d515d42f7befdf62cdb60fee7a1ec/websockets-16.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:aabe464bfd13bd25f4821faf111da6fefdc389f870265a53105580e45b0a2e49", size = 187814, upload-time = "2026-07-17T22:49:49.344Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ba/39a41d3ae8e72696a9492581900611c5a91e2b07563b0bcd2523adea9854/websockets-16.1.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a28fcbc9b6baf54a2e23f8655f308e4ccc6afdd7266f8fe7954f320dcda0f785", size = 185229, upload-time = "2026-07-17T22:49:50.787Z" }, + { url = "https://files.pythonhosted.org/packages/3c/36/ac15b604f850d1907f0a85ed721cefe47cd45034b3620069b829746cccbe/websockets-16.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79eace538c6a97e96d0d03d4f9d314f9677f5ed85a8a984992ffd90b13cb8a56", size = 187874, upload-time = "2026-07-17T22:49:52.228Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f3/3fbd5d71d59299c3770faa5884d4f45070236ca5a35ab3a61830812c409a/websockets-16.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:496af849a472b531f758dbd4d61338f5000538cb1a7b3d20d9d32a264517f509", size = 186469, upload-time = "2026-07-17T22:49:53.776Z" }, + { url = "https://files.pythonhosted.org/packages/b4/fc/dd90349bba58af2a53ef2ddd9c32716c81eb6d59a0687939fff561860878/websockets-16.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5283810d2646741a0d8da2aa733d6aefa0545809afccb2a5d105a26bc45125f1", size = 188347, upload-time = "2026-07-17T22:49:55.202Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f3/f73ba86427682da59b78c11d77ba56d5b801c32e84afe79b274bbd6a9bb2/websockets-16.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4e3b680b1e0a27457e727a0d572fd81dffa87b6dbf8b228ab57da64f7d85aead", size = 185903, upload-time = "2026-07-17T22:49:56.75Z" }, + { url = "https://files.pythonhosted.org/packages/34/7c/f95eb20e80104173b3a0a092291f89ea4047ef6e608e0a57ca06eb14eecb/websockets-16.1.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69159730a823dde3ea8d08783e8d47ef135a6d7e8d44eb127e32b321c9db8e3e", size = 186855, upload-time = "2026-07-17T22:49:58.467Z" }, + { url = "https://files.pythonhosted.org/packages/b0/35/dd875b3e050ff232d60fa377707f890e369f74d134f1be32e8f68879747c/websockets-16.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed5bb271084b46530ee2ddc0410537a9961152c5ccba2fc98c5276d992ccba87", size = 187140, upload-time = "2026-07-17T22:50:00.016Z" }, + { url = "https://files.pythonhosted.org/packages/e8/dc/5cbfcb41824502f6af93b8f3943a4d06c67c23c7d2e31eb18748c4a5b2a7/websockets-16.1.1-cp313-cp313-win32.whl", hash = "sha256:cfb70b4eb56cac4da0a83588f3ad50d46beb0690391082f3d4e2d488c70b68ea", size = 179928, upload-time = "2026-07-17T22:50:01.685Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c1/71e5deb5b7f8f226997ab64908c184ac3105c0155ce2d486f318e5dd08a8/websockets-16.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9531d9cbeac99af6f038fb1bc351403531f7d634a2c2e10e2f7c854c6ed5b68", size = 180242, upload-time = "2026-07-17T22:50:03.117Z" }, + { url = "https://files.pythonhosted.org/packages/73/a2/ba78a164eeea4620df4a4df4bd2ed6017438c4655cc0f36f2c0bc0432355/websockets-16.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:443aefe96b7fdb132e2a70806cca1f2af49bb3f28e47abcd7c2e9dcf4d8fa1b8", size = 179635, upload-time = "2026-07-17T22:50:05.001Z" }, + { url = "https://files.pythonhosted.org/packages/b9/08/d26d7a7628cd4ac34cbbdb63ac80914ca842ed8e42938c40a53567806df3/websockets-16.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6456ff333092d509127d75a638cb411afae8ff17f092635015d1902efec8a293", size = 177320, upload-time = "2026-07-17T22:50:06.427Z" }, + { url = "https://files.pythonhosted.org/packages/0f/45/ebec83e6269536aa5932533c67b0af5c781f3e73fdbcd68672dcf43f4f44/websockets-16.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fce6c48559c86d1ac3632ccb1bebc7d5442fbe79bd9bb0e40379ee54be2a4051", size = 177544, upload-time = "2026-07-17T22:50:07.834Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d5/abc614d2297f6c1c3e01e61260364457a47c25cc1cf6a879038902bc6aa8/websockets-16.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:92b820d345f7a3fc7b8163949ee92df910f290c3fc517b3d5301c78065adafe1", size = 187270, upload-time = "2026-07-17T22:50:09.275Z" }, + { url = "https://files.pythonhosted.org/packages/52/71/4c99af3b87dff1b2927981f6876607d4acb45338c665242168d3982f7758/websockets-16.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a606d9c24035242a3e256e9d5b77ed9cd6bccfcb7cf993e5ca3c0f6f68fb6a7", size = 188509, upload-time = "2026-07-17T22:50:10.722Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b4/5c8ca14b0df7eb84ed0524165c5359150210140817a3312aee57bf62a1cf/websockets-16.1.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:414e596c75f74e0994084694189d7dc9229fb278e33064d6784b73ffbba3ca31", size = 189882, upload-time = "2026-07-17T22:50:12.293Z" }, + { url = "https://files.pythonhosted.org/packages/25/c1/bedfba9e70557129cb8083748d167bdcc01483dedf0f0df143676df05cbe/websockets-16.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:536676848fc5961aca9d20389951f59169508f765637a172403dc5434d722fa0", size = 189114, upload-time = "2026-07-17T22:50:13.789Z" }, + { url = "https://files.pythonhosted.org/packages/df/09/aa835b2787835aebd839114be5de51b797cb480b63ba42b26d34dfe147cb/websockets-16.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:97fd3a0e8b53efa41970ac1dff3d8cf0d2884cadeb4caaf95db7ad1526926ee3", size = 187861, upload-time = "2026-07-17T22:50:15.179Z" }, + { url = "https://files.pythonhosted.org/packages/20/26/f6408330694dbc9830857d9d23bc14ac4f6875127a480cfdda8d5ca21198/websockets-16.1.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7b1b19636af86a3c7995d4d028dbe376f39b4bf31541146f9c123582a6c94562", size = 185286, upload-time = "2026-07-17T22:50:16.741Z" }, + { url = "https://files.pythonhosted.org/packages/17/9a/e0675e70dd8a80762cf35bb18799d3f290a4890ffe6439bc51d222796083/websockets-16.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:41c8e77f17294c0ac18008a7309b99b34ee72247ef10b6dff4c3f8b5ac29896b", size = 187935, upload-time = "2026-07-17T22:50:18.213Z" }, + { url = "https://files.pythonhosted.org/packages/33/c1/3234cfb86afde01b81e9bddcc6e534c440975d60a13991259e833069ab3e/websockets-16.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9f63bcef7f4b02b06b35fc01c93b96c43b5e88e1e8868676caacf493d5a31f3a", size = 186444, upload-time = "2026-07-17T22:50:19.67Z" }, + { url = "https://files.pythonhosted.org/packages/89/87/9c15206e1d778923d8daa9657de07aa62ea815e13448319c98458c37b281/websockets-16.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dab9eb87869da2d6ed3af3f3adf28414baae6ec9d4df355ffc18889132f3436c", size = 188409, upload-time = "2026-07-17T22:50:21.28Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/cf5de5c67676de2d3eef8b2a518f168f6796595447a5b7161ba0d012915c/websockets-16.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:43e3a9fdd7cbf7ba6040c31fae0faf84ca1474fef777c4e37912f1540f854499", size = 185958, upload-time = "2026-07-17T22:50:22.719Z" }, + { url = "https://files.pythonhosted.org/packages/62/c0/731b6ddede2e4136912ec4cff2cffbda35af73546be4762c3d7bd3bd79af/websockets-16.1.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:056ae37939ed7e9974f364f5864e76e49182622d8f9751ac1903c0d09b013985", size = 186911, upload-time = "2026-07-17T22:50:24.108Z" }, + { url = "https://files.pythonhosted.org/packages/8c/7f/39c634472c4469a24a7c09cecddffb08fac6d0e74f73881a94ee8a40a196/websockets-16.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a0eadbbf2c30f01efa58e1f110eb6fa293261f6b0b1aa38f7f48707107690af9", size = 187204, upload-time = "2026-07-17T22:50:25.548Z" }, + { url = "https://files.pythonhosted.org/packages/26/89/9667c256c256dafcc62d21328ce7a40067da857969b68ee9af375b0aaf72/websockets-16.1.1-cp314-cp314-win32.whl", hash = "sha256:195c978b065fa40910582464f99d6b15c8b314c68e0546549a55ed83f4735328", size = 179603, upload-time = "2026-07-17T22:50:27.086Z" }, + { url = "https://files.pythonhosted.org/packages/bd/dd/1c099d6c0fc5deb6b46ccdbb6981fdb4b12c917869cb3952408409dc18db/websockets-16.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:4e8d01cc3bcae7bbf8167f944aeafefed590fae5693552bba9794a9df68371cc", size = 179948, upload-time = "2026-07-17T22:50:28.521Z" }, + { url = "https://files.pythonhosted.org/packages/35/25/9956b2d5e0529d5d23924f21bba1440d4c5c88a562e4f08550871ffa97a7/websockets-16.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0ffd3031ea8bda8d61762e84220186105ba3b748b3c8da2ae4f7816fac03e573", size = 179963, upload-time = "2026-07-17T22:50:29.982Z" }, + { url = "https://files.pythonhosted.org/packages/17/06/55ffc976c488b6aee9ea05761ff7c4e88e7c1fd82818c8ca7b556ad2f90c/websockets-16.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:84a2cef8deffbd9ab8ee0ea546a2a6a7030c28f44e6cdd4547dbfeb489eb8999", size = 177497, upload-time = "2026-07-17T22:50:31.396Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/f7dac2e980bacc92bdc26cebae4ae4d50cae5380732c50980598fc0bbae4/websockets-16.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3df13f73af9b3b38ab1195eb299ecb67a4330c911c97ae04043ff74085728abe", size = 177698, upload-time = "2026-07-17T22:50:32.829Z" }, + { url = "https://files.pythonhosted.org/packages/b2/39/26762f734113e22da2b942c3aca85798e0c0405d64c256549540ff31e5a1/websockets-16.1.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23253dd5bcae3f9aaee0a1d30967a8dbd52e5d3cff93a2e5b84df57b77d4750d", size = 187561, upload-time = "2026-07-17T22:50:34.24Z" }, + { url = "https://files.pythonhosted.org/packages/11/94/c3f330851806b9b02138b774d593478323e73c99238681b4b93efe64e02d/websockets-16.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1c5705e314449e3308872fe084b8571ce078ee4fc55a98a769bdefe5917392", size = 188732, upload-time = "2026-07-17T22:50:36.088Z" }, + { url = "https://files.pythonhosted.org/packages/d1/f2/eb2c450f052de334ae33cf200ece6e87b0e14d186807074e4eb1cd2cdea2/websockets-16.1.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69e52d175a0a7d1e13b4b67ad41c560b7d98e8c6f6126eb0bda496c784faf8c7", size = 190872, upload-time = "2026-07-17T22:50:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/70/31/2ac8cecf3a74f7fed9132129fc3d90b3998a1554570c11a69b2a8c20332d/websockets-16.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1f79c89b5eb034d1722938a891916582f8f7f503f58ca22518a63c3f2cd18499", size = 189305, upload-time = "2026-07-17T22:50:39.53Z" }, + { url = "https://files.pythonhosted.org/packages/6a/cf/8ab19650d3c0d4562c92e70ab47c257c4aa5c6a713ed87fe63766b31fefc/websockets-16.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:39f2a024af5c345ffe8fcf1ee18c049c024c94df393bb09b044a6917c77bde43", size = 188033, upload-time = "2026-07-17T22:50:40.912Z" }, + { url = "https://files.pythonhosted.org/packages/66/d7/a49a38a6127a4acb134fb1912b215d900cc657605cff32445bf519f3acc4/websockets-16.1.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:952303a7318d4cbe1011400839bb2051c9f84fa0a35923267f5daba34b15d458", size = 185748, upload-time = "2026-07-17T22:50:42.559Z" }, + { url = "https://files.pythonhosted.org/packages/95/3e/ad1fa40388c7f2e0bb2c7930d0090b6c5498594bd1cdaec18864df3d9e97/websockets-16.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:249116b4a76063d930a46391ad56e135c286e4562a18309029fc2c73f4ed4c62", size = 188285, upload-time = "2026-07-17T22:50:43.974Z" }, + { url = "https://files.pythonhosted.org/packages/35/b8/d5db28ca264b9104f82196f92dc8843e35fd391f763d42e4ad358f5bc97e/websockets-16.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:61922544a0587a13fd3f53e4c0e5e606510c7b0d9d22c8444e5fae22a06b38cb", size = 186777, upload-time = "2026-07-17T22:50:45.474Z" }, + { url = "https://files.pythonhosted.org/packages/42/9c/726cb39d0cc43ae848dce4aa2acb04eecc6738b1264ec6d700bf6bcfb9f8/websockets-16.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:46dcaa042cd1de6c59e7d9269fa63ff7572b6df40510600b678f0826b3c7af51", size = 188682, upload-time = "2026-07-17T22:50:46.973Z" }, + { url = "https://files.pythonhosted.org/packages/be/c7/1168704de8c2dd483edabe4a22cbe4465dd8be8dd95561d214f9fe092871/websockets-16.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:38565aca3e01ea8734e578fb2118dade0ecb0250533f29e22b8d1a7a196cf4d0", size = 186377, upload-time = "2026-07-17T22:50:48.413Z" }, + { url = "https://files.pythonhosted.org/packages/ca/40/f9ff2d630ffce4e7dfea0b2288e1caf9ebbf9ff8a9ec9396136ce8b94935/websockets-16.1.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:42f599f4d48c7e1a3338fdaac3acd075be3b3cf02d4b274f3bf2767aedd3d217", size = 187148, upload-time = "2026-07-17T22:50:49.845Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/e177c8299f78d7cbe2d14df228643c10c70c0e86e108e092056bbcc16e46/websockets-16.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dcc04fedf83effaeb9cce98abc9469bb1b42ef85f03e01c8c1f4438ef7555737", size = 187578, upload-time = "2026-07-17T22:50:51.619Z" }, + { url = "https://files.pythonhosted.org/packages/49/b2/b6987faf330f5af5c787a2610124c2e8403d51724f9001ec4fff6311fe7a/websockets-16.1.1-cp314-cp314t-win32.whl", hash = "sha256:8483c2096363120eea8b07c06ae7304d520f686665fffd4811fad423930a65d7", size = 179729, upload-time = "2026-07-17T22:50:53.269Z" }, + { url = "https://files.pythonhosted.org/packages/a2/6e/fbac6ed878dd362fbad7d415fa4f84d38e3e33fed8cde45c64e783acf826/websockets-16.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bcce07e23e5769375158f5efdcdafa8d5cd014b93c6683865b840ed65b96f231", size = 180072, upload-time = "2026-07-17T22:50:54.969Z" }, + { url = "https://files.pythonhosted.org/packages/e1/ed/71fea6e141590cafc40b14dc5943b0845606bee87bdb52a21b6a73eb4311/websockets-16.1.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:820fb8450edddae3812fd58cbc08e2bf22812cb248ecb5f06dbb82119a56e869", size = 177185, upload-time = "2026-07-17T22:50:56.665Z" }, + { url = "https://files.pythonhosted.org/packages/01/ec/00e7eeca200facf9266a83e4cbbf1bed0e67fba1d4d45031d3e5b3d81b5c/websockets-16.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:125f22dbefaf1554fea66fc83851490edb284ce4f501d37ffed2752f418332d9", size = 177459, upload-time = "2026-07-17T22:50:58.197Z" }, + { url = "https://files.pythonhosted.org/packages/75/fd/5774c4b33f7c0d8f0c51809c8b3a93456c48e3543579262cfa64eb5f522e/websockets-16.1.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:30bbe120437b5648a77d3519b7024ea09530e0b5b18d3698c5a0ae536fe0cc2e", size = 178294, upload-time = "2026-07-17T22:50:59.641Z" }, + { url = "https://files.pythonhosted.org/packages/37/c3/48e2c03d2bd79bb45948841c592d24156312dd5f58cdf8f549febe652fb6/websockets-16.1.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b6b9dadbef0cccd9f4c4ee96b08898afa73e26803bbe0f6aeb5bb12b0074206d", size = 179190, upload-time = "2026-07-17T22:51:01.129Z" }, + { url = "https://files.pythonhosted.org/packages/2d/3f/73e511ecf2496ceac57dd4ed8388efe2bcf0769338a2dbf242c8366ae87e/websockets-16.1.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56cd5fc4f10a9ea8aa0804bddb7b42506cf9e136046f3b4c27de8fec9e2ecba5", size = 180330, upload-time = "2026-07-17T22:51:02.603Z" }, + { url = "https://files.pythonhosted.org/packages/be/4d/2d0d67834092e354d2b0498f014a41249a89556bc406cf86f3e1557bb463/websockets-16.1.1-py3-none-any.whl", hash = "sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3", size = 173814, upload-time = "2026-07-17T22:51:04.184Z" }, +] + +[[package]] +name = "xxhash" +version = "3.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/63/71aa56b151a1b28770037a61bd4e461c2619cfc8866a4fcaf1548605e325/xxhash-3.8.1.tar.gz", hash = "sha256:b0de4bf3aa66363552d52c6a89003c479911f12098cd48a53d44a0f7a25f7c46", size = 86223, upload-time = "2026-07-06T10:49:58.937Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/97/1a8cebf0a6650417f08a18231590e2515aacd5ce39c3ad8b9e013ebd437d/xxhash-3.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:27a9e475157f7315826118e3f3127909a0fe25f1b43d3d3be9c584f9d265f937", size = 34695, upload-time = "2026-07-06T10:43:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/2f/cf/745b9bc0dd9c341bc074b5fc700db7bbef0f3b69ab21446492296ab37e50/xxhash-3.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b2ce44bf8f4a1d01f418b3110ff8dff32fd3f3e836c0e06333c3725f243fa6c", size = 32376, upload-time = "2026-07-06T10:43:41.97Z" }, + { url = "https://files.pythonhosted.org/packages/65/a4/8512a901b1d6ad4a9838d1b40385907a879d7e005a5afbec5d39526b69f6/xxhash-3.8.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:942bc86e9be6fdd6e1175048f5fe8f8fdaaf2309dd1323ef1e155a69cd346780", size = 217470, upload-time = "2026-07-06T10:43:43.572Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ad/0ffd8094ea29579bb2dc42fa74d08570e9ea3d95db561e6b1105e69b9ca6/xxhash-3.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0204701e6d01f64254e0e5ff4255812b1febe027ddd7dda63372e27f98b5e91f", size = 237799, upload-time = "2026-07-06T10:43:45.248Z" }, + { url = "https://files.pythonhosted.org/packages/b3/90/783c6b3f9336bd07449fe672be32cef6833633936bbfda8d3b23ee18d202/xxhash-3.8.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7dc4bdf008f77c88d544849c48c1a40faf25a5eff6cc466de2e8edc37c191fce", size = 262587, upload-time = "2026-07-06T10:43:46.733Z" }, + { url = "https://files.pythonhosted.org/packages/c4/77/ba0316a7c3e661b86830a47ae4987798616ce1b15af8d2a6358e2d89ef60/xxhash-3.8.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c566b123dce7e4867ca518434cdfb9f84e5023771235b2e3107a26c9a41cbd8", size = 238484, upload-time = "2026-07-06T10:43:48.453Z" }, + { url = "https://files.pythonhosted.org/packages/09/79/33001037c1cba90f4ced38b257161c13452024c0db44208f883e2e47f3fc/xxhash-3.8.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9f23083e1bd9d901f844af7a126727c486e7eada9a1a6791c8f7e73f94fac656", size = 469909, upload-time = "2026-07-06T10:43:50.188Z" }, + { url = "https://files.pythonhosted.org/packages/45/90/237eded9dd6ae638083294e5a9f77b317aaebd480a330806b39c192a0de1/xxhash-3.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64af54dd1c3a45a27c04942f9a1a4683322bdd127f4745cca4e02549c1d2d2bb", size = 217166, upload-time = "2026-07-06T10:43:51.816Z" }, + { url = "https://files.pythonhosted.org/packages/0b/6a/8cb439dc9920e1468e1c2d69ef77cbeb4be3b1ae9f4b5344c07a2b59af18/xxhash-3.8.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8ea8a141eeced4f6262ab6dd71c681ac546a558c30bb586abe087d814b5f85ea", size = 307593, upload-time = "2026-07-06T10:43:53.436Z" }, + { url = "https://files.pythonhosted.org/packages/ec/c6/c0607d373c8affea92101a3926c4fc8b026bcf8983e05fd58f3a0380ebf8/xxhash-3.8.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a98b2f95cab589e0f5e92c48431afb4d56238b8bf6668edcc66166180e9b509b", size = 234702, upload-time = "2026-07-06T10:43:55.042Z" }, + { url = "https://files.pythonhosted.org/packages/5b/cb/f4cfd456624c1f017858168b7ba9443dad810da8aac779a612658450e827/xxhash-3.8.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1b86ae798a976ccbc1d02af6ccb98f5b4d24756b1f65e995f11d10fe071f486f", size = 265749, upload-time = "2026-07-06T10:43:56.749Z" }, + { url = "https://files.pythonhosted.org/packages/33/f3/9006669c04b01206e21b2177425c649461ba188930a052c2f1728d6ec6a8/xxhash-3.8.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:81f4ed9ca9644bc95cd976bfe10f7a4cafab8ffdc3aed52877d4600e445be7ef", size = 221992, upload-time = "2026-07-06T10:43:58.12Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0b/7e6f3eaa05df5e0b6c94aa452b0672801f7031e602081f07fd441aaaaed5/xxhash-3.8.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:cb3fe820c27593f170770d6c8d791936cf6275d9269405fbb7b30a55363c10c8", size = 236899, upload-time = "2026-07-06T10:43:59.562Z" }, + { url = "https://files.pythonhosted.org/packages/da/cc/bbaee4987f3aab1d7b33bb430bb49e940646160af448b9167431c931126d/xxhash-3.8.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:7345007c12780985de4fd740148776d1eee18c0d41407c6fa1e48c5450304fe5", size = 297934, upload-time = "2026-07-06T10:44:01.132Z" }, + { url = "https://files.pythonhosted.org/packages/a7/97/6bee358660eb8b4f73c00b00b00bc616ebde00e1ab4b67c63486ce360648/xxhash-3.8.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:12eaeaa9ab8b9e6033a1fa5f6b338aaf55ff4df4bee11b59fd6ee03b19186ee4", size = 439315, upload-time = "2026-07-06T10:44:02.878Z" }, + { url = "https://files.pythonhosted.org/packages/c6/50/7e35275f39256bedace0c3cd5be3c72d4ac9d5aecf5e5fdc3530337cd263/xxhash-3.8.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e2a845687219ba3214126f14a8a5861f97c9e065a7d0b8252adb6df13eea86fb", size = 214038, upload-time = "2026-07-06T10:44:04.504Z" }, + { url = "https://files.pythonhosted.org/packages/59/2d/69d02d096ee50bdf3ef0d208d874f52c71b1aa6906066bce3c52fedb8bc6/xxhash-3.8.1-cp310-cp310-win32.whl", hash = "sha256:656256c9f9303e47f07d5cb8ae4468285370adfafd7ba48aea33a458e7697626", size = 31939, upload-time = "2026-07-06T10:44:06.213Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1d/e06fca9844919ca91c6587d530cfa1e745830ec73ad38f44f04b25d1bfb7/xxhash-3.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:27cfc2f1ed76f956f36dfe0c56e5f5a3e94cd91eb78b893f63e2ef2ae404fcdf", size = 32729, upload-time = "2026-07-06T10:44:07.621Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c2/800648d99039927b5a86d8ae02cd86a556a5ee1678d388216f6b44c8966c/xxhash-3.8.1-cp310-cp310-win_arm64.whl", hash = "sha256:c85949d02c85adf6d786eb94858e124989a632a4e65739835b2fc5761827fac3", size = 29215, upload-time = "2026-07-06T10:44:08.916Z" }, + { url = "https://files.pythonhosted.org/packages/8a/5a/05eaa129555f85476a3e16ff869e95f81a78bbe4647eef9d0229f515a317/xxhash-3.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602efcad4a42c184e81d43a2b7e6e4f524d619878f2b6ee2ba469011f47c8147", size = 34699, upload-time = "2026-07-06T10:44:10.14Z" }, + { url = "https://files.pythonhosted.org/packages/80/59/0df1133958b2228929355e022aab1e958c7b2c43e27bf7f59bc9edfa8a54/xxhash-3.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:131324f719957b988861714de7d6ddf57b47abec3b0cc691302ffeaba0e05e10", size = 32373, upload-time = "2026-07-06T10:44:11.353Z" }, + { url = "https://files.pythonhosted.org/packages/3e/bf/1cfda5b5e6bf26617812b4a31662ef2220d2ad04e0a55b8ff9eb36e56a5c/xxhash-3.8.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:db77278a6eddadbf44ce5aae2fee5ebb4d061f026b1ce2130d058cd4d7a7b670", size = 220284, upload-time = "2026-07-06T10:44:12.683Z" }, + { url = "https://files.pythonhosted.org/packages/70/93/45dc0ad7913b69e5b08bd039236cf628380e4c9cc76a8a4c6625a328e058/xxhash-3.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c332dd48b8cb050da2bb2a3c96d72b1664168650a250ef9718e423df7989e05", size = 240980, upload-time = "2026-07-06T10:44:14.297Z" }, + { url = "https://files.pythonhosted.org/packages/e9/02/f28ba7d17f2c1410ee397982c817ab1bd5b2701070c2d2c373539aad000a/xxhash-3.8.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a5cd96f6dcdf4fa657b2d95668d71d58455248f98712ecffaa9c528edf40ccae", size = 264526, upload-time = "2026-07-06T10:44:16.017Z" }, + { url = "https://files.pythonhosted.org/packages/5c/d0/f10651cec2c7981b20d693deae6bdfc438427d92be2db4ccabb6181f0021/xxhash-3.8.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c959f88160b13b4e730b0d75b459b7929fc0d2225c284c9683ac95d6feeeac6a", size = 241369, upload-time = "2026-07-06T10:44:17.698Z" }, + { url = "https://files.pythonhosted.org/packages/ff/40/136e0cbaf5db51e191423b1c98643593189f02b6cd90837bf64b19113d70/xxhash-3.8.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:027dee4355f3fcc41481650d846cf6cfc895c85a1ab7acd063063821a0df5b4c", size = 473186, upload-time = "2026-07-06T10:44:19.354Z" }, + { url = "https://files.pythonhosted.org/packages/4b/3f/6aa808a96bdc43dba9a740dec56c744526ee3c0019e32c75e810fa90ae4d/xxhash-3.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ad52a0e4bcc0ba956a953a169d1feec2734a64981d689e4fc8f490f7bf91af60", size = 220092, upload-time = "2026-07-06T10:44:20.956Z" }, + { url = "https://files.pythonhosted.org/packages/47/28/a8675e78a9ced96dab853416162268e10e05b452e95db7888cf69f58ac5f/xxhash-3.8.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5d3dfb1f0ff146da7952867a9414f0c7a29762f8825a84879592612fd6139342", size = 309846, upload-time = "2026-07-06T10:44:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/89/0f/7fe4d4ef4e69f0033e012396ee2a115886bca7b10b7e45ce398626436bfc/xxhash-3.8.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4482380b462ca9e59994d072a877ecadd1cf51102daeeab2db696f96ab763723", size = 237659, upload-time = "2026-07-06T10:44:24.135Z" }, + { url = "https://files.pythonhosted.org/packages/38/8f/83e9e31d4ed57fe963b99cb5b13a23e3e0f0dad1885aa0ebd2a7819dd423/xxhash-3.8.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:950ac754d16daea42038f38e7465eb84cda4d08d7343c1c915771b29470f065a", size = 268737, upload-time = "2026-07-06T10:44:25.875Z" }, + { url = "https://files.pythonhosted.org/packages/57/79/7e7de46dbe5d1f49afc96a0bc42e6b8df24eae3d6bad6007b99e42f48430/xxhash-3.8.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0418ec8b2331b9d4d575fc9284427e8e69449d7172e99e1a86fcdd1f51a0a937", size = 224955, upload-time = "2026-07-06T10:44:27.777Z" }, + { url = "https://files.pythonhosted.org/packages/ec/34/b8540839e958d5ef5c6101af6f16032109e7099698ae8edbc8dcefe4d8f4/xxhash-3.8.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:32a94ad2763e0263d9102037d349002c3d3c401e42770542c3eeb4801f311661", size = 239653, upload-time = "2026-07-06T10:44:29.422Z" }, + { url = "https://files.pythonhosted.org/packages/ce/87/a735d05f7f859354acadabe470ff40e2c46672275f96dcf096a761904def/xxhash-3.8.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:89b11a5cdd441aa463f6d34ca0241602bc09b001a76994b6059828494108c673", size = 300213, upload-time = "2026-07-06T10:44:31.401Z" }, + { url = "https://files.pythonhosted.org/packages/98/31/3e1cb020237b68117fc212dc5f9753b87f865b4dfee7c1ce62d0836955b5/xxhash-3.8.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:09a204dd4bb0823daf938cdd0dc8057d5f1e14fe3cbde929424255f23f9de872", size = 442508, upload-time = "2026-07-06T10:44:33.023Z" }, + { url = "https://files.pythonhosted.org/packages/23/bf/f80090622141cc734b039ce1d15ce3ff6dced375e9680249bf5b9b8c6bf9/xxhash-3.8.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e710ad822c493fb80a4fbc1e3d0a807b1422cb90adbe64378f98291b7fa48fef", size = 216853, upload-time = "2026-07-06T10:44:34.983Z" }, + { url = "https://files.pythonhosted.org/packages/a6/a3/60157acecc307b238d3651c2483168e224b48b23a36ae6d6903588341d80/xxhash-3.8.1-cp311-cp311-win32.whl", hash = "sha256:5013be3bea7612852c62a7437f3302c1cfb91ca7e703b194459db0b2b2e0d792", size = 31936, upload-time = "2026-07-06T10:44:36.542Z" }, + { url = "https://files.pythonhosted.org/packages/59/5c/ef70c418d878d187b8da56d4cdc06aea6cf5e456b301e96e51e1d2cc8625/xxhash-3.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:f377012b86c0a23a1df0cf5a1b05aa7187649e472f71c7892e5f2c2815bbe74f", size = 32724, upload-time = "2026-07-06T10:44:38.177Z" }, + { url = "https://files.pythonhosted.org/packages/2c/25/f008db952cec6b2a26445b456eeed2ebebd65e08e848ebe09ed6ac0634e6/xxhash-3.8.1-cp311-cp311-win_arm64.whl", hash = "sha256:836f11d4474d3228e9909d97216faa4f7505df41cfaf3927eb29809de785a78d", size = 29212, upload-time = "2026-07-06T10:44:39.577Z" }, + { url = "https://files.pythonhosted.org/packages/42/91/f65c34a7aa7b4e7cf4854f8e6ef3f7ee32ceac41d4f008da0780db0612f6/xxhash-3.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e6e49370822c1f4d8d90e678b06dbcb08b51a026a7c4b55479e7d467f2e813bc", size = 34680, upload-time = "2026-07-06T10:44:40.932Z" }, + { url = "https://files.pythonhosted.org/packages/57/04/b10a245a4c09a9cfa88f8e9ae755029413ad1ac17047f9a61906e5ae0799/xxhash-3.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:220d68130f83f7cc86d6edfdeab176adc73d7200bf3a8ec10c629e8cf605c215", size = 32397, upload-time = "2026-07-06T10:44:42.196Z" }, + { url = "https://files.pythonhosted.org/packages/3a/75/45ab795b5945b6388583bd75202106af505537935566c15a1577797a0e08/xxhash-3.8.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4d365ee1892c1fa803536f8c6ce21d24b29c9718ec75eb856095c07830f8c478", size = 220549, upload-time = "2026-07-06T10:44:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/13/44/5ba2bd0a14ddf4193fc7d8ec29625f659f22c06d60b28f04bf46305d8330/xxhash-3.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:852bfe059720632e2f16a6a4745e41d20937b2bf2a42a401e2412046bb6971cc", size = 241186, upload-time = "2026-07-06T10:44:45.534Z" }, + { url = "https://files.pythonhosted.org/packages/23/32/c4147def4d1e4538b906f82731e0ba23424377fc50a7cddd03cd284c8f63/xxhash-3.8.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2f8c25a7061d952de589bd0ea0eaadee32378ff83dd6a677b267f9cd86f401f8", size = 264852, upload-time = "2026-07-06T10:44:47.199Z" }, + { url = "https://files.pythonhosted.org/packages/6c/bd/71ed14f4f0318bb7fd7b2ec51999413487fa8da8d41208e84d50d1ef0f98/xxhash-3.8.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:868a8dcaff1a84ba78038e1cef14fc88ccf84d9b4d12ea604696e0693296aa56", size = 242663, upload-time = "2026-07-06T10:44:48.846Z" }, + { url = "https://files.pythonhosted.org/packages/91/09/70af22c565a8473b3f2ae73f88e7721af281bc4a575236dbd1970c9f76f6/xxhash-3.8.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6536d8677d2fff7e64cd0b98b976df9de7aee0e69590044c2af5f51b76b7a170", size = 473510, upload-time = "2026-07-06T10:44:50.695Z" }, + { url = "https://files.pythonhosted.org/packages/18/96/34db781c8f0cf99c544ca1f2bc2e5bf55426e1eb4ca6de8ea5da56a9f352/xxhash-3.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:82c0cedd280eab2e8291270e6c04894dbc096f8159a39dcf1807429f026ca3cc", size = 220469, upload-time = "2026-07-06T10:44:52.422Z" }, + { url = "https://files.pythonhosted.org/packages/93/5f/9a184f615fa5a4dce30c01534f62946ce5a11ce40f73785cbd356ccabaa9/xxhash-3.8.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:daa86e4b68221d38e669bb236ba112d0335353829fb627c82e5909e4bbe8694c", size = 310290, upload-time = "2026-07-06T10:44:54.142Z" }, + { url = "https://files.pythonhosted.org/packages/a9/dc/9b9a9789011ee153723a5eb9e7dd7fcbae2ba9b3fe7a729249ca7c252056/xxhash-3.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2bc7113e6f2b6b3922dd61796ca9f36af09da3773898e7003038dc992fc83b8d", size = 238173, upload-time = "2026-07-06T10:44:55.693Z" }, + { url = "https://files.pythonhosted.org/packages/ec/4d/71c6005ada9dcb608a4e1902e8475ecadb5f3fbfa04e1e244d276a2d0c43/xxhash-3.8.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5eed32dad81d6ba8e62dc7b9ffa0500199385d7810a8dd9d4eafaceb8c6e20bb", size = 269026, upload-time = "2026-07-06T10:44:57.424Z" }, + { url = "https://files.pythonhosted.org/packages/2f/87/d6c036ba25dfbd9c8633be5aa86fc9474bbb9e2c68212a841d090abe7344/xxhash-3.8.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:83697b0ea1f10e7f5d8b26a4906fa851393c61546c63839643a2b7fe2d868061", size = 224970, upload-time = "2026-07-06T10:44:59.085Z" }, + { url = "https://files.pythonhosted.org/packages/48/62/4c1f035a41c5752aa05e195b6c904c07b94fe9061a16de61e72a6e6b135f/xxhash-3.8.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:36fc69160465ae75c6ec4ac9f781bb2aa16ae7ff869e73c26fee85fbb11b9887", size = 240820, upload-time = "2026-07-06T10:45:00.746Z" }, + { url = "https://files.pythonhosted.org/packages/da/14/d39d565069b87e86d21a2af2a31d04db79249d25aa8d5b62959056a89857/xxhash-3.8.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:445e0f5a31f2f3546ae0895d4811e159518cdc9d824c11419898d40cfadb677e", size = 300619, upload-time = "2026-07-06T10:45:02.716Z" }, + { url = "https://files.pythonhosted.org/packages/13/22/75467acc887edc8cf71c97ab1708feb3df7a88bda589b9f399765c6387d2/xxhash-3.8.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:dfe0580fbfd5e4af87d0cc52d2044f155d55ebd8c8a93568758a2ea7d8e15975", size = 443267, upload-time = "2026-07-06T10:45:04.653Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b6/1da3baa5fa6ef705e3425fddd382be7dfc4dfba2686df90a20f16e9c7b1b/xxhash-3.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:095e1323fa108be1292c54c86da3ef3c7a7dc015b105a52133973bc07a6ad11a", size = 217338, upload-time = "2026-07-06T10:45:06.304Z" }, + { url = "https://files.pythonhosted.org/packages/78/dd/b5295a9f97484e7a1c2b283a742ca45e3104991c55a1ef670dde161829ba/xxhash-3.8.1-cp312-cp312-win32.whl", hash = "sha256:bf28f55e427e0483acb1f666bd0d869b6d5e5a716680c216ad7befe3d4cfba2e", size = 31970, upload-time = "2026-07-06T10:45:07.823Z" }, + { url = "https://files.pythonhosted.org/packages/ec/31/3fa0b807d7e21515cd975e7fe5c039d52ac3e9401a96d6ad68dae6305215/xxhash-3.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:2256e80e4960ee282f63428adb349cb7f8bd8efe4db770d88eb815f4b9860724", size = 32741, upload-time = "2026-07-06T10:45:09.42Z" }, + { url = "https://files.pythonhosted.org/packages/b8/05/86feada74e239600e6875aa507afb40482a89b92700aa74a92da83bdcb77/xxhash-3.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:9df56e6df96a60590935e22373041cccc91fd55858763dcffb55bf63b3a2b396", size = 29234, upload-time = "2026-07-06T10:45:10.809Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8c/446bb782cd0d27007a917b5569a08dd73219c3e8d6e459014db104b27bdb/xxhash-3.8.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:3c682fcd96eb4bf64be32a4d95f96107e1588005831bd8a741b324fdda01b913", size = 38562, upload-time = "2026-07-06T10:45:12.425Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ec/c0c45627eaa6be7a5d6117423adf8f7a15b17ee74b4b17072cca5959a225/xxhash-3.8.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:036a024d8b9c01f70782e09ed98d532e76fd23f950ae7154bd950fe94e90ebec", size = 36656, upload-time = "2026-07-06T10:45:13.932Z" }, + { url = "https://files.pythonhosted.org/packages/f6/94/8324c04cc7597154caaeba6c094e01fbd2e7601d01e7a13eea9f5420e77b/xxhash-3.8.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d6a5c0bce213b23b0166fe0d35bcbbe23ce4b968f257cc7eb6fd57cb8e1e6297", size = 31169, upload-time = "2026-07-06T10:45:15.687Z" }, + { url = "https://files.pythonhosted.org/packages/40/a4/beb6bb26e1184e126dbe7a5682330214ef54dcfbf882078aa9f4b5428d42/xxhash-3.8.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:5177aa44eddaa97c6ef0cc00c6d540edb64d51781d2f8fb941612ec61a92c9ed", size = 32177, upload-time = "2026-07-06T10:45:17.035Z" }, + { url = "https://files.pythonhosted.org/packages/56/0f/fc4c92a5a528f839b34b6419b2e53c8597f2a629d5a1f5d721f65bfa1fd6/xxhash-3.8.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7801b7223db017b9c0c9ccf37e44524edb35a1544a1c032add22c061c6af0276", size = 34642, upload-time = "2026-07-06T10:45:18.39Z" }, + { url = "https://files.pythonhosted.org/packages/d4/58/edbfb141d4000767ac6a9694f8ac0763e2c2e983e65c9e31620ba56e2667/xxhash-3.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9e80238259655bf69d7bcd08226a970d7f42605f3157786bfa76dd13472d7fa0", size = 34684, upload-time = "2026-07-06T10:45:20.033Z" }, + { url = "https://files.pythonhosted.org/packages/07/3f/5072f1f0f5714186f0ac2a0b5a4929ce30d4b845e94886b6c01b6ebda0be/xxhash-3.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bcab50a389cc04d87f90092af78a6adba2ab3deca63175a3344ca83514045315", size = 32401, upload-time = "2026-07-06T10:45:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/49/c7/802ea2f9c2ed59219934d6d65c470d502b1788043eae277a52af8658bda6/xxhash-3.8.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a2489d3a776fa380cb8e71f54c7fda268a9baf3de9b1395093fd280f95735907", size = 220617, upload-time = "2026-07-06T10:45:23.234Z" }, + { url = "https://files.pythonhosted.org/packages/99/a8/e10488efd31fcb13fcd6acbc6e788f10c6f8e3a0cc4ae3eb89dc19c55a12/xxhash-3.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32ab1e5432690276e71192be7401b55f96db2d0eedea5d44eb1f164505669cc0", size = 241295, upload-time = "2026-07-06T10:45:25.364Z" }, + { url = "https://files.pythonhosted.org/packages/18/cc/14180b17d44892a631f8ae7323c30bfbb1328efc8209e528a480293528ac/xxhash-3.8.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b30e01a0b97a4bc3f519a4d7a82da3dc53251fb0de5eeea8660dcd4ff094c0c2", size = 264688, upload-time = "2026-07-06T10:45:27.09Z" }, + { url = "https://files.pythonhosted.org/packages/a9/72/a14019d0c5f6c41ee407a503036ae32787c91325ca218a96a9b5627be651/xxhash-3.8.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1f44275ddb0978b67a58a951501903f04d49335a91f7681c9ce122ecb8ccb329", size = 242740, upload-time = "2026-07-06T10:45:28.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/08/92550e556c6fcfcb96c6a336945eb53a431ed43120ed749636debb16c5cf/xxhash-3.8.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e3b87cbd974512c0c5fc7b469c36b2cdc9ee6d76e4ec78bccb2c7184611c49b0", size = 473599, upload-time = "2026-07-06T10:45:30.524Z" }, + { url = "https://files.pythonhosted.org/packages/29/83/e361d3c1acd1b21e1d489616de6fa4aaf843365d8179f612e3743eac20a9/xxhash-3.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98ee81b4b7f3023c9cb04a78cc67610baffcb5812d92f2096cb5a5efc6f19437", size = 220559, upload-time = "2026-07-06T10:45:32.979Z" }, + { url = "https://files.pythonhosted.org/packages/05/01/006a4243c2c2a6831827f9999f6d1c23feeef100eb023c1f886022a00bf3/xxhash-3.8.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2666f059a1588a99267e33605365ed89cea92f424b3522806a9f4bd8ad2e3d62", size = 310383, upload-time = "2026-07-06T10:45:35.875Z" }, + { url = "https://files.pythonhosted.org/packages/d8/20/af388e8bf9f9a0f89eeef7d2a1935d176ee1c20bc6adeda05035879379cf/xxhash-3.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0093cf7eeb91b84776e8742113afa4bdf47533d36cf719179aaaf1f56f6f8bf", size = 238228, upload-time = "2026-07-06T10:45:38.02Z" }, + { url = "https://files.pythonhosted.org/packages/63/6b/4666579a87eebd1744663c404297355fa0658617b015cedfa58810ee7036/xxhash-3.8.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3a800912a2e5e975d4128969d645c4a2a80aa886ccd6c9b1c6f44529e327e8cf", size = 269137, upload-time = "2026-07-06T10:45:39.954Z" }, + { url = "https://files.pythonhosted.org/packages/de/d3/e963a8a46f900a137d91b02144d8ea07a8f812971b138204a3b2f8b8e55c/xxhash-3.8.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0fe37f72a207223d22a4eddc3149d4298993385aa9daef25c039246ca5a309f3", size = 225068, upload-time = "2026-07-06T10:45:41.718Z" }, + { url = "https://files.pythonhosted.org/packages/aa/80/9d181dbcde4b0fe48375f48833a5832d4b8cd2b349b15110c92ee472d874/xxhash-3.8.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5db43f249b4be9f99ef4b967863f37094fb40e67effafb78ba4f0356b6396104", size = 240874, upload-time = "2026-07-06T10:45:43.414Z" }, + { url = "https://files.pythonhosted.org/packages/39/15/ce3ab5a1cd27ead25a5196e55a7284220f6ad6e316da494ffd900b2b600f/xxhash-3.8.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c4ed42965c2cd9081f011be22f69d0e65d3b6165fe7734072fd0c232840bbd4e", size = 300702, upload-time = "2026-07-06T10:45:45.135Z" }, + { url = "https://files.pythonhosted.org/packages/96/c0/2281a8ab5f2a62dbf57a23c58a01ccc1d98abf40f71193c8a81f59e759b5/xxhash-3.8.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3557bec8fcb11738a8920eeb68974bc76b75262f6947998d3147954ce0a4b893", size = 443351, upload-time = "2026-07-06T10:45:47.188Z" }, + { url = "https://files.pythonhosted.org/packages/81/2e/071a58c1a53a52d4f7a3aa0987be0c396dffd40da8204805fe1b130a81f4/xxhash-3.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00de40f3b42240db23a82a5c682b55d7263d84a26a953240c1aee463409660e3", size = 217396, upload-time = "2026-07-06T10:45:48.925Z" }, + { url = "https://files.pythonhosted.org/packages/68/44/36ab58134badd9d3433fc7b53c4ca8d113d8e807782885628640f8297a4d/xxhash-3.8.1-cp313-cp313-win32.whl", hash = "sha256:b5196cc2574cfec572a5f3fb7cfa5ade27305ae3d06516a082132441aff4c83a", size = 31974, upload-time = "2026-07-06T10:45:50.591Z" }, + { url = "https://files.pythonhosted.org/packages/96/2a/2a0b84798448e766f7b89ceed073cb0cb5a43fc9ebbacbdea74a38de18e3/xxhash-3.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:538f5f865df6cd8c32dd63158a0e5b4f5dd08d732a7da8b7228a5a0776c8ce55", size = 32739, upload-time = "2026-07-06T10:45:52.221Z" }, + { url = "https://files.pythonhosted.org/packages/d4/60/bb51dbf7c363ff88a7cbd50b7959718219577ef44d7cf255929ffc4a2194/xxhash-3.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:a6617f30641ba0d8baa1635fbefb1dffc5165ec36d26921bd5cee13497cd937a", size = 29239, upload-time = "2026-07-06T10:45:53.714Z" }, + { url = "https://files.pythonhosted.org/packages/56/d3/827ca123c2ee5443a6aaed3c5dd199237dc2f010e2bebd7ec09ef36f3a5f/xxhash-3.8.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:bfcd82852c62a60e314670a9602de354c4460f8adad916e2e42a20860c7870bc", size = 34964, upload-time = "2026-07-06T10:45:55.535Z" }, + { url = "https://files.pythonhosted.org/packages/05/67/67ae2a3ccdeb8b8ef025d35aee9edd1d26c3abe5051d47da9286232afbf8/xxhash-3.8.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:08ea2081f5e88615fec8622a9f87fbe21b8ea58d88cfc02163ca11026ee62a92", size = 32697, upload-time = "2026-07-06T10:45:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/38/5a/3d3994346e1f45493679cb5c1ffc2bf454e410e9d1e8a662d253becee91e/xxhash-3.8.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2e32855b6f9e5b18f449e59d45e3d5778bdeb660632ef2693cca267a11246c75", size = 225954, upload-time = "2026-07-06T10:45:58.897Z" }, + { url = "https://files.pythonhosted.org/packages/3f/2c/53169270309b7cd8e05504e07fe123bac053b89d00ac63617faacf0a2ec0/xxhash-3.8.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6e088bd7870775624256a0d84c2a6714afd223b2eeb56b0ca58398e52a32fda", size = 249776, upload-time = "2026-07-06T10:46:00.977Z" }, + { url = "https://files.pythonhosted.org/packages/70/e0/5c551d8d592f944506f7c5185e210255c15e672a3c6008c156a1bd9b775e/xxhash-3.8.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:72eb5ae575cc7ae2b23f6f8064a8b10f638c7149819ae9cc6d20ebd4d37a1629", size = 274776, upload-time = "2026-07-06T10:46:02.869Z" }, + { url = "https://files.pythonhosted.org/packages/a0/2a/d3a762270cee2d7bcd0e25e28c623e5f3f5c0dc637b66e3e47dd5b0bb3f0/xxhash-3.8.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d0b48cdf690a64cedf7258c3dc9506cc41fc86edd7739c40e3098952265dc068", size = 252056, upload-time = "2026-07-06T10:46:04.688Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8f/b78e4373b2cb6d1c42af60ea2d7e9146ad0710b239ac7f706d5d31d5bb98/xxhash-3.8.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb9e256a357dfcede7818c6d34e70db2d6b664394803d1de4b6984d2de76c0f1", size = 482108, upload-time = "2026-07-06T10:46:06.498Z" }, + { url = "https://files.pythonhosted.org/packages/e6/0d/642d923336ea61a15f8ce64fc7e078729e6e06c3a026e517fa79b2c23b7a/xxhash-3.8.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51f71a6e2ad071e70c937e41fcb6c19f82c3f9f49831eba850ed4a106ffbb647", size = 226739, upload-time = "2026-07-06T10:46:08.598Z" }, + { url = "https://files.pythonhosted.org/packages/a6/0a/a37d6da6427d45a8d23e3ee3a0ca9c9d4a90364849c6637fe2963a755f9b/xxhash-3.8.1-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e4a6443968c4e8dc69967e12776776a5952c119cc1bd94168ad1c5ad667c2be1", size = 319658, upload-time = "2026-07-06T10:46:10.504Z" }, + { url = "https://files.pythonhosted.org/packages/4a/51/ebbd40da8a3f1bc53b4b7a9a87f8e28bd95c5f21bc14b8a57860cf367d1b/xxhash-3.8.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:714503083a1f2065c9ad15340dd49ac8a8e948a505a705ffa1750cb951519113", size = 246059, upload-time = "2026-07-06T10:46:12.634Z" }, + { url = "https://files.pythonhosted.org/packages/24/4c/d9014030147e1f0bb26e7da47aa240dd9ec61c763c573e558111d869f8e1/xxhash-3.8.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:77f74e45a1e5574bbbf80181c8027b3a4c65c2248fffbd557bd596fff13102f9", size = 275535, upload-time = "2026-07-06T10:46:14.614Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/caee2db41fadcd5a25aa4323213f9afec5a8586d4e419241e3d659362bd7/xxhash-3.8.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e0e1b0fb0259c1b75d1251ac0bb4d7ab675d36f7a6bf4ba6aa630dae94f9ffa", size = 231292, upload-time = "2026-07-06T10:46:16.452Z" }, + { url = "https://files.pythonhosted.org/packages/0b/60/f52f08bcdc904c4514ea5c25caa19e9f3214144434a6ff96dc82dc1cbddd/xxhash-3.8.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:10e4393ec33633c2f05ad01869e546ad080b1a18f2650503731f153774608b31", size = 250490, upload-time = "2026-07-06T10:46:18.318Z" }, + { url = "https://files.pythonhosted.org/packages/24/a0/94dc7ae310838f250669c6ad7168e6d6fca17d49dac1053f06dc232c4a56/xxhash-3.8.1-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:b3ba794c3d885803db6c3116686923f1ec13bc86e621e169a375282b63ea1cc6", size = 309861, upload-time = "2026-07-06T10:46:20.503Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f9/adeead7d0eb28cdfc2832544ea639ffbc6749ccde47a8e228d667459182e/xxhash-3.8.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:57189a69c0891e4818853feaa521c972d22c880a001453addea015f48e3c3398", size = 448739, upload-time = "2026-07-06T10:46:22.79Z" }, + { url = "https://files.pythonhosted.org/packages/04/a4/22ec0e07db57d901c9298ae98aa3cf2be45bafded6f07c13131e85b89032/xxhash-3.8.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d59e71153fe9ff85648d00e18649b07e9b22c797291abb7e27274fa06df8b838", size = 223657, upload-time = "2026-07-06T10:46:24.831Z" }, + { url = "https://files.pythonhosted.org/packages/94/32/8a9531f37b59e5a013003db7cb7414baf4ce7e0e1268e0d5947cd3d6a2df/xxhash-3.8.1-cp313-cp313t-win32.whl", hash = "sha256:5b96f0024e9840f449bd91b2d005c921a4b666055a0d1b6492463799f32aae22", size = 32377, upload-time = "2026-07-06T10:46:26.86Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/2ca45fd7f671de5f81fc297ef1c95080b40c86ec6be0cc6034b8f7707ac8/xxhash-3.8.1-cp313-cp313t-win_amd64.whl", hash = "sha256:37d5a56c36dcc0b9a87b814cd992598d33863ff683749de6c86081f278d5e629", size = 33274, upload-time = "2026-07-06T10:46:28.39Z" }, + { url = "https://files.pythonhosted.org/packages/5a/54/20d7163463ddb6438b73a427d1655a77a502cf9b9b0c3ada3599629d9c0a/xxhash-3.8.1-cp313-cp313t-win_arm64.whl", hash = "sha256:6696c8752aded28ff3b16f33ef28ce28fb5d209b80c206746f943199fcf5fd65", size = 29375, upload-time = "2026-07-06T10:46:29.962Z" }, + { url = "https://files.pythonhosted.org/packages/c2/8b/df2ba04f22a6cd6b39f96a6577329a8471a55c90ef8d8e2f7c102363613f/xxhash-3.8.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:9db455cb649dcfe4504d6d68a6d83a7315a99a3ca59871dc3ff840671f99adba", size = 38430, upload-time = "2026-07-06T10:46:31.496Z" }, + { url = "https://files.pythonhosted.org/packages/b2/4f/6a059e8ad3ca8deedc91dfe335b211204900895152212c03ebbe721de68b/xxhash-3.8.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:affb37f152e55b5e4494bb9d0107f7bb08515c6704fbed82d9f61214d74adc17", size = 36558, upload-time = "2026-07-06T10:46:33.078Z" }, + { url = "https://files.pythonhosted.org/packages/cb/95/40be178205acce092ae418feb20ac737b32a02c7b864926ed0717354c9f8/xxhash-3.8.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:460261045936975193bfd20549a0de1cd52a33b405cbb972f0d80940c42266cd", size = 31181, upload-time = "2026-07-06T10:46:34.793Z" }, + { url = "https://files.pythonhosted.org/packages/3f/89/2da4dbf051bafa156c0e3f12012db2b0ac3b84ff37ca1f021f6bfffcdfbb/xxhash-3.8.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:38c887aedb696ef8bca19983206d270848558cfae4a91afa6a2fb05dde58ffc5", size = 32192, upload-time = "2026-07-06T10:46:36.393Z" }, + { url = "https://files.pythonhosted.org/packages/7c/4e/e000bbae3566bc8e0be771a8a0f294aa99075e3f0bc4ef43922ebffdebc8/xxhash-3.8.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:594131ce1aad18db3689781f806db1b065cdaa04f4df36b4c038d2013aefd0bf", size = 34691, upload-time = "2026-07-06T10:46:38.1Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4a/ea954aacc7d1c8711880ac2b55da94429a9b4296b151c4fc0966549ca1ee/xxhash-3.8.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:78c794b643d214f1522e7a288bcf5a2de120d26cd170516749a4009dc92722c9", size = 34807, upload-time = "2026-07-06T10:46:39.647Z" }, + { url = "https://files.pythonhosted.org/packages/ca/29/df598e738ff37558ac627264deb2e560902d9bf7f46d3bd5175c9eee593e/xxhash-3.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:af0c9fedc4a2c24e8664953882fe8185f3790b8338c9c700f76f5ad660817711", size = 32410, upload-time = "2026-07-06T10:46:41.359Z" }, + { url = "https://files.pythonhosted.org/packages/59/9c/81ab40e7d33ada0b3df5d1bc884894d15dbf4f805cd645b685e4606bb8e0/xxhash-3.8.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:115772daeb71b2f3b9381177017f53e6cf3f3439c840737fdabd21aba6e54920", size = 220564, upload-time = "2026-07-06T10:46:43.463Z" }, + { url = "https://files.pythonhosted.org/packages/fd/6f/62ae6f5c8606320a0e2a41c2dc8c6d91cc5d63d0f84dd9582e9543779dd8/xxhash-3.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:000435984a0469b0f822fe76f35bddea0f96a4d6521b3339a60a6428cdee1edc", size = 241462, upload-time = "2026-07-06T10:46:45.509Z" }, + { url = "https://files.pythonhosted.org/packages/15/a1/9c3a0ec6cb524396f551eddd102a76690a795494eb9784fc67542b0daa37/xxhash-3.8.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2f1c68394818e0595569c2ff3cbc1e6d5a36a434e796f5c526b987b80c8a8c62", size = 264491, upload-time = "2026-07-06T10:46:47.655Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/700a4674e4308eb59d2fdb973977e82eae231bea5044753fee5c9eec0e0c/xxhash-3.8.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:46b39976d008e2a845758650f0ff7136bca004f40da0c8798bd37ac37860154f", size = 242905, upload-time = "2026-07-06T10:46:49.857Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8a/72d9874375c8d4cbc64a8cd1d659d5695a8765c3db82efa82dc5bd9f14d0/xxhash-3.8.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d5006c65ec507a333479e76e00e2c368781f16c24ededa764763956b32a0e93e", size = 473873, upload-time = "2026-07-06T10:46:51.953Z" }, + { url = "https://files.pythonhosted.org/packages/03/f0/6db07590ed7e0a77f186ef0bcea8d52553bf1ba57833e09467a2411f0f2d/xxhash-3.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c31a2649bcf1fe97cf11c79848d761df33ac46b3896942d31b640557b486ff6b", size = 220765, upload-time = "2026-07-06T10:46:55.41Z" }, + { url = "https://files.pythonhosted.org/packages/8f/10/00d12d8b8beabbf49a8bbc626fb9f40445145a8887eb41a6acfb69149ac4/xxhash-3.8.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8f759eed402448c2bdbb492e4fba1f20668ffe29688605ea61f0f67f9e4e386d", size = 310478, upload-time = "2026-07-06T10:46:57.729Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f9/12a82394eefb0f185d15a7f7b9f627c61c475a72dd83718436a5b84b42ac/xxhash-3.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b5f97ecfede10d5b2870383620e2d25c8561e217c7bf9081073802b54248d2b", size = 238393, upload-time = "2026-07-06T10:46:59.87Z" }, + { url = "https://files.pythonhosted.org/packages/20/f3/53f963e320b9ce678337aa7273f39ce692ded8b99e3d22a866ec722159ab/xxhash-3.8.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:1da930bbcac3e8fbe2191850e2abb57977a99348c12c4b385e1058ac1b0a9ecc", size = 268704, upload-time = "2026-07-06T10:47:01.806Z" }, + { url = "https://files.pythonhosted.org/packages/0a/50/5b5badbd87c82d9f9b5f58ac74a3f29ef08f6fc387b324b8fd482450b862/xxhash-3.8.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:747476436f6891b9773374ce8d48edcc8b12cb5b61b67c6fb6289633747d088f", size = 225015, upload-time = "2026-07-06T10:47:03.784Z" }, + { url = "https://files.pythonhosted.org/packages/30/93/3ca68265afe7b4e69435e08a7b6a1d9d0f2a071e889da1f8041ed00fe878/xxhash-3.8.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:4ef09bbc2519a93cd0f95f2ceb5f7b85919dffea643278e02362bf40e3c4bed1", size = 240951, upload-time = "2026-07-06T10:47:05.816Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a6/27e19670c40f46b5e76e11f2f4713d21054804568425d870670e757172ad/xxhash-3.8.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:a5eed9d41995a83f3332b4e3396abb7f433cac584222bd7e305b606d8353861e", size = 300751, upload-time = "2026-07-06T10:47:07.95Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fb/b33e27689959fe7ed2ae0b830af41560d65213943983afa9db3a8d481bce/xxhash-3.8.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:53f3ed9118397074ff63a79b66b7fec1c84c782eecde35c5bc94e420a971c231", size = 443480, upload-time = "2026-07-06T10:47:10Z" }, + { url = "https://files.pythonhosted.org/packages/26/60/0e0d973be5fe280753ef02fbc89349492ad6e903bf1dcb870b668f94b662/xxhash-3.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d247b34bf433c92b41689318fd25d246313cab2275a6a47e2efac178b80d6efe", size = 217657, upload-time = "2026-07-06T10:47:12.196Z" }, + { url = "https://files.pythonhosted.org/packages/ad/68/c9e3ecef4a9a417d464cb5bd200aa12f73192dee677901b9e08e0ad0d1bb/xxhash-3.8.1-cp314-cp314-win32.whl", hash = "sha256:d58ce8b6cfa9c4d2f230557f69caf7c06369e318015d0b19485095bc2c5963ab", size = 32690, upload-time = "2026-07-06T10:47:14.204Z" }, + { url = "https://files.pythonhosted.org/packages/d7/99/e9e44588c0b62837bbec5ba7927816de0afa03406b1a0b6c7a7e1d1a30a0/xxhash-3.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:6cee733fe4ccb1737e0997135283c82341e5cfa9cf214b165f9087fb663aaf4f", size = 33460, upload-time = "2026-07-06T10:47:16.021Z" }, + { url = "https://files.pythonhosted.org/packages/45/2b/64f36d86380b3657ad9031967ab814f3ef31307174650853f69c18932ebc/xxhash-3.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:58346024d47e84f7d8b3e7f5d6faa1d58acbbe49a8771497872059f58c1d8ea5", size = 30092, upload-time = "2026-07-06T10:47:17.81Z" }, + { url = "https://files.pythonhosted.org/packages/92/cb/18b64bff88c58a0ca209dc533e63cf02d7ae5aa6b1b9a9fd14e81b5dbd60/xxhash-3.8.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:01cab782f8a0a05ecad2c63d7ef10f7ab475f660e0d6419d069418c14d88de7c", size = 35024, upload-time = "2026-07-06T10:47:19.821Z" }, + { url = "https://files.pythonhosted.org/packages/af/1d/72d8a70520e5dcddb472ea0486d299da3240745a10658290cd7b5690ede2/xxhash-3.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:717b12fdc51819833704e85e6926d76981ffa3f780ef92e33ebb8b26d46bb230", size = 32697, upload-time = "2026-07-06T10:47:21.649Z" }, + { url = "https://files.pythonhosted.org/packages/9c/b8/e041f555903c56db3d0a731b3d72a6575d75e0ed868b1bd2e5176111ca44/xxhash-3.8.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ec55d80e9b8a519d742669e0b49e8ce9e6747be42bf3c138158b6543a9c8e489", size = 226044, upload-time = "2026-07-06T10:47:23.612Z" }, + { url = "https://files.pythonhosted.org/packages/3a/7e/5cdcf06bf6ec4b5d2ac073feb23432ec1d603fd438864cbd2c09c7cb45e1/xxhash-3.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98d8ac1129b4dd39098cffed94d1284aceb61c3aa396757ccc736ac392e4cee5", size = 249899, upload-time = "2026-07-06T10:47:25.812Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c0/eb7e059cb5e1dba11fd30d2fdf882f56e5a417a3eaa43669d43623767f45/xxhash-3.8.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3bc0fa90830df1e1277f33cc6e55de9990b83c0319fd8c7412866cfde38b025e", size = 274892, upload-time = "2026-07-06T10:47:27.931Z" }, + { url = "https://files.pythonhosted.org/packages/66/74/a600aaf7cd39957fd1510adeedb1749c1e7eb82bd632a1153d9c664c3135/xxhash-3.8.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c73b6f652f0745425aa6378319c331293b5341756262e9408ed3d45f183375e6", size = 252243, upload-time = "2026-07-06T10:47:30.288Z" }, + { url = "https://files.pythonhosted.org/packages/ad/04/78d88fa75a6763e5d09bf1b947a392a27988903381b219006f92f3c68fc8/xxhash-3.8.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6114692261eff4266386cdec0f7d87eee24e317ab397c218b7ae6a76b4c6339", size = 482191, upload-time = "2026-07-06T10:47:32.45Z" }, + { url = "https://files.pythonhosted.org/packages/7f/06/07a8aea1108d682de8791ce608cdf367d75ff4e7e57cd3c154bdc6f47b23/xxhash-3.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4df57c0b161ec1b3ed0526a67b0db0914b557e86ee8aae51887aec941b261542", size = 226877, upload-time = "2026-07-06T10:47:34.705Z" }, + { url = "https://files.pythonhosted.org/packages/ed/b5/86bade5618a524d2c06c4041aa2fe8e5749ce16e88afba60d67c1684a21f/xxhash-3.8.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9043877a917be88ccf230aa5667c1bd059bce80f4c2727e4defa1b29b7f48b08", size = 319794, upload-time = "2026-07-06T10:47:37.08Z" }, + { url = "https://files.pythonhosted.org/packages/23/69/9b1a2b89b1621bb740fbcb7beb512f60f99480c1bdc680c0c90e1f56ff75/xxhash-3.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:559e3cabe522231909f9de98ef06929edbd53782046bd21aae0c72db6f2a0775", size = 246202, upload-time = "2026-07-06T10:47:39.676Z" }, + { url = "https://files.pythonhosted.org/packages/08/ea/662ed6cb49f1d34078b6a3a3e0f3d29ff93fd7b5a03c0bc9ecfd9b2159c3/xxhash-3.8.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:264710bd335016f303763ce1275c6486df30bb57c2245c91b224c983d7ac39b8", size = 275628, upload-time = "2026-07-06T10:47:41.99Z" }, + { url = "https://files.pythonhosted.org/packages/13/f5/49fc9e4c6728a5a3bd8fe639199d2fa67609b3a84f938aff6e8568dd3e4f/xxhash-3.8.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e14800b9b10bb39d7a60ad4a310e403164d7b8988a27ae933d4e40618a44088e", size = 231390, upload-time = "2026-07-06T10:47:44.233Z" }, + { url = "https://files.pythonhosted.org/packages/64/9d/3acaf8f599c0e0b30e910a3a11ba32929da53c86dc73c7c55fe6a010b4e9/xxhash-3.8.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:ea6a3e734b0fd41b82784a400be946821900daebe610c050a5e0760838a34f99", size = 250600, upload-time = "2026-07-06T10:47:47.611Z" }, + { url = "https://files.pythonhosted.org/packages/23/64/8acab4c5ec60dbe664b5b9858fd44c2413b07e535b09556a0a5022e78aa6/xxhash-3.8.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cf399fac542a1c7a4734a435b93df2c55e858c7d31abf6c1bdf46f9ae67fbfd0", size = 310032, upload-time = "2026-07-06T10:47:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/56/47/a0288d7329b1fe63e2734a32d19d444a96ae2b4810f545bc61e561224917/xxhash-3.8.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:44c89d915a75c11d2547eaee9098fcd80398987c4bff2974a0497a925bf92c07", size = 448882, upload-time = "2026-07-06T10:47:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/01/e7/3071dfd3beb5c38204ce1cf56bf7749fce08de900fa92714b81d1d8ca1f2/xxhash-3.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:358650d5bda9c635da699c53adf4e8134af492ecc79c960f917eebf088bb6799", size = 223728, upload-time = "2026-07-06T10:47:55.093Z" }, + { url = "https://files.pythonhosted.org/packages/12/11/b99949f0ba2b07e9f9ffe83b9c86faa685f9080725dc21a916a607313be5/xxhash-3.8.1-cp314-cp314t-win32.whl", hash = "sha256:c240939e963653054fc7e4a17c382829cda4aa88a7daf0af841715dbded1b497", size = 33150, upload-time = "2026-07-06T10:47:57.274Z" }, + { url = "https://files.pythonhosted.org/packages/54/1c/09703eb341f8416e74e58d6c6732d4b5c46de59c942363203cb237cc95b0/xxhash-3.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:7258ee276e8772599bc19e14b36f6260306e21b637190cd7cb489a2449d48684", size = 34005, upload-time = "2026-07-06T10:47:59.434Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f9/6ed7251bb6a8af10ac73b1821c60583d2826e5b2064e45a979c935287c98/xxhash-3.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:8f454166c2ffed45636c8d501741e649851ba2f346c4eb73a64c07ac00428f20", size = 30239, upload-time = "2026-07-06T10:48:01.874Z" }, + { url = "https://files.pythonhosted.org/packages/99/e4/4d8040435aeac814fc69ba63621565fbeb19229a138e2568324a26b2a45c/xxhash-3.8.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:39c9d5b61508b0bb68f29e54546de0ed2a74943c6a18585535a7e37356f1dd12", size = 32687, upload-time = "2026-07-06T10:49:42.803Z" }, + { url = "https://files.pythonhosted.org/packages/da/6a/975f1f2318c760e5bcec109ed379713ae645d8d856c2a3b9ec5d26857087/xxhash-3.8.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:83b9130b80b216d56fdf9e87131946b353c9627930c061955a101ea82b09fed9", size = 29879, upload-time = "2026-07-06T10:49:45.172Z" }, + { url = "https://files.pythonhosted.org/packages/08/0b/40a2a55ff52cf635bfdc5eae67a772bec85b4f44c6c737f73f6f528d51d1/xxhash-3.8.1-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8304be0982130954b7fd3aad18e2c6f8ee40254bc3d2e635991c16d77c91e2bd", size = 43246, upload-time = "2026-07-06T10:49:47.905Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6d/56ed2b6b200f26fb474f3fd387d95d0601efcd5bb33430c90c68924bdd77/xxhash-3.8.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4b512261801b1e5fde7b6ebf2fef7977339c620cbbca88a0040ad9ad134f4d02", size = 38202, upload-time = "2026-07-06T10:49:50.59Z" }, + { url = "https://files.pythonhosted.org/packages/0d/a3/56864d895d1161a9f17502088e9c1fb7c06bde2c2efdde620d22bb7a9c43/xxhash-3.8.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49aa8692507835dcc1e8ad8021f20c74c2dc13d83b5112e87877faa2a0035b20", size = 34448, upload-time = "2026-07-06T10:49:53.242Z" }, + { url = "https://files.pythonhosted.org/packages/6b/57/5c6e0908a47f61dca96d01c8ee6fce01ed1050611eb779083ba8758fed81/xxhash-3.8.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:345b07b78e2bf583d71682aa34ae5b5fab575f7a1cb31e10263ebbc6f89f8c42", size = 32869, upload-time = "2026-07-06T10:49:55.972Z" }, +] + +[[package]] +name = "yarl" +version = "1.24.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/33/ebe9e3d1f86c7a0b51094c0a146392045ca1631d2664889539dec8088a33/yarl-1.24.5.tar.gz", hash = "sha256:e81b83143bee16329c23db3c1b2d82b29892fcbcb849186d2f6e98a5abe9a57f", size = 228679, upload-time = "2026-07-20T02:07:45.435Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/ac/cacdda1f0a90441297210bc34cf7e4ac1b7318c8030ebd83bdf6fe82f1db/yarl-1.24.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88f50c94e21a0a7f14042c015b0eba1881af78562e7bf007e0033e624da59750", size = 135466, upload-time = "2026-07-20T02:04:21.695Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a5/1b2ceace0230e40c52ab1b263148059a43a6303219b996affc68f8381836/yarl-1.24.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6efbccc3d7f75d5b03105172a8dc86d82ba4da86817952529dd93185f4a88be2", size = 97291, upload-time = "2026-07-20T02:04:24.045Z" }, + { url = "https://files.pythonhosted.org/packages/59/1d/340d1a0db7bbce1f291afc044255ebf4ebbce2b25ab1b3f7d3d069080f5d/yarl-1.24.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0ebfaffe1a16cb72141c8e09f18cc76856dbe58639f393a4f2b26e474b96b871", size = 97154, upload-time = "2026-07-20T02:04:25.761Z" }, + { url = "https://files.pythonhosted.org/packages/05/41/25596a33c2fb5098dca8dc3773b04221db64ded0b7f8f09885647d864610/yarl-1.24.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ac73abdc7ab75610f95a8fd994c6457e87752b02a63987e188f937a1fc180f0", size = 109196, upload-time = "2026-07-20T02:04:27.543Z" }, + { url = "https://files.pythonhosted.org/packages/f2/df/dd9f2fb8a5c6054fbefd1538d2b9b1127e612d2ee64b307a070173b57afd/yarl-1.24.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4d97a951a81039050e45f04e96689b58b8243fa5e62aa14fe67cb6075300885e", size = 102556, upload-time = "2026-07-20T02:04:29.16Z" }, + { url = "https://files.pythonhosted.org/packages/cb/57/4754b9d2c8945880290ecba0864e8b0441e117bba70534fe819e3645e174/yarl-1.24.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fe7b7bb170daccbba19ad33012d2b15f1e7942296fd4d45fc1b79013da8cc0f2", size = 117965, upload-time = "2026-07-20T02:04:30.845Z" }, + { url = "https://files.pythonhosted.org/packages/74/b5/6a9ece27d2043c3386f902dd078ab35d29ef5126b3206ebffb673283a7cb/yarl-1.24.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:89a1bbb58e0e3f7a283653d854b1e95d65e5cfd4af224dac5f02629ec1a3e621", size = 116266, upload-time = "2026-07-20T02:04:32.573Z" }, + { url = "https://files.pythonhosted.org/packages/9e/bc/a6653249f6ee59ec85dcfec008d9cbc16586dad613963bb17a91b2b993a5/yarl-1.24.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7fa5e51397466ea7e98de493fa2ff1b8193cfef8a7b0f9b4842f92d342df0dba", size = 110758, upload-time = "2026-07-20T02:04:34.235Z" }, + { url = "https://files.pythonhosted.org/packages/65/7e/c5a12fb8208df7b981bc82256e7831ce428eeaf893f7bbe6179c57bb9252/yarl-1.24.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4103b77b8a8225e413107d2349b65eb3c1c52627b5cc5c3c4c1c6a798b218950", size = 110120, upload-time = "2026-07-20T02:04:35.85Z" }, + { url = "https://files.pythonhosted.org/packages/04/6c/1b659b964626694667b3ec01bf4bcff564b73ae7c48ea1fbfe588b78b461/yarl-1.24.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f9f3e9c8a9ecffa57bef8fb4fa19e5fa4d2d8307cf6bac5b1fca5e5860f4ba00", size = 108834, upload-time = "2026-07-20T02:04:37.67Z" }, + { url = "https://files.pythonhosted.org/packages/74/a6/bf48f55c2104e40c15b7b13fad0a5756a11552a55f01c90bc90a66ab81c3/yarl-1.24.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c0ebc836c47a6477e182169c6a476fc691d12b518894bf7dd2572f0d59f1c7ed", size = 103442, upload-time = "2026-07-20T02:04:39.576Z" }, + { url = "https://files.pythonhosted.org/packages/37/ac/84b273ac133ecdce598fc1f4140a08a1bf2044048bff8106371d207d105f/yarl-1.24.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:96d30286dd02679e32a39aa8f0b7498fc847fcda46cfc09df5513e82ce252440", size = 117413, upload-time = "2026-07-20T02:04:41.549Z" }, + { url = "https://files.pythonhosted.org/packages/a4/55/9307e03977d3b290dfa42e5d2bae7b6140808fd1786fbe70cd9d3bee53c5/yarl-1.24.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:fd8c81f346b58f45818d09ea11db69a8d5fd34a224b79871f6d44f12cd7977b1", size = 109498, upload-time = "2026-07-20T02:04:43.468Z" }, + { url = "https://files.pythonhosted.org/packages/fc/be/791a6f314cb4c989c19f8e3a10271f1e469c077143915e52474d80f26b4b/yarl-1.24.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:5c55256dee8f4b27bfbf636c8363383c7c8db7890c7cba5217d7bd5f5f21dab6", size = 116062, upload-time = "2026-07-20T02:04:45.319Z" }, + { url = "https://files.pythonhosted.org/packages/19/1a/ddd3807b86055010e2f99aa89b3c640effdb65696766c20597f696f48a1c/yarl-1.24.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9f4d8cf085a4c6a40fb97ea0f46938a8df43c85d31f9d45e2a8867ea9293790d", size = 110941, upload-time = "2026-07-20T02:04:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/6d/03/f34271bba042d2187508bf62aea20a14129efb5a1acfc6a2efe7544630b4/yarl-1.24.5-cp310-cp310-win_amd64.whl", hash = "sha256:240cbec09667c1fed4c6cd0060b9ec57332427d7441289a2ed8875dc9fb2b224", size = 97534, upload-time = "2026-07-20T02:04:48.774Z" }, + { url = "https://files.pythonhosted.org/packages/e4/02/ecc8dc31b9f355731e700f8402b8075d2ea1737dbc4baf4abf0f0fc64288/yarl-1.24.5-cp310-cp310-win_arm64.whl", hash = "sha256:8a6987eaad834cb32dd57d9d582225f0054a5d1af706ccfbbdba735af4927e13", size = 93603, upload-time = "2026-07-20T02:04:50.686Z" }, + { url = "https://files.pythonhosted.org/packages/fe/db/3cb5df059756a45761cc3dee8fd25ec82b83a6585ea3542b969fda850f99/yarl-1.24.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2c1fe720934a16ea8e7146175cba2126f87f54912c8c5435e7f7c7a51ef808d3", size = 135043, upload-time = "2026-07-20T02:04:52.39Z" }, + { url = "https://files.pythonhosted.org/packages/44/f8/767d6bd5a03db63bc467df2fb56d6fafeae9667d74aea92cd6af399f828b/yarl-1.24.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c687ed078e145f5fd53a14854beff320e1d2ab76df03e2009c98f39a0f68f39a", size = 96942, upload-time = "2026-07-20T02:04:54.26Z" }, + { url = "https://files.pythonhosted.org/packages/ce/97/10b939c44d7b28d1dbc389cfc7012306d1ea8dba01eaef44b39fffaee52a/yarl-1.24.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:709f1efed56c4a145793c046cd4939f9959bcd818979a787b77d8e09c57a0840", size = 97046, upload-time = "2026-07-20T02:04:56.638Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7a/b410dbe39b6255c55fb2a2bcee96eb844d0789235ddc381a889a90dc72d6/yarl-1.24.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:874019bd513008b009f58657134e5d0c5e030b3559bd0553976837adf52fe966", size = 110512, upload-time = "2026-07-20T02:04:58.955Z" }, + { url = "https://files.pythonhosted.org/packages/83/c7/da591971f78a5617e1f21f5699858ebccd836fe181a6493788ffc91ba69b/yarl-1.24.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a4582acf7ef76482f6f511ebaf1946dae7f2e85ec4728b81a678c01df63bd723", size = 102454, upload-time = "2026-07-20T02:05:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/c4/8e/73b0ed4de47289a78a96045d76d1cfe5e41848bf0da59ce25b2ec87ee05d/yarl-1.24.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2cabe6546e41dabe439999a23fcb5246e0c3b595b4315b96ef755252be90caeb", size = 117617, upload-time = "2026-07-20T02:05:02.325Z" }, + { url = "https://files.pythonhosted.org/packages/cf/14/b744747bc4f57a8d55bd744df463457524583e1e9f7538b5ace0346ab92e/yarl-1.24.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:17f57620f5475b3c69109376cc87e42a7af5db13c9398e4292772a706ff10780", size = 116135, upload-time = "2026-07-20T02:05:04.05Z" }, + { url = "https://files.pythonhosted.org/packages/66/ca/95aa4d0e5b7ea4f20e4d577c42d001ed9df207569fdb063cc5ed4ebb496b/yarl-1.24.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:570fec8fbd22b032733625f03f10b7ff023bc399213db15e72a7acaef28c2f4e", size = 111935, upload-time = "2026-07-20T02:05:05.738Z" }, + { url = "https://files.pythonhosted.org/packages/72/0d/d2ad8d6b147832d177a4e720ba1962fe686eb0913b74503b3eca094b8bba/yarl-1.24.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5fede79c6f73ff2c3ef822864cb1ada23196e62756df53bc6231d351a49516a2", size = 110010, upload-time = "2026-07-20T02:05:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/50/18/eb335e4120903903f4865041355ae46256a2406eb2865bc24827f4f27b61/yarl-1.24.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8ccf9aca873b767977c73df497a85dbedee4ee086ae9ae49dc461333b9b79f58", size = 110058, upload-time = "2026-07-20T02:05:09.246Z" }, + { url = "https://files.pythonhosted.org/packages/44/70/97353add32c62ad6f206d948ac5a5ee84398225e534dc6ed6433d1b335b6/yarl-1.24.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ad5d8201d310b031e6cd839d9bac2d4e5a01533ce5d3d5b50b7de1ef3af1de61", size = 103308, upload-time = "2026-07-20T02:05:11.31Z" }, + { url = "https://files.pythonhosted.org/packages/68/39/5e7398d4b6f6b3c9062823ebc60802df5b272e3fe9e788f9734c6ee46c85/yarl-1.24.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:841f0852f48fefea3b12c9dfec00704dfa3aef5215d0e3ce564bb3d7cd8d57c6", size = 116898, upload-time = "2026-07-20T02:05:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c9/09e52f2239e8b96357eccca05915382e4ba5405ebfb623b6036040d99654/yarl-1.24.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:9baafc71b04f8f4bb0703b21d6fc9f0c30b346c636a532ff16ec8491a5ea4b1f", size = 109400, upload-time = "2026-07-20T02:05:14.821Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6a/e94133d4c2d1a14d2384310bf3e79d9cf32c9d1eae1c6f034fb80d098fa1/yarl-1.24.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d897129df1a22b12aeed2c2c98df0785a2e8e6e0bde87b389491d0025c187077", size = 115934, upload-time = "2026-07-20T02:05:17.78Z" }, + { url = "https://files.pythonhosted.org/packages/4e/3c/34955ed967b976fc38edcbb6d538dee79dbda4cb7fc7f72a0907a7c78e0f/yarl-1.24.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dd625535328fd9882374356269227670189adfcc6a2d90284f323c05862eecbd", size = 112178, upload-time = "2026-07-20T02:05:19.675Z" }, + { url = "https://files.pythonhosted.org/packages/f5/46/d7bd3a8859d47dcfaffd7127af7076032a7da278a9a02e17b5f37bfb6712/yarl-1.24.5-cp311-cp311-win_amd64.whl", hash = "sha256:f4239bbec5a3577ddb49e4b50aeb32d8e5792098262ae2f63723f916a29b1a25", size = 97544, upload-time = "2026-07-20T02:05:21.523Z" }, + { url = "https://files.pythonhosted.org/packages/01/69/c1bfd21e32c638974ea2c542a0b8c53ef1fa9eff336020f5d014f9503ff2/yarl-1.24.5-cp311-cp311-win_arm64.whl", hash = "sha256:3ac6aff147deb9c09461b2d4bbdf6256831198f5d8a23f5d37138213090b6d8a", size = 93359, upload-time = "2026-07-20T02:05:23.493Z" }, + { url = "https://files.pythonhosted.org/packages/1b/84/71d051c850b5af41d168c679d9eb67eb7c55283ac4ee131673edf134bc4e/yarl-1.24.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d693396e5aea78db03decd60aec9ece16c9b40ba00a587f089615ff4e718a81d", size = 136035, upload-time = "2026-07-20T02:05:25.489Z" }, + { url = "https://files.pythonhosted.org/packages/03/4d/8ad27f9a1b7e69313cca5d695b925b48efe51208d3490e0844bae97cabc0/yarl-1.24.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3363fcc96e665878946ad7a106b9a13eac0541766a690ef287c0232ac768b6ec", size = 97642, upload-time = "2026-07-20T02:05:27.429Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b4/05b4131c407006cd1e410e9c6539f16a0945724677e5364447313c15ea3e/yarl-1.24.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9d399bdcfb4a0f659b9b3788bbc89babe63d9a6a65aacdf4d4e7065ff2e6316c", size = 97323, upload-time = "2026-07-20T02:05:29.441Z" }, + { url = "https://files.pythonhosted.org/packages/20/16/e618c875c73e0e39611f20a581b3d5e8d59b8857bf001bee3263044c6deb/yarl-1.24.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90333fd89b43c0d08ac85f3f1447593fc2c66de18c3d6378d7125ea118dc7a54", size = 107741, upload-time = "2026-07-20T02:05:31.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/9a/c4defeaf3ed33fcb346aacf9c6e971a8d4e2bde04a0310e79abb208e7965/yarl-1.24.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:665b0a2c463cc9423dd647e0bfd9f4ccc9b50f768c55304d5e9f80b177c1de12", size = 103570, upload-time = "2026-07-20T02:05:33.303Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e7/0e0e0de5865ebd5914537ef486f36c727a59865c3ac0cf5ff1b32aececbf/yarl-1.24.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e006d3a974c4ee19512e5f058abedb6eef36a5e553c14812bdeba1758d812e6d", size = 115815, upload-time = "2026-07-20T02:05:35.292Z" }, + { url = "https://files.pythonhosted.org/packages/2b/27/ca56b700cb170aba25a3893b75355b213935657dc5714d2383354a270e62/yarl-1.24.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e7d42c531243450ef0d4d9c172e7ed6ef052640f195629065041b5add4e058d1", size = 116025, upload-time = "2026-07-20T02:05:37.503Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d0/d56c859b8222116f5d68459199f48359e0bf121b6f65a69bf329b3602ba0/yarl-1.24.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f08c7513ecef5aad65687bfdf6bc601ae9fccd04a42904501f8f7141abad9eb9", size = 109835, upload-time = "2026-07-20T02:05:39.506Z" }, + { url = "https://files.pythonhosted.org/packages/70/a2/3a35557e4d1a79425040eba202ccaf08bdc8717680fc77e2498a1ad2e0a5/yarl-1.24.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6c95b17fe34ed802f17e205112e6e10db92275c34fee290aa9bdc55a9c724027", size = 108884, upload-time = "2026-07-20T02:05:41.584Z" }, + { url = "https://files.pythonhosted.org/packages/e4/35/ef4c26356b7913c68983bac2d72a4212b3347af551cb8d250b99b5ed7b7f/yarl-1.24.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56b149b22de33b23b0c6077ab9518c6dcb538ad462e1830e68d06591ccf6e38b", size = 107308, upload-time = "2026-07-20T02:05:43.697Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/ff0dc66c2ccf3e0153ab97ff61eabab4400e6a5264af427ab30cd69f1857/yarl-1.24.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a8fe66b8f300da93798025a785a5b90b42f3810dc2b72283ff84a41aaaebc293", size = 103646, upload-time = "2026-07-20T02:05:45.895Z" }, + { url = "https://files.pythonhosted.org/packages/74/f0/33b9271c7f881766359d58266fa0811d2e5210ed860e28da7dc6d7786344/yarl-1.24.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:377fe3732edbaf78ee74efdf2c9f49f6e99f20e7f9d2649fda3eb4badd77d76e", size = 115305, upload-time = "2026-07-20T02:05:47.832Z" }, + { url = "https://files.pythonhosted.org/packages/ef/65/fd79fb1868c4a80db8661091de525bf430f63c3bea1b20e8b6a84fc7d359/yarl-1.24.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e8ffa78582120024f476a611d7befc123cee59e47e8309d470cf667d806e613b", size = 108404, upload-time = "2026-07-20T02:05:49.604Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ba/dbabe6b262f17a816c70cfc09558dbf03ece3ec76684d02f911a3d3a189c/yarl-1.24.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:daba5e594f06114e37db186efd2dd916609071e59daca901a0a2e71f02b142ce", size = 115940, upload-time = "2026-07-20T02:05:51.741Z" }, + { url = "https://files.pythonhosted.org/packages/a5/43/fab2d1dad9d340a268cdde63756a123d069723efff6a372d123fa74a9517/yarl-1.24.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:65be18ec59496c13908f02a2472751d9ef840b4f3fb5726f129306bf6a2a7bba", size = 110006, upload-time = "2026-07-20T02:05:53.554Z" }, + { url = "https://files.pythonhosted.org/packages/c4/27/41eb51bbd1b8d89546b83897cfb0164f1e109304fd408dbb151b639eec0f/yarl-1.24.5-cp312-cp312-win_amd64.whl", hash = "sha256:a929d878fec099030c292803b31e5d5540a7b6a31e6a3cc76cb4685fc2a2f51b", size = 97618, upload-time = "2026-07-20T02:05:55.57Z" }, + { url = "https://files.pythonhosted.org/packages/3c/25/b2553764b3d65db711d8f45416351ec4f420847558eb669edcbcaadf5780/yarl-1.24.5-cp312-cp312-win_arm64.whl", hash = "sha256:7ce27823052e2013b597e0c738b13e7e36b8ccb9400df8959417b052ab0fd92c", size = 93018, upload-time = "2026-07-20T02:05:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/e1/63/64ef361967cc983573149dc1515d531db5da8a4c92d22bb833d59e01b313/yarl-1.24.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:79af890482fc94648e8cde4c68620378f7fef60932710fa17a66abc039244da2", size = 135075, upload-time = "2026-07-20T02:05:59.671Z" }, + { url = "https://files.pythonhosted.org/packages/bb/89/55920fd853ce43e608adbc3962456f0d649d6bb15250dc2988321da0fe1c/yarl-1.24.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46c2f213e23a04b93a392942d782eb9e413e6ef6bf7c8c53884e599a5c174dcb", size = 97225, upload-time = "2026-07-20T02:06:01.769Z" }, + { url = "https://files.pythonhosted.org/packages/15/f0/7688d3f2cfff7590df2af38ec46d969f4281a4dddb08a9ad2eafbcdddf98/yarl-1.24.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92ab3e11448f2ff7bf53c5a26eff0edc086898ec8b21fb154b85839ce1d88075", size = 96751, upload-time = "2026-07-20T02:06:03.676Z" }, + { url = "https://files.pythonhosted.org/packages/05/1a/a851a0f94aaaf379dd4f901bfc80f634280bec51eb260b47363e2a4cd62e/yarl-1.24.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebb0ec7f17803063d5aeb982f3b1bd2b2f4e4fae6751226cbd6ba1fcfe9e63ff", size = 107960, upload-time = "2026-07-20T02:06:05.699Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a8/faea066c12f9c77ca0de90641f1655f9dd7b412477bf28c76d692f3aecff/yarl-1.24.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:82632daed195dcc8ea664e8556dc9bdbd671960fb3776bd92806ce05792c2448", size = 103500, upload-time = "2026-07-20T02:06:07.556Z" }, + { url = "https://files.pythonhosted.org/packages/fb/9c/1e67084c2a6e2f2db0e3be798328cb3be42c0119b621d25461479a224d21/yarl-1.24.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:53e549287ef628fecba270045c9701b0c564563a9b0577d24a4ec75b8ab8040f", size = 115780, upload-time = "2026-07-20T02:06:09.599Z" }, + { url = "https://files.pythonhosted.org/packages/58/86/1f94664e147474337e3359f52012cf3d02f825f694317b178bfba1078c62/yarl-1.24.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fcd3b77e2f17bbe4ca56ec7bcb07992647d19d0b9c05d84886dcd6f9eb810afd", size = 115308, upload-time = "2026-07-20T02:06:11.352Z" }, + { url = "https://files.pythonhosted.org/packages/0a/43/8e55ae7538ba5f28ccb3c845c6dd4549cf7016d5992e5326512519107cdd/yarl-1.24.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d46b86567dd4e248c6c159fcbcdcce01e0a5c8a7cd2334a0fff759d0fa075b16", size = 110574, upload-time = "2026-07-20T02:06:13.129Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ba/a889ec8765cedcf2ac44dcb02d6a21e4861399b243b263c5f2dde27ee740/yarl-1.24.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f72c74aa99359e27a2ee8d6613fefa28b5f76a983c083074dfc2aaa4ab46213", size = 109914, upload-time = "2026-07-20T02:06:15.243Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c3/e45f821af67b791c2dbbe4a9f4137a1d33f8d386654a05a0c3f47bdfa25d/yarl-1.24.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f45789ce415a7ec0820dc4f82925f9b5f7732070be1dec1f5f23ec381435a24", size = 107712, upload-time = "2026-07-20T02:06:17.443Z" }, + { url = "https://files.pythonhosted.org/packages/02/00/2ab0f42c9857fcb490bfaa6647b14540b53d241ab209f23220b958cc5832/yarl-1.24.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6e73e7fe93f17a7b191f52ec9da9dd8c06a8fe735a1ecbd13b97d1c723bff385", size = 104251, upload-time = "2026-07-20T02:06:19.259Z" }, + { url = "https://files.pythonhosted.org/packages/7a/70/709d9a286e98af2c7fd8e4e6cada658b5c0e30d87dd7e2a63c2fb5767217/yarl-1.24.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4a36f9becdd4c5c52a20c3e9484128b070b1dcfc8944c006f3a528295a359a9c", size = 115319, upload-time = "2026-07-20T02:06:21.207Z" }, + { url = "https://files.pythonhosted.org/packages/5c/6c/3eaa515142991fe84cfc483ff986492211f1978f90161ccefdbec919d09b/yarl-1.24.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:7bcbe0fcf850eae67b6b01749815a4f7161c560a844c769ad7b48fcd99f791c4", size = 109163, upload-time = "2026-07-20T02:06:23.006Z" }, + { url = "https://files.pythonhosted.org/packages/bb/64/711dafce66c323a3144d470547a71c5384c57623308ac8bb5e4b903ac148/yarl-1.24.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:24e861e9630e0daddcb9191fb187f60f034e17a4426f8101279f0c475cd74144", size = 115435, upload-time = "2026-07-20T02:06:24.923Z" }, + { url = "https://files.pythonhosted.org/packages/cf/f3/9b9d0e6d84bea851eb1ba99e4bdc755b86fd813e49ec86dfe42f26befdef/yarl-1.24.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9335a099ad87287c37fe5d1a982ff392fa5efe5d14b40a730b1ec1d6a41382b4", size = 110691, upload-time = "2026-07-20T02:06:26.973Z" }, + { url = "https://files.pythonhosted.org/packages/86/e4/62a06b7e87c4246ac76b7c2da136f972eb4a3a1fc94abb07e7022d6fdb0a/yarl-1.24.5-cp313-cp313-win_amd64.whl", hash = "sha256:2dbe06fc16bc91502bca713704022182e5729861ae00277c3a23354b40929740", size = 97454, upload-time = "2026-07-20T02:06:29.163Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c9/5fc8025b318ab10db413b61056bd0d95c557a70e8df4210c7511f866329c/yarl-1.24.5-cp313-cp313-win_arm64.whl", hash = "sha256:6b8536851f9f65e7f00c7a1d49ba7f2be0ffe2c11555367fc9f50d9f842410a1", size = 92813, upload-time = "2026-07-20T02:06:31.113Z" }, + { url = "https://files.pythonhosted.org/packages/a9/08/5f3085fef9564217074db9dd8573de1795bc82cde61a7ad10b6a7234a569/yarl-1.24.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:2729fcfc4f6a596fb0c50f32090400aa9367774ac296a00387e65098c0befa76", size = 135680, upload-time = "2026-07-20T02:06:33.273Z" }, + { url = "https://files.pythonhosted.org/packages/98/35/ba9436e579bd48a8801f2021d842d9ab4994c26e4c7dd3a4c1f1bcb57a9e/yarl-1.24.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ff330d3c30db4eb6b01d79e29d2d0b407a7ecad39cfd9ec993ece57396a2ec0d", size = 97395, upload-time = "2026-07-20T02:06:35.259Z" }, + { url = "https://files.pythonhosted.org/packages/18/a9/a07f76f3c44e02b25cc743af5ef93eef27f7013eadca770451b6a6ccb5db/yarl-1.24.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e42d75862735da90e7fc5a7b23db0c976f737113a54b3c9777a9b665e9cbff75", size = 97223, upload-time = "2026-07-20T02:06:37.216Z" }, + { url = "https://files.pythonhosted.org/packages/77/f7/a9a1d6fa7dd9e388f95b30f6ad3ec4e285f6c8f61f44ce16070c3fcfe414/yarl-1.24.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3732e66413163e72508da9eff9ce9d2846fde51fae45d3605393d3e6cd303e9", size = 108777, upload-time = "2026-07-20T02:06:39.292Z" }, + { url = "https://files.pythonhosted.org/packages/2f/44/e0b86c302471fabd6f02808ecf2ac52b8412b624787849d4bf2cdb466f6f/yarl-1.24.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5b8ee53be440a0cffc991a27be3057e0530122548dbe7c0892df08822fce5ede", size = 103119, upload-time = "2026-07-20T02:06:41.456Z" }, + { url = "https://files.pythonhosted.org/packages/d1/16/9c16d180bf8faaf223225eb50e1245870ff1ae0e302a27153988e65c51fd/yarl-1.24.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:af3aefa655adb5869491fa907e652290386800ae99cc50095cba71e2c6aefdca", size = 116471, upload-time = "2026-07-20T02:06:43.696Z" }, + { url = "https://files.pythonhosted.org/packages/d2/8d/b219b9df28a02ce95cfbdd41d2f7caa5669d0ff979c1c9975697145e33c5/yarl-1.24.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2120b96872df4a117cde97d270bac96aea7cc52205d305cf4611df694a487027", size = 115974, upload-time = "2026-07-20T02:06:45.874Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e8/f20557aca240d88e69850ad1ee91756821d094bb1310565c04d25c6682a2/yarl-1.24.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:66410eb6345d467151934b49bfa70fb32f5b35a6140baa40ad97d6436abea2e9", size = 110830, upload-time = "2026-07-20T02:06:47.852Z" }, + { url = "https://files.pythonhosted.org/packages/db/18/199b85109a53eeca64ee19c9cca228287e8e4ab0cc1a09b28f530e65cce0/yarl-1.24.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4af7b7e1be0a69bee8210735fe6dcfc38879adfac6d62e789d53ba432d1ffa41", size = 110054, upload-time = "2026-07-20T02:06:49.84Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2f/ed28147f8cd7f48c49367c90713b30a555284b6105a6a56f3a05568da795/yarl-1.24.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa139875ff98ab97da323cfadfaff08900d1ad42f1b5087b0b812a55c5a06373", size = 108312, upload-time = "2026-07-20T02:06:51.835Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c5/55e16ae0a5c227cea8df1c6871ba57d614a34243146c05729caf2a1bd9c5/yarl-1.24.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:0055afc45e864b92729ac7600e2d102c17bef060647e74bca75fa84d66b9ff36", size = 103662, upload-time = "2026-07-20T02:06:54.061Z" }, + { url = "https://files.pythonhosted.org/packages/8d/ea/dbd7c2caec459c9a426f18b02688ecbfb58620d0f6a3422d24769fbaf8ab/yarl-1.24.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f0e466ed7511fe9d459a819edbc6c2585c0b6eabde9fa8a8947552468a7a6ef0", size = 116090, upload-time = "2026-07-20T02:06:56.015Z" }, + { url = "https://files.pythonhosted.org/packages/06/84/39ce4ce3059e07fece5fbdbee8c4053406af9aca911ce9fa5f8548aab6af/yarl-1.24.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f141474e85b7e54998ec5180530a7cda99ab29e282fa50e0756d89981a9b43c5", size = 109523, upload-time = "2026-07-20T02:06:57.926Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8b/71ff44137b405c64a7788075669c24010019f57a7464b78c3a6cbee539d9/yarl-1.24.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:e2935f8c39e3b03e83519292d78f075189978f3f4adc15a78144c7c8e2a1cba5", size = 116084, upload-time = "2026-07-20T02:06:59.868Z" }, + { url = "https://files.pythonhosted.org/packages/62/c0/423078fdd4042e1862c11f0ffd977a0ffa393783c12bee94685923bc189e/yarl-1.24.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9d1216a7f6f77836617dba35687c5b78a4170afc3c3f18fc788f785ba26565c4", size = 111006, upload-time = "2026-07-20T02:07:01.907Z" }, + { url = "https://files.pythonhosted.org/packages/cf/52/6daa2ee9d95e5c98b8128f8df91eb692eb423ab274b8cf08db52152fad26/yarl-1.24.5-cp314-cp314-win_amd64.whl", hash = "sha256:5ba4f78df2bcc19f764a4b26a8a4f5049c110090ad5825993aacb052bf8003ad", size = 99215, upload-time = "2026-07-20T02:07:03.852Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0e/464a847d7359e0da75dd9fc5c1d1aa35d0159ea31e5f8e66a3c1c29ff3d0/yarl-1.24.5-cp314-cp314-win_arm64.whl", hash = "sha256:9e4e16c73d717c5cf27626c524d0a2e261ad20e46932b2670f64ad5dde23e26f", size = 94566, upload-time = "2026-07-20T02:07:06.074Z" }, + { url = "https://files.pythonhosted.org/packages/e2/55/e03acc4446772660bc335e86e41ef31e4d0d838fd641531a11a5ee33b493/yarl-1.24.5-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e1ae548a9d901adca07899a4147a7c826bbcc06239d3ce9a59f57886a28a4c88", size = 142533, upload-time = "2026-07-20T02:07:08.284Z" }, + { url = "https://files.pythonhosted.org/packages/ae/71/4acd3a1fc7cf14345cdb302665ecd2097f62c365b4f14ca17d4f37775cf9/yarl-1.24.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ff405d91509d88e8d44129cd87b18d70acd1f0c1aeabd7bc3c46792b1fe2acba", size = 100776, upload-time = "2026-07-20T02:07:10.197Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/cfb76b7fe99686db264bff829779a539d923e7564ffd7ef18da6c54c3774/yarl-1.24.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:47e98aab9d8d82ff682e7b0b5dded33bf138a32b817fcf7fa3b27b2d7c412928", size = 100913, upload-time = "2026-07-20T02:07:12.357Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3f/7116e782992abbd4fb6948488aec72078895e929a23078290739e8396fce/yarl-1.24.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0a658a6d3fafee5c6f63c58f3e785c8c43c93fbc02bf9f2b6663f8185e0971f", size = 106507, upload-time = "2026-07-20T02:07:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/33/90/d4d2d73ee78229cc889872eb8e085d8f5c6f51abdb178409fd9b23cf74fd/yarl-1.24.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4377407001ca3c057773f44d8ddd6358fa5f691407c1ba92210bd3cf8d9e4c95", size = 99219, upload-time = "2026-07-20T02:07:16.019Z" }, + { url = "https://files.pythonhosted.org/packages/3e/fa/a6df1a9bccd644eec00abee0dff4277416222cec435330fd1f2858523ec1/yarl-1.24.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7c0494a31a1ac5461a226e7947a9c9b78c44e1dc7185164fa7e9651557a5d9bc", size = 111804, upload-time = "2026-07-20T02:07:18.141Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9e/7b2a1f4bcc20e9447156dd2b1c4d01f70d9df0759025ee7d09a84ffae134/yarl-1.24.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a7cff474ab7cd149765bb784cf6d78b32e18e20473fb7bda860bce98ab58e9da", size = 110943, upload-time = "2026-07-20T02:07:20.06Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/22c92affb0f9b623ca753d27d968b5625b868f12c6378d049d55ae247643/yarl-1.24.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cbb833ccacdb5519eff9b8b71ee618cc2801c878e77e288775d77c3a2ced858a", size = 108251, upload-time = "2026-07-20T02:07:22.217Z" }, + { url = "https://files.pythonhosted.org/packages/45/44/5769b96298c1e195fb412997b6090af2a84105cf59c17613558a2d011d1f/yarl-1.24.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:82f75e05912e84b7a0fe57075d9c59de3cb352b928330f2eb69b2e1f54c3e1f0", size = 106025, upload-time = "2026-07-20T02:07:24.083Z" }, + { url = "https://files.pythonhosted.org/packages/4c/40/009e8e791fd9762c0e1567e69248acb4f49064597e1680874c16dd8bb798/yarl-1.24.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:16a2f5010280020e90f5330257e6944bc33e73593b136cc5a241e6c1dc292498", size = 106573, upload-time = "2026-07-20T02:07:26.248Z" }, + { url = "https://files.pythonhosted.org/packages/20/c6/b7480578f8a0a80946f36ad6df547ecec704f9ba69d2de60f8aa6f1c1cbf/yarl-1.24.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ffcd54362564dc1a30fb74d8b8a6e5a6b11ebd5e27266adc3b7427a21a6c9104", size = 100751, upload-time = "2026-07-20T02:07:28.098Z" }, + { url = "https://files.pythonhosted.org/packages/d4/27/4476f3360b91a48c5cf125e91f59a3bd35299d84a431a258d57f5977bb11/yarl-1.24.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0465ec8cedc2349b97a6b595ace64084a50c6e839eca40aa0626f38b8350e331", size = 111643, upload-time = "2026-07-20T02:07:30.88Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4b/5cdd3e5ee944e8af31e52f6cd3d3af5fd7b937e036ccbbba2c9ffebede95/yarl-1.24.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4db9aecb141cb7a5447171b57aa1ed3a8fee06af40b992ffc31206c0b0121550", size = 106312, upload-time = "2026-07-20T02:07:33.06Z" }, + { url = "https://files.pythonhosted.org/packages/18/86/f406b0c2a6f99575de2da671ef47aa06f89a5be83a27a46971c3b86cecdb/yarl-1.24.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f540c013589084679a6c7fac07096b10159737918174f5dfc5e11bf5bca4dfe6", size = 110379, upload-time = "2026-07-20T02:07:35.155Z" }, + { url = "https://files.pythonhosted.org/packages/f0/6c/9f3adfbd3b30b4fa0f7ccb3a83eba2c1152d3fff554d535e640ba0f7ba2b/yarl-1.24.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a61834fb15d81322d872eaafd333838ae7c9cea84067f232656f75965933d047", size = 108497, upload-time = "2026-07-20T02:07:37.35Z" }, + { url = "https://files.pythonhosted.org/packages/dd/37/91eb2e5ca883a529c1b390348a74cd9fc0512171727f547ce70bfe02be5c/yarl-1.24.5-cp314-cp314t-win_amd64.whl", hash = "sha256:5c88e5815a49d289e599f3513aa7fde0bc2092ff188f99c940f007f90f53d104", size = 102450, upload-time = "2026-07-20T02:07:39.578Z" }, + { url = "https://files.pythonhosted.org/packages/bf/f4/ed5c402ac8fde4403ed3366c2716bfddc8a6677ebd59f3d62772cc7fe468/yarl-1.24.5-cp314-cp314t-win_arm64.whl", hash = "sha256:cf139c02f5f23ef6532040a30ff662c00a318c952334f211046b8e60b7f17688", size = 97222, upload-time = "2026-07-20T02:07:41.55Z" }, + { url = "https://files.pythonhosted.org/packages/61/02/962c1cbfc401a30c1d034dc67ff395f64b52302c6d62de556c1fca99acc0/yarl-1.24.5-py3-none-any.whl", hash = "sha256:a33700d13d9b7d84fd10947b09ff69fb9a792e519c8cb9764a3ca70baa6c23a7", size = 58612, upload-time = "2026-07-20T02:07:43.461Z" }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, +] diff --git a/envs/latex_ocr_env/validate.py b/envs/latex_ocr_env/validate.py new file mode 100644 index 000000000..f679109fe --- /dev/null +++ b/envs/latex_ocr_env/validate.py @@ -0,0 +1,133 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +""" +End-to-end driver for the LaTeX OCR environment. + +Connects to a running server, exercises the Task API, resets to a task, runs a +policy over the image, steps, and prints the reward. The policy is either a +real vision-LLM served through the Hugging Face Inference Router +(OpenAI-compatible) or, if no HF_TOKEN is set, a no-op placeholder so the +plumbing can still be verified. + +Usage: + # Start the server first (see README), then: + python validate.py --base-url http://localhost:8000 \\ + --split test --num 3 --model Qwen/Qwen2.5-VL-7B-Instruct +""" + +from __future__ import annotations + +import argparse +import os +import sys + +# Make `latex_ocr_env` importable when run from the env directory. +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from latex_ocr_env import LatexOCRAction, LatexOCREnv # noqa: E402 + + +def vlm_transcribe(image_base64: str, prompt: str, model: str) -> str: + """Run a VLM over the image via the Hugging Face Inference Router.""" + from openai import OpenAI + + client = OpenAI( + base_url="https://router.huggingface.co/v1", + api_key=os.environ["HF_TOKEN"], + ) + completion = client.chat.completions.create( + model=model, + messages=[ + { + "role": "user", + "content": [ + {"type": "text", "text": prompt}, + { + "type": "image_url", + "image_url": {"url": f"data:image/png;base64,{image_base64}"}, + }, + ], + } + ], + ) + text = completion.choices[0].message.content or "" + # Strip common code-fence wrapping so scoring sees raw LaTeX. + text = text.strip() + for fence in ("```latex", "```LaTeX", "```"): + if text.startswith(fence): + text = text[len(fence) :] + if text.endswith("```"): + text = text[:-3] + return text.strip() + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--base-url", default="http://localhost:8000") + parser.add_argument("--split", default="test") + parser.add_argument("--num", type=int, default=3, help="Tasks to run") + parser.add_argument( + "--model", + default=os.environ.get("LATEX_OCR_MODEL", "Qwen/Qwen2.5-VL-7B-Instruct"), + help="VLM served via the HF router (append :provider to pin, e.g. ':nebius').", + ) + args = parser.parse_args() + + use_vlm = bool(os.environ.get("HF_TOKEN")) + if not use_vlm: + print("HF_TOKEN not set -> running plumbing-only policy (no VLM).\n") + + with LatexOCREnv(base_url=args.base_url).sync() as env: + # --- Task API --- + splits = env.list_splits() + n = env.num_tasks(args.split) + print(f"splits = {splits}") + print(f"num_tasks({args.split}) = {n}") + print(f"get_task({args.split}, 0) = {env.get_task(args.split, 0)}\n") + + rewards = [] + seen_targets = [] + for i in range(min(args.num, n)): + # In stream mode `index` is ignored — reset() pulls the next sample. + result = env.reset(split=args.split, index=i) + obs = result.observation + prog = "" + if obs.total and obs.total > 0: + prog = ( + f" | progress: {obs.index}/{obs.total} " + f"({obs.pct_done:.4%}), remaining={obs.remaining}" + ) + print( + f"[task {obs.task_id}] image bytes(b64)={len(obs.image_base64)}{prog}" + ) + + if use_vlm: + prediction = vlm_transcribe(obs.image_base64, obs.prompt, args.model) + else: + prediction = "" # plumbing check only + + result = env.step(LatexOCRAction(latex=prediction)) + o = result.observation + rewards.append(result.reward) + seen_targets.append(o.target_latex) + print(f" predicted : {o.predicted_latex[:80]!r}") + print(f" target : {o.target_latex[:80]!r}") + print( + f" reward={result.reward:.4f} exact={o.exact_match} " + f"cer={o.char_error_rate:.4f}\n" + ) + + if rewards: + print( + f"\nmean reward over {len(rewards)} tasks = {sum(rewards) / len(rewards):.4f}" + ) + uniq = len(set(seen_targets)) + print(f"no-repeat check: {uniq}/{len(seen_targets)} distinct targets") + + +if __name__ == "__main__": + main() diff --git a/tests/envs/test_latex_ocr_rubric.py b/tests/envs/test_latex_ocr_rubric.py new file mode 100644 index 000000000..61fe8de60 --- /dev/null +++ b/tests/envs/test_latex_ocr_rubric.py @@ -0,0 +1,83 @@ +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. + +"""Tests for the LaTeX OCR reward rubric. + +The rubric only depends on the standard library, so we load it directly from +its file to keep the test fast and free of the environment's runtime deps +(datasets, pillow, openenv server). +""" + +import importlib.util +import pathlib +import sys + +import pytest + + +_RUBRIC_PATH = ( + pathlib.Path(__file__).parents[2] + / "envs" + / "latex_ocr_env" + / "server" + / "rubric.py" +) +_spec = importlib.util.spec_from_file_location("latex_ocr_rubric", _RUBRIC_PATH) +rubric = importlib.util.module_from_spec(_spec) +# Register before exec so dataclasses in the module can resolve their module. +sys.modules[_spec.name] = rubric +_spec.loader.exec_module(rubric) + + +def test_levenshtein_basic(): + assert rubric.levenshtein("abc", "abc") == 0 + assert rubric.levenshtein("abc", "abd") == 1 + assert rubric.levenshtein("", "abc") == 3 + assert rubric.levenshtein("kitten", "sitting") == 3 + + +def test_normalize_collapses_whitespace(): + assert rubric.normalize_latex(" x ^ 2 ") == "x ^ 2" + assert rubric.normalize_latex("a\n\tb") == "a b" + + +def test_exact_match_scores_one(): + g = rubric.LatexOCRRubric().grade("x^2 + 1", "x^2 + 1") + assert g.exact_match is True + assert g.reward == pytest.approx(1.0) + assert g.char_error_rate == pytest.approx(0.0) + + +def test_whitespace_only_diff_is_exact(): + # LaTeX spacing is cosmetic: "x ^ 2 + 1" == "x^2+1" after canonicalization. + g = rubric.LatexOCRRubric().grade("x ^ 2 + 1", "x^2+1") + assert g.exact_match is True + assert g.reward == pytest.approx(1.0) + + +def test_partial_match_is_between_zero_and_exact_cap(): + g = rubric.LatexOCRRubric(exact_weight=0.2).grade("x^2 + 2", "x^2 + 1") + assert g.exact_match is False + # partial answers are capped at (1 - exact_weight) + assert 0.0 < g.reward <= 0.8 + assert 0.0 < g.char_error_rate < 1.0 + + +def test_empty_prediction_scores_zero(): + g = rubric.LatexOCRRubric().grade("", "x^2 + 1") + assert g.reward == pytest.approx(0.0) + assert g.char_error_rate == pytest.approx(1.0) + + +def test_empty_target_only_empty_prediction_correct(): + r = rubric.LatexOCRRubric() + assert r.grade("", "").exact_match is True + assert r.grade("x", "").exact_match is False + + +def test_exact_weight_bounds_validated(): + with pytest.raises(ValueError): + rubric.LatexOCRRubric(exact_weight=1.5) From a7b1d7771c1bbd586b8b2096defe57ec688503bc Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Wed, 22 Jul 2026 23:54:44 +0530 Subject: [PATCH 02/17] Make server concurrency configurable (LATEX_OCR_MAX_SESSIONS, default 16) Pass max_concurrent_envs to create_app so multiple rollouts / UI users can run concurrent sessions; overridable via the LATEX_OCR_MAX_SESSIONS env var. --- envs/latex_ocr_env/server/app.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/envs/latex_ocr_env/server/app.py b/envs/latex_ocr_env/server/app.py index 415ca840b..475f3167a 100644 --- a/envs/latex_ocr_env/server/app.py +++ b/envs/latex_ocr_env/server/app.py @@ -18,6 +18,8 @@ python -m server.app """ +import os + try: from openenv.core.env_server import create_app @@ -36,6 +38,7 @@ LatexOCRAction, LatexOCRObservation, env_name="latex_ocr_env", + max_concurrent_envs=int(os.environ.get("LATEX_OCR_MAX_SESSIONS", "16")), gradio_builder=latex_ocr_ui_builder, custom_tab_name="Try it", custom_tab_primary=True, From a9fa1769b2d30641faebb255e35ad1790ba2d926 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 01:28:03 +0530 Subject: [PATCH 03/17] Composable reward rubric: add structural-validity + length/format components Refactor LatexOCRRubric into a weighted sum of named components (each in [0,1], weights renormalized -> reward in [0,1], tunable via env vars): - edit_similarity (1 - CER) LATEX_OCR_W_EDIT (0.6) - exact_match LATEX_OCR_W_EXACT (0.2) - structural_validity (balanced delimiters + parseable LATEX_OCR_W_STRUCT (0.1) LaTeX via optional pylatexenc) - length_format (length agreement + no code fences) LATEX_OCR_W_LENFMT (0.1) Per-component scores are surfaced in observation.reward_components and metadata for training introspection. Empty prediction vs non-empty target scores 0 (no floor credit). pylatexenc is optional (structural check degrades to a balance check without it). Tests + docs updated. --- envs/latex_ocr_env/README.md | 19 +- envs/latex_ocr_env/models.py | 7 + envs/latex_ocr_env/openenv.yaml | 13 +- envs/latex_ocr_env/pyproject.toml | 2 + .../server/latex_ocr_environment.py | 7 +- envs/latex_ocr_env/server/rubric.py | 165 +++++++++++++----- envs/latex_ocr_env/uv.lock | 8 + tests/envs/test_latex_ocr_rubric.py | 47 ++++- 8 files changed, 212 insertions(+), 56 deletions(-) diff --git a/envs/latex_ocr_env/README.md b/envs/latex_ocr_env/README.md index b09b62380..9e63e1a86 100644 --- a/envs/latex_ocr_env/README.md +++ b/envs/latex_ocr_env/README.md @@ -18,11 +18,20 @@ transcription, served through OpenEnv. - **Dataset**: tasks are served from a Hugging Face dataset (default [`unsloth/LaTeX_OCR`](https://huggingface.co/datasets/unsloth/LaTeX_OCR): `image` + `text` columns, `train`/`test` splits) via the OpenEnv **Task API**. -- **Reward**: `(1 - exact_weight) * (1 - CER) + exact_weight * exact_match`, - where `CER` is the normalized character edit distance over whitespace-collapsed - LaTeX. Partial answers score in `[0, 0.8]`; only an exact match reaches `1.0`. - Computed **server-side** against the hidden ground truth — the agent never - sees the target on `reset`. +- **Reward**: a **weighted sum of named components** (each in `[0, 1]`, weights + renormalized so the reward is in `[0, 1]`), computed **server-side** against + the hidden ground truth (the agent never sees the target on `reset`): + + | Component | Default weight | Env var | Meaning | + |---|---|---|---| + | `edit_similarity` | 0.6 | `LATEX_OCR_W_EDIT` | `1 − CER` (normalized char edit distance) | + | `exact_match` | 0.2 | `LATEX_OCR_W_EXACT` | `1.0` iff canonical strings match | + | `structural_validity` | 0.1 | `LATEX_OCR_W_STRUCT` | balanced delimiters + parseable LaTeX (`pylatexenc`) | + | `length_format` | 0.1 | `LATEX_OCR_W_LENFMT` | length agreement + no code fences | + + All sub-scores are returned in `observation.reward_components` (and + `metadata`) for logging. An empty prediction against a non-empty target + scores `0` (no floor credit). ## Episode diff --git a/envs/latex_ocr_env/models.py b/envs/latex_ocr_env/models.py index b47d00685..b43fb2d40 100644 --- a/envs/latex_ocr_env/models.py +++ b/envs/latex_ocr_env/models.py @@ -12,6 +12,8 @@ is computed server-side against the hidden ground-truth LaTeX. """ +from typing import Dict + from openenv.core.env_server.types import Action, Observation from pydantic import Field @@ -85,3 +87,8 @@ class LatexOCRObservation(Observation): default=1.0, description="Normalized Levenshtein distance between prediction and target.", ) + reward_components: Dict[str, float] = Field( + default_factory=dict, + description="Per-component reward scores (edit_similarity, exact_match, " + "structural_validity, length_format).", + ) diff --git a/envs/latex_ocr_env/openenv.yaml b/envs/latex_ocr_env/openenv.yaml index 4004107f9..89b5272e2 100644 --- a/envs/latex_ocr_env/openenv.yaml +++ b/envs/latex_ocr_env/openenv.yaml @@ -19,13 +19,18 @@ environment: image_column: image # LATEX_OCR_IMAGE_COLUMN text_column: text # LATEX_OCR_TEXT_COLUMN splits: "train,test" # LATEX_OCR_SPLITS - exact_weight: 0.2 -# Reward definition +# Reward definition: weighted sum of named components, each in [0, 1]. +# Weights are renormalized so the reward is always in [0, 1]. rubric: name: LatexOCRRubric - formula: "(1 - exact_weight) * (1 - CER) + exact_weight * exact_match" - cer: "normalized Levenshtein distance over whitespace-collapsed LaTeX" + formula: "sum(weight_i * component_i)" + components: + edit_similarity: "1 - CER (normalized char edit distance)" # LATEX_OCR_W_EDIT (0.6) + exact_match: "1.0 iff canonical strings match exactly" # LATEX_OCR_W_EXACT (0.2) + structural_validity: "balanced delimiters + parseable LaTeX" # LATEX_OCR_W_STRUCT (0.1) + length_format: "length agreement + no code fences" # LATEX_OCR_W_LENFMT (0.1) + notes: "empty prediction vs non-empty target scores 0 (no floor credit)" # Task API (dataset discovery) — auto-exposed by the OpenEnv server task_api: diff --git a/envs/latex_ocr_env/pyproject.toml b/envs/latex_ocr_env/pyproject.toml index be5288bfe..2151ad24d 100644 --- a/envs/latex_ocr_env/pyproject.toml +++ b/envs/latex_ocr_env/pyproject.toml @@ -20,6 +20,8 @@ dependencies = [ "datasets>=4.0.0", "pillow>=10.0.0", "requests>=2.31.0", + # Optional structural-validity check in the rubric (graceful fallback if absent). + "pylatexenc>=2.10", ] [project.optional-dependencies] diff --git a/envs/latex_ocr_env/server/latex_ocr_environment.py b/envs/latex_ocr_env/server/latex_ocr_environment.py index 8b7735ac2..d00746c34 100644 --- a/envs/latex_ocr_env/server/latex_ocr_environment.py +++ b/envs/latex_ocr_env/server/latex_ocr_environment.py @@ -112,13 +112,13 @@ class LatexOCREnvironment(Environment): def __init__( self, dataset_name: str = DEFAULT_DATASET, - exact_weight: float = 0.2, mode: str = DEFAULT_MODE, ) -> None: super().__init__() self.dataset_name = dataset_name self.mode = mode - self._rubric = LatexOCRRubric(exact_weight=exact_weight) + # Component weights are read from env vars by the rubric (see rubric.py). + self._rubric = LatexOCRRubric() self._state = State(episode_id=str(uuid4()), step_count=0) self._target: Optional[str] = None self._current_split: str = "" @@ -294,6 +294,7 @@ def step(self, action: LatexOCRAction, **kwargs: Any) -> LatexOCRObservation: target_latex=self._target, exact_match=result.exact_match, char_error_rate=result.char_error_rate, + reward_components=result.components, total=total, remaining=(total - self._cursor) if (self.mode == "stream" and total > 0) @@ -304,6 +305,8 @@ def step(self, action: LatexOCRAction, **kwargs: Any) -> LatexOCRObservation: metadata={ "exact_match": result.exact_match, "char_error_rate": result.char_error_rate, + "reward_components": result.components, + "reward_weights": result.weights, "mode": self.mode, }, ) diff --git a/envs/latex_ocr_env/server/rubric.py b/envs/latex_ocr_env/server/rubric.py index c2cb1f835..4bcf2a372 100644 --- a/envs/latex_ocr_env/server/rubric.py +++ b/envs/latex_ocr_env/server/rubric.py @@ -7,36 +7,45 @@ """ Reward computation for the LaTeX OCR environment. -The reward blends a dense similarity signal with an exact-match bonus, which is -the standard shape for OCR-style RL where exact-string reward is too sparse: +The reward is a **weighted sum of named components**, each in ``[0, 1]``: - reward = (1 - exact_weight) * (1 - CER) + exact_weight * exact_match + reward = Σ w_i · component_i (weights normalized to sum to 1) -where ``CER`` is the normalized character error rate (Levenshtein distance over -the longer normalized string). A perfect transcription scores 1.0; a partial -transcription is capped at ``1 - exact_weight`` so the policy is always pulled -toward getting the expression *exactly* right. +Components: + - ``edit_similarity`` — 1 − CER (normalized char edit distance), dense. + - ``exact_match`` — 1.0 iff the canonical strings match exactly. + - ``structural_validity`` — balanced delimiters (+ parseable LaTeX if + ``pylatexenc`` is available). Rewards well-formed output. + - ``length_format`` — length agreement + format cleanliness (no code + fences). Discourages runaway / fenced output. -Implemented with a pure-Python Levenshtein so the environment carries no extra -runtime dependency. +Weights default via env vars (``LATEX_OCR_W_EDIT`` / ``_EXACT`` / ``_STRUCT`` / +``_LENFMT``) and are renormalized so the reward always lands in ``[0, 1]``. All +sub-scores are returned for logging so training can introspect them. + +Implemented with a pure-Python Levenshtein; ``pylatexenc`` is an optional +enhancement (structural check degrades gracefully to a balance check without it). """ from __future__ import annotations +import os import re -from dataclasses import dataclass +from dataclasses import dataclass, field _WHITESPACE = re.compile(r"\s+") +DEFAULT_WEIGHTS = { + "edit_similarity": float(os.environ.get("LATEX_OCR_W_EDIT", "0.6")), + "exact_match": float(os.environ.get("LATEX_OCR_W_EXACT", "0.2")), + "structural_validity": float(os.environ.get("LATEX_OCR_W_STRUCT", "0.1")), + "length_format": float(os.environ.get("LATEX_OCR_W_LENFMT", "0.1")), +} -def normalize_latex(text: str) -> str: - """Canonicalize LaTeX for comparison. - Collapses runs of whitespace to single spaces and strips leading/trailing - space. Deliberately conservative: it does not reorder tokens or rewrite - commands, so it never inflates the score by "fixing" a wrong answer. - """ +def normalize_latex(text: str) -> str: + """Collapse whitespace runs to single spaces and strip.""" return _WHITESPACE.sub(" ", text or "").strip() @@ -52,7 +61,6 @@ def levenshtein(a: str, b: str) -> int: return len(b) if not b: return len(a) - previous = list(range(len(b) + 1)) for i, ca in enumerate(a, start=1): current = [i] @@ -65,49 +73,128 @@ def levenshtein(a: str, b: str) -> int: return previous[-1] +def _delimiters_balanced(text: str) -> bool: + """Braces/brackets/parens nest correctly and \\left/\\right counts match.""" + opposite = {")": "(", "]": "[", "}": "{"} + stack: list[str] = [] + for ch in text: + if ch in "([{": + stack.append(ch) + elif ch in ")]}": + if not stack or stack.pop() != opposite[ch]: + return False + if stack: + return False + return text.count(r"\left") == text.count(r"\right") + + +def _parseable(text: str) -> bool | None: + """True/False if pylatexenc can walk the LaTeX; None if pylatexenc absent.""" + try: + from pylatexenc.latexwalker import LatexWalker + except Exception: + return None + try: + LatexWalker(text).get_latex_nodes() + return True + except Exception: + return False + + @dataclass class GradeResult: reward: float exact_match: bool char_error_rate: float + components: dict = field(default_factory=dict) + weights: dict = field(default_factory=dict) class LatexOCRRubric: - """Normalized edit distance + exact-match bonus. + """Weighted-sum rubric over named reward components. Args: - exact_weight: Fraction of the reward reserved for an exact match. With - the default 0.2, partial answers score in ``[0, 0.8]`` and only an - exact (whitespace-insensitive) match reaches ``1.0``. + weights: component -> weight. Defaults from env vars; renormalized so the + reward is always in ``[0, 1]``. Unknown keys are ignored; missing + keys default to 0. """ - def __init__(self, exact_weight: float = 0.2) -> None: - if not 0.0 <= exact_weight <= 1.0: - raise ValueError("exact_weight must be in [0, 1]") - self.exact_weight = exact_weight - - def grade(self, prediction: str, target: str) -> GradeResult: - # LaTeX spacing is largely cosmetic, so both the dense (edit-distance) - # term and the exact-match term score on the whitespace-stripped form. - # This keeps them consistent: an exact match => CER 0 => reward 1.0. - pred_canon = _strip_all_whitespace(normalize_latex(prediction)) - target_canon = _strip_all_whitespace(normalize_latex(target)) - + COMPONENTS = ( + "edit_similarity", + "exact_match", + "structural_validity", + "length_format", + ) + + def __init__(self, weights: dict | None = None) -> None: + raw = dict(DEFAULT_WEIGHTS if weights is None else weights) + for name, w in raw.items(): + if name in self.COMPONENTS and w < 0: + raise ValueError(f"weight for {name} must be non-negative") + picked = {k: float(raw.get(k, 0.0)) for k in self.COMPONENTS} + total = sum(picked.values()) + if total <= 0: + raise ValueError("at least one component weight must be positive") + self.weights = {k: v / total for k, v in picked.items()} + + # --- individual components (each returns a score in [0, 1]) --- + def _edit_and_exact( + self, pred_canon: str, target_canon: str + ) -> tuple[float, bool, float]: exact = pred_canon == target_canon - if not target_canon: - # Degenerate target: only an empty prediction is correct. cer = 0.0 if not pred_canon else 1.0 else: distance = levenshtein(pred_canon, target_canon) cer = min(1.0, distance / max(len(pred_canon), len(target_canon))) + return 1.0 - cer, exact, cer + + def _structural(self, pred_norm: str) -> float: + balanced = _delimiters_balanced(pred_norm) + parseable = _parseable(pred_norm) + if parseable is None: # pylatexenc not installed -> balance only + return 1.0 if balanced else 0.0 + return 0.5 * float(balanced) + 0.5 * float(parseable) + + def _length_format( + self, prediction: str, pred_canon: str, target_canon: str + ) -> float: + fmt_clean = 0.0 if "```" in prediction else 1.0 + lp, lt = len(pred_canon), len(target_canon) + length_ratio = 1.0 if max(lp, lt) == 0 else min(lp, lt) / max(lp, lt) + return 0.5 * fmt_clean + 0.5 * length_ratio - similarity = 1.0 - cer - reward = (1.0 - self.exact_weight) * similarity + self.exact_weight * float( - exact - ) + def grade(self, prediction: str, target: str) -> GradeResult: + # Canonical (whitespace-stripped) forms: LaTeX spacing is cosmetic. + pred_norm = normalize_latex(prediction) + target_norm = normalize_latex(target) + pred_canon = _strip_all_whitespace(pred_norm) + target_canon = _strip_all_whitespace(target_norm) + + # An empty prediction against a non-empty target earns nothing: the + # auxiliary components must not hand out floor credit for "no answer". + if not pred_canon and target_canon: + zero = {k: 0.0 for k in self.COMPONENTS} + return GradeResult( + reward=0.0, + exact_match=False, + char_error_rate=1.0, + components=zero, + weights={k: round(v, 6) for k, v in self.weights.items()}, + ) + + edit_sim, exact, cer = self._edit_and_exact(pred_canon, target_canon) + components = { + "edit_similarity": edit_sim, + "exact_match": float(exact), + "structural_validity": self._structural(pred_norm), + "length_format": self._length_format(prediction, pred_canon, target_canon), + } + reward = sum(self.weights[k] * components[k] for k in self.COMPONENTS) return GradeResult( reward=round(reward, 6), exact_match=exact, char_error_rate=round(cer, 6), + components={k: round(v, 6) for k, v in components.items()}, + weights={k: round(v, 6) for k, v in self.weights.items()}, ) diff --git a/envs/latex_ocr_env/uv.lock b/envs/latex_ocr_env/uv.lock index 64ebc5d2e..95e384416 100644 --- a/envs/latex_ocr_env/uv.lock +++ b/envs/latex_ocr_env/uv.lock @@ -2088,6 +2088,7 @@ dependencies = [ { name = "datasets" }, { name = "openenv" }, { name = "pillow" }, + { name = "pylatexenc" }, { name = "requests" }, ] @@ -2103,6 +2104,7 @@ requires-dist = [ { name = "openai", marker = "extra == 'dev'", specifier = ">=1.40.0" }, { name = "openenv", specifier = ">=0.4.1" }, { name = "pillow", specifier = ">=10.0.0" }, + { name = "pylatexenc", specifier = ">=2.10" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0.0" }, { name = "requests", specifier = ">=2.31.0" }, ] @@ -2868,6 +2870,12 @@ crypto = [ { name = "cryptography" }, ] +[[package]] +name = "pylatexenc" +version = "2.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5d/ab/34ec41718af73c00119d0351b7a2531d2ebddb51833a36448fc7b862be60/pylatexenc-2.10.tar.gz", hash = "sha256:3dd8fd84eb46dc30bee1e23eaab8d8fb5a7f507347b23e5f38ad9675c84f40d3", size = 162597, upload-time = "2021-04-06T07:56:07.854Z" } + [[package]] name = "pyperclip" version = "1.11.0" diff --git a/tests/envs/test_latex_ocr_rubric.py b/tests/envs/test_latex_ocr_rubric.py index 61fe8de60..869c31578 100644 --- a/tests/envs/test_latex_ocr_rubric.py +++ b/tests/envs/test_latex_ocr_rubric.py @@ -58,18 +58,19 @@ def test_whitespace_only_diff_is_exact(): assert g.reward == pytest.approx(1.0) -def test_partial_match_is_between_zero_and_exact_cap(): - g = rubric.LatexOCRRubric(exact_weight=0.2).grade("x^2 + 2", "x^2 + 1") +def test_partial_match_is_between_zero_and_one(): + g = rubric.LatexOCRRubric().grade("x^2 + 2", "x^2 + 1") assert g.exact_match is False - # partial answers are capped at (1 - exact_weight) - assert 0.0 < g.reward <= 0.8 + assert 0.0 < g.reward < 1.0 assert 0.0 < g.char_error_rate < 1.0 def test_empty_prediction_scores_zero(): + # No auxiliary floor credit for an empty answer. g = rubric.LatexOCRRubric().grade("", "x^2 + 1") assert g.reward == pytest.approx(0.0) assert g.char_error_rate == pytest.approx(1.0) + assert all(v == 0.0 for v in g.components.values()) def test_empty_target_only_empty_prediction_correct(): @@ -78,6 +79,40 @@ def test_empty_target_only_empty_prediction_correct(): assert r.grade("x", "").exact_match is False -def test_exact_weight_bounds_validated(): +def test_reports_component_breakdown(): + g = rubric.LatexOCRRubric().grade("x^2 + 1", "x^2 + 1") + assert set(g.components) == { + "edit_similarity", + "exact_match", + "structural_validity", + "length_format", + } + assert g.weights and pytest.approx(sum(g.weights.values()), abs=1e-6) == 1.0 + + +def test_structural_validity_penalizes_unbalanced_delimiters(): + r = rubric.LatexOCRRubric() + good = r.grade("{ x }", "{ y }").components["structural_validity"] + bad = r.grade("{ x ", "{ y }").components["structural_validity"] + assert bad < good + + +def test_length_format_penalizes_code_fences(): + r = rubric.LatexOCRRubric() + clean = r.grade("x^2", "x^2").components["length_format"] + fenced = r.grade("```latex\nx^2\n```", "x^2").components["length_format"] + assert fenced < clean + + +def test_weights_configurable_and_renormalized(): + # Only reward exact match -> partial answer scores 0. + r = rubric.LatexOCRRubric(weights={"exact_match": 1.0}) + assert r.grade("x^2 + 2", "x^2 + 1").reward == pytest.approx(0.0) + assert r.grade("x^2 + 1", "x^2 + 1").reward == pytest.approx(1.0) + + +def test_weight_validation(): + with pytest.raises(ValueError): + rubric.LatexOCRRubric(weights={"edit_similarity": -1.0}) with pytest.raises(ValueError): - rubric.LatexOCRRubric(exact_weight=1.5) + rubric.LatexOCRRubric(weights={"edit_similarity": 0.0}) From 4b57f66209f5d656203a2602f080cba82b70ab2f Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 01:31:47 +0530 Subject: [PATCH 04/17] Fix Gradio UI reward display: read top-level reward + show component breakdown --- envs/latex_ocr_env/server/gradio_ui.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/envs/latex_ocr_env/server/gradio_ui.py b/envs/latex_ocr_env/server/gradio_ui.py index 7e3f4e261..1113e21e6 100644 --- a/envs/latex_ocr_env/server/gradio_ui.py +++ b/envs/latex_ocr_env/server/gradio_ui.py @@ -117,13 +117,22 @@ async def on_score(prediction: str): except Exception as e: return f"⚠️ {e}. Click **Get next task** first.", "" o = _obs(result) - reward = o.get("reward") + # The server serializes reward at the top level; fall back to the + # observation for older cores. + reward = result.get("reward") if isinstance(result, dict) else None + if reward is None: + reward = o.get("reward") reward = reward if reward is not None else 0.0 mark = "🎯 **exact match**" if o.get("exact_match") else "≈ partial" + comps = o.get("reward_components") or {} + comp_lines = "\n".join( + f" - `{name}`: `{score:.4f}`" for name, score in comps.items() + ) md = ( f"### Reward: `{reward:.4f}` {mark}\n" f"- character error rate: `{o.get('char_error_rate', 1.0):.4f}`\n" - f"- exact match: `{o.get('exact_match', False)}`" + f"- exact match: `{o.get('exact_match', False)}`\n" + + (f"- components:\n{comp_lines}" if comp_lines else "") ) return md, o.get("target_latex", "") From 367f33653710521e247bbd836832bc118cf8d3b2 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 02:00:38 +0530 Subject: [PATCH 05/17] Revert to simple dense reward for training stability The composable structural-validity + length/format components introduced discontinuous (partly binary) terms that made the reward spiky and training unstable. Roll the rubric back to the smooth dense signal: reward = 0.8 * (1 - CER) + 0.2 * exact_match Removes the extra components, the reward_components field, weight env vars, and the pylatexenc dependency. Keeps the Gradio UI fix that reads reward from the top-level step result (observation.reward is None after server serialization). --- envs/latex_ocr_env/README.md | 19 +-- envs/latex_ocr_env/models.py | 7 - envs/latex_ocr_env/openenv.yaml | 13 +- envs/latex_ocr_env/pyproject.toml | 2 - envs/latex_ocr_env/server/gradio_ui.py | 7 +- .../server/latex_ocr_environment.py | 7 +- envs/latex_ocr_env/server/rubric.py | 156 ++++-------------- envs/latex_ocr_env/uv.lock | 8 - tests/envs/test_latex_ocr_rubric.py | 47 +----- 9 files changed, 49 insertions(+), 217 deletions(-) diff --git a/envs/latex_ocr_env/README.md b/envs/latex_ocr_env/README.md index 9e63e1a86..ecb115bda 100644 --- a/envs/latex_ocr_env/README.md +++ b/envs/latex_ocr_env/README.md @@ -18,20 +18,11 @@ transcription, served through OpenEnv. - **Dataset**: tasks are served from a Hugging Face dataset (default [`unsloth/LaTeX_OCR`](https://huggingface.co/datasets/unsloth/LaTeX_OCR): `image` + `text` columns, `train`/`test` splits) via the OpenEnv **Task API**. -- **Reward**: a **weighted sum of named components** (each in `[0, 1]`, weights - renormalized so the reward is in `[0, 1]`), computed **server-side** against - the hidden ground truth (the agent never sees the target on `reset`): - - | Component | Default weight | Env var | Meaning | - |---|---|---|---| - | `edit_similarity` | 0.6 | `LATEX_OCR_W_EDIT` | `1 − CER` (normalized char edit distance) | - | `exact_match` | 0.2 | `LATEX_OCR_W_EXACT` | `1.0` iff canonical strings match | - | `structural_validity` | 0.1 | `LATEX_OCR_W_STRUCT` | balanced delimiters + parseable LaTeX (`pylatexenc`) | - | `length_format` | 0.1 | `LATEX_OCR_W_LENFMT` | length agreement + no code fences | - - All sub-scores are returned in `observation.reward_components` (and - `metadata`) for logging. An empty prediction against a non-empty target - scores `0` (no floor credit). +- **Reward**: `(1 - exact_weight) * (1 - CER) + exact_weight * exact_match`, + where `CER` is the normalized character edit distance over whitespace-stripped + LaTeX. Partial answers score in `[0, 0.8]`; only an exact match reaches `1.0`. + Computed **server-side** against the hidden ground truth — the agent never + sees the target on `reset`. Dense and smooth, for stable RL training. ## Episode diff --git a/envs/latex_ocr_env/models.py b/envs/latex_ocr_env/models.py index b43fb2d40..b47d00685 100644 --- a/envs/latex_ocr_env/models.py +++ b/envs/latex_ocr_env/models.py @@ -12,8 +12,6 @@ is computed server-side against the hidden ground-truth LaTeX. """ -from typing import Dict - from openenv.core.env_server.types import Action, Observation from pydantic import Field @@ -87,8 +85,3 @@ class LatexOCRObservation(Observation): default=1.0, description="Normalized Levenshtein distance between prediction and target.", ) - reward_components: Dict[str, float] = Field( - default_factory=dict, - description="Per-component reward scores (edit_similarity, exact_match, " - "structural_validity, length_format).", - ) diff --git a/envs/latex_ocr_env/openenv.yaml b/envs/latex_ocr_env/openenv.yaml index 89b5272e2..b0093d297 100644 --- a/envs/latex_ocr_env/openenv.yaml +++ b/envs/latex_ocr_env/openenv.yaml @@ -19,18 +19,13 @@ environment: image_column: image # LATEX_OCR_IMAGE_COLUMN text_column: text # LATEX_OCR_TEXT_COLUMN splits: "train,test" # LATEX_OCR_SPLITS + exact_weight: 0.2 -# Reward definition: weighted sum of named components, each in [0, 1]. -# Weights are renormalized so the reward is always in [0, 1]. +# Reward definition rubric: name: LatexOCRRubric - formula: "sum(weight_i * component_i)" - components: - edit_similarity: "1 - CER (normalized char edit distance)" # LATEX_OCR_W_EDIT (0.6) - exact_match: "1.0 iff canonical strings match exactly" # LATEX_OCR_W_EXACT (0.2) - structural_validity: "balanced delimiters + parseable LaTeX" # LATEX_OCR_W_STRUCT (0.1) - length_format: "length agreement + no code fences" # LATEX_OCR_W_LENFMT (0.1) - notes: "empty prediction vs non-empty target scores 0 (no floor credit)" + formula: "(1 - exact_weight) * (1 - CER) + exact_weight * exact_match" + cer: "normalized Levenshtein distance over whitespace-stripped LaTeX" # Task API (dataset discovery) — auto-exposed by the OpenEnv server task_api: diff --git a/envs/latex_ocr_env/pyproject.toml b/envs/latex_ocr_env/pyproject.toml index 2151ad24d..be5288bfe 100644 --- a/envs/latex_ocr_env/pyproject.toml +++ b/envs/latex_ocr_env/pyproject.toml @@ -20,8 +20,6 @@ dependencies = [ "datasets>=4.0.0", "pillow>=10.0.0", "requests>=2.31.0", - # Optional structural-validity check in the rubric (graceful fallback if absent). - "pylatexenc>=2.10", ] [project.optional-dependencies] diff --git a/envs/latex_ocr_env/server/gradio_ui.py b/envs/latex_ocr_env/server/gradio_ui.py index 1113e21e6..69c3cd949 100644 --- a/envs/latex_ocr_env/server/gradio_ui.py +++ b/envs/latex_ocr_env/server/gradio_ui.py @@ -124,15 +124,10 @@ async def on_score(prediction: str): reward = o.get("reward") reward = reward if reward is not None else 0.0 mark = "🎯 **exact match**" if o.get("exact_match") else "≈ partial" - comps = o.get("reward_components") or {} - comp_lines = "\n".join( - f" - `{name}`: `{score:.4f}`" for name, score in comps.items() - ) md = ( f"### Reward: `{reward:.4f}` {mark}\n" f"- character error rate: `{o.get('char_error_rate', 1.0):.4f}`\n" - f"- exact match: `{o.get('exact_match', False)}`\n" - + (f"- components:\n{comp_lines}" if comp_lines else "") + f"- exact match: `{o.get('exact_match', False)}`" ) return md, o.get("target_latex", "") diff --git a/envs/latex_ocr_env/server/latex_ocr_environment.py b/envs/latex_ocr_env/server/latex_ocr_environment.py index d00746c34..8b7735ac2 100644 --- a/envs/latex_ocr_env/server/latex_ocr_environment.py +++ b/envs/latex_ocr_env/server/latex_ocr_environment.py @@ -112,13 +112,13 @@ class LatexOCREnvironment(Environment): def __init__( self, dataset_name: str = DEFAULT_DATASET, + exact_weight: float = 0.2, mode: str = DEFAULT_MODE, ) -> None: super().__init__() self.dataset_name = dataset_name self.mode = mode - # Component weights are read from env vars by the rubric (see rubric.py). - self._rubric = LatexOCRRubric() + self._rubric = LatexOCRRubric(exact_weight=exact_weight) self._state = State(episode_id=str(uuid4()), step_count=0) self._target: Optional[str] = None self._current_split: str = "" @@ -294,7 +294,6 @@ def step(self, action: LatexOCRAction, **kwargs: Any) -> LatexOCRObservation: target_latex=self._target, exact_match=result.exact_match, char_error_rate=result.char_error_rate, - reward_components=result.components, total=total, remaining=(total - self._cursor) if (self.mode == "stream" and total > 0) @@ -305,8 +304,6 @@ def step(self, action: LatexOCRAction, **kwargs: Any) -> LatexOCRObservation: metadata={ "exact_match": result.exact_match, "char_error_rate": result.char_error_rate, - "reward_components": result.components, - "reward_weights": result.weights, "mode": self.mode, }, ) diff --git a/envs/latex_ocr_env/server/rubric.py b/envs/latex_ocr_env/server/rubric.py index 4bcf2a372..cec3af412 100644 --- a/envs/latex_ocr_env/server/rubric.py +++ b/envs/latex_ocr_env/server/rubric.py @@ -7,42 +7,30 @@ """ Reward computation for the LaTeX OCR environment. -The reward is a **weighted sum of named components**, each in ``[0, 1]``: +A smooth, dense reward: normalized character edit distance with a small +exact-match bonus, which is the standard shape for OCR-style RL where an +exact-string reward alone is too sparse (and discontinuous auxiliary terms make +training spiky): - reward = Σ w_i · component_i (weights normalized to sum to 1) + reward = (1 - exact_weight) * (1 - CER) + exact_weight * exact_match -Components: - - ``edit_similarity`` — 1 − CER (normalized char edit distance), dense. - - ``exact_match`` — 1.0 iff the canonical strings match exactly. - - ``structural_validity`` — balanced delimiters (+ parseable LaTeX if - ``pylatexenc`` is available). Rewards well-formed output. - - ``length_format`` — length agreement + format cleanliness (no code - fences). Discourages runaway / fenced output. +where ``CER`` is the normalized character error rate (Levenshtein distance over +the longer whitespace-stripped string). A perfect transcription scores 1.0; a +partial one is capped at ``1 - exact_weight``. Whitespace-insensitive, since +LaTeX spacing is cosmetic. -Weights default via env vars (``LATEX_OCR_W_EDIT`` / ``_EXACT`` / ``_STRUCT`` / -``_LENFMT``) and are renormalized so the reward always lands in ``[0, 1]``. All -sub-scores are returned for logging so training can introspect them. - -Implemented with a pure-Python Levenshtein; ``pylatexenc`` is an optional -enhancement (structural check degrades gracefully to a balance check without it). +Implemented with a pure-Python Levenshtein so the environment carries no extra +runtime dependency. """ from __future__ import annotations -import os import re -from dataclasses import dataclass, field +from dataclasses import dataclass _WHITESPACE = re.compile(r"\s+") -DEFAULT_WEIGHTS = { - "edit_similarity": float(os.environ.get("LATEX_OCR_W_EDIT", "0.6")), - "exact_match": float(os.environ.get("LATEX_OCR_W_EXACT", "0.2")), - "structural_validity": float(os.environ.get("LATEX_OCR_W_STRUCT", "0.1")), - "length_format": float(os.environ.get("LATEX_OCR_W_LENFMT", "0.1")), -} - def normalize_latex(text: str) -> str: """Collapse whitespace runs to single spaces and strip.""" @@ -73,128 +61,46 @@ def levenshtein(a: str, b: str) -> int: return previous[-1] -def _delimiters_balanced(text: str) -> bool: - """Braces/brackets/parens nest correctly and \\left/\\right counts match.""" - opposite = {")": "(", "]": "[", "}": "{"} - stack: list[str] = [] - for ch in text: - if ch in "([{": - stack.append(ch) - elif ch in ")]}": - if not stack or stack.pop() != opposite[ch]: - return False - if stack: - return False - return text.count(r"\left") == text.count(r"\right") - - -def _parseable(text: str) -> bool | None: - """True/False if pylatexenc can walk the LaTeX; None if pylatexenc absent.""" - try: - from pylatexenc.latexwalker import LatexWalker - except Exception: - return None - try: - LatexWalker(text).get_latex_nodes() - return True - except Exception: - return False - - @dataclass class GradeResult: reward: float exact_match: bool char_error_rate: float - components: dict = field(default_factory=dict) - weights: dict = field(default_factory=dict) class LatexOCRRubric: - """Weighted-sum rubric over named reward components. + """Normalized edit distance + exact-match bonus. Args: - weights: component -> weight. Defaults from env vars; renormalized so the - reward is always in ``[0, 1]``. Unknown keys are ignored; missing - keys default to 0. + exact_weight: fraction of the reward reserved for an exact match. With + the default 0.2, partial answers score in ``[0, 0.8]`` and only an + exact (whitespace-insensitive) match reaches ``1.0``. """ - COMPONENTS = ( - "edit_similarity", - "exact_match", - "structural_validity", - "length_format", - ) - - def __init__(self, weights: dict | None = None) -> None: - raw = dict(DEFAULT_WEIGHTS if weights is None else weights) - for name, w in raw.items(): - if name in self.COMPONENTS and w < 0: - raise ValueError(f"weight for {name} must be non-negative") - picked = {k: float(raw.get(k, 0.0)) for k in self.COMPONENTS} - total = sum(picked.values()) - if total <= 0: - raise ValueError("at least one component weight must be positive") - self.weights = {k: v / total for k, v in picked.items()} - - # --- individual components (each returns a score in [0, 1]) --- - def _edit_and_exact( - self, pred_canon: str, target_canon: str - ) -> tuple[float, bool, float]: + def __init__(self, exact_weight: float = 0.2) -> None: + if not 0.0 <= exact_weight <= 1.0: + raise ValueError("exact_weight must be in [0, 1]") + self.exact_weight = exact_weight + + def grade(self, prediction: str, target: str) -> GradeResult: + # LaTeX spacing is cosmetic, so score on the whitespace-stripped form: + # an exact match => CER 0 => reward 1.0. + pred_canon = _strip_all_whitespace(normalize_latex(prediction)) + target_canon = _strip_all_whitespace(normalize_latex(target)) + exact = pred_canon == target_canon if not target_canon: cer = 0.0 if not pred_canon else 1.0 else: distance = levenshtein(pred_canon, target_canon) cer = min(1.0, distance / max(len(pred_canon), len(target_canon))) - return 1.0 - cer, exact, cer - - def _structural(self, pred_norm: str) -> float: - balanced = _delimiters_balanced(pred_norm) - parseable = _parseable(pred_norm) - if parseable is None: # pylatexenc not installed -> balance only - return 1.0 if balanced else 0.0 - return 0.5 * float(balanced) + 0.5 * float(parseable) - - def _length_format( - self, prediction: str, pred_canon: str, target_canon: str - ) -> float: - fmt_clean = 0.0 if "```" in prediction else 1.0 - lp, lt = len(pred_canon), len(target_canon) - length_ratio = 1.0 if max(lp, lt) == 0 else min(lp, lt) / max(lp, lt) - return 0.5 * fmt_clean + 0.5 * length_ratio - def grade(self, prediction: str, target: str) -> GradeResult: - # Canonical (whitespace-stripped) forms: LaTeX spacing is cosmetic. - pred_norm = normalize_latex(prediction) - target_norm = normalize_latex(target) - pred_canon = _strip_all_whitespace(pred_norm) - target_canon = _strip_all_whitespace(target_norm) - - # An empty prediction against a non-empty target earns nothing: the - # auxiliary components must not hand out floor credit for "no answer". - if not pred_canon and target_canon: - zero = {k: 0.0 for k in self.COMPONENTS} - return GradeResult( - reward=0.0, - exact_match=False, - char_error_rate=1.0, - components=zero, - weights={k: round(v, 6) for k, v in self.weights.items()}, - ) - - edit_sim, exact, cer = self._edit_and_exact(pred_canon, target_canon) - components = { - "edit_similarity": edit_sim, - "exact_match": float(exact), - "structural_validity": self._structural(pred_norm), - "length_format": self._length_format(prediction, pred_canon, target_canon), - } - reward = sum(self.weights[k] * components[k] for k in self.COMPONENTS) + similarity = 1.0 - cer + reward = (1.0 - self.exact_weight) * similarity + self.exact_weight * float( + exact + ) return GradeResult( reward=round(reward, 6), exact_match=exact, char_error_rate=round(cer, 6), - components={k: round(v, 6) for k, v in components.items()}, - weights={k: round(v, 6) for k, v in self.weights.items()}, ) diff --git a/envs/latex_ocr_env/uv.lock b/envs/latex_ocr_env/uv.lock index 95e384416..64ebc5d2e 100644 --- a/envs/latex_ocr_env/uv.lock +++ b/envs/latex_ocr_env/uv.lock @@ -2088,7 +2088,6 @@ dependencies = [ { name = "datasets" }, { name = "openenv" }, { name = "pillow" }, - { name = "pylatexenc" }, { name = "requests" }, ] @@ -2104,7 +2103,6 @@ requires-dist = [ { name = "openai", marker = "extra == 'dev'", specifier = ">=1.40.0" }, { name = "openenv", specifier = ">=0.4.1" }, { name = "pillow", specifier = ">=10.0.0" }, - { name = "pylatexenc", specifier = ">=2.10" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0.0" }, { name = "requests", specifier = ">=2.31.0" }, ] @@ -2870,12 +2868,6 @@ crypto = [ { name = "cryptography" }, ] -[[package]] -name = "pylatexenc" -version = "2.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5d/ab/34ec41718af73c00119d0351b7a2531d2ebddb51833a36448fc7b862be60/pylatexenc-2.10.tar.gz", hash = "sha256:3dd8fd84eb46dc30bee1e23eaab8d8fb5a7f507347b23e5f38ad9675c84f40d3", size = 162597, upload-time = "2021-04-06T07:56:07.854Z" } - [[package]] name = "pyperclip" version = "1.11.0" diff --git a/tests/envs/test_latex_ocr_rubric.py b/tests/envs/test_latex_ocr_rubric.py index 869c31578..61fe8de60 100644 --- a/tests/envs/test_latex_ocr_rubric.py +++ b/tests/envs/test_latex_ocr_rubric.py @@ -58,19 +58,18 @@ def test_whitespace_only_diff_is_exact(): assert g.reward == pytest.approx(1.0) -def test_partial_match_is_between_zero_and_one(): - g = rubric.LatexOCRRubric().grade("x^2 + 2", "x^2 + 1") +def test_partial_match_is_between_zero_and_exact_cap(): + g = rubric.LatexOCRRubric(exact_weight=0.2).grade("x^2 + 2", "x^2 + 1") assert g.exact_match is False - assert 0.0 < g.reward < 1.0 + # partial answers are capped at (1 - exact_weight) + assert 0.0 < g.reward <= 0.8 assert 0.0 < g.char_error_rate < 1.0 def test_empty_prediction_scores_zero(): - # No auxiliary floor credit for an empty answer. g = rubric.LatexOCRRubric().grade("", "x^2 + 1") assert g.reward == pytest.approx(0.0) assert g.char_error_rate == pytest.approx(1.0) - assert all(v == 0.0 for v in g.components.values()) def test_empty_target_only_empty_prediction_correct(): @@ -79,40 +78,6 @@ def test_empty_target_only_empty_prediction_correct(): assert r.grade("x", "").exact_match is False -def test_reports_component_breakdown(): - g = rubric.LatexOCRRubric().grade("x^2 + 1", "x^2 + 1") - assert set(g.components) == { - "edit_similarity", - "exact_match", - "structural_validity", - "length_format", - } - assert g.weights and pytest.approx(sum(g.weights.values()), abs=1e-6) == 1.0 - - -def test_structural_validity_penalizes_unbalanced_delimiters(): - r = rubric.LatexOCRRubric() - good = r.grade("{ x }", "{ y }").components["structural_validity"] - bad = r.grade("{ x ", "{ y }").components["structural_validity"] - assert bad < good - - -def test_length_format_penalizes_code_fences(): - r = rubric.LatexOCRRubric() - clean = r.grade("x^2", "x^2").components["length_format"] - fenced = r.grade("```latex\nx^2\n```", "x^2").components["length_format"] - assert fenced < clean - - -def test_weights_configurable_and_renormalized(): - # Only reward exact match -> partial answer scores 0. - r = rubric.LatexOCRRubric(weights={"exact_match": 1.0}) - assert r.grade("x^2 + 2", "x^2 + 1").reward == pytest.approx(0.0) - assert r.grade("x^2 + 1", "x^2 + 1").reward == pytest.approx(1.0) - - -def test_weight_validation(): - with pytest.raises(ValueError): - rubric.LatexOCRRubric(weights={"edit_similarity": -1.0}) +def test_exact_weight_bounds_validated(): with pytest.raises(ValueError): - rubric.LatexOCRRubric(weights={"edit_similarity": 0.0}) + rubric.LatexOCRRubric(exact_weight=1.5) From e870fbe02417d4af85fb9df96969919c69f4631e Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 08:01:23 +0000 Subject: [PATCH 06/17] Add GRPO + LaTeX-OCR tutorial notebook to examples --- examples/grpo_latex_ocr/README.md | 39 ++ .../grpo_latex_ocr_tutorial.ipynb | 435 ++++++++++++++++++ 2 files changed, 474 insertions(+) create mode 100644 examples/grpo_latex_ocr/README.md create mode 100644 examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb diff --git a/examples/grpo_latex_ocr/README.md b/examples/grpo_latex_ocr/README.md new file mode 100644 index 000000000..2673cf93c --- /dev/null +++ b/examples/grpo_latex_ocr/README.md @@ -0,0 +1,39 @@ +# Training a Vision Model to Read Math with GRPO + OpenEnv + +[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adithya-s-k/OpenEnv/blob/add-latex-ocr-multimodal-streaming-env/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb) + +A beginner-friendly tutorial that uses **GRPO (Group Relative Policy Optimization)** to teach a +**vision-language model** to transcribe images of math formulas into **LaTeX** — with the images +*and* the reward supplied by the [`latex_ocr_env`](../../envs/latex_ocr_env) OpenEnv environment. + +## 🎯 What This Example Shows + +- **OpenEnv as a reward source**: the environment serves each formula image (`reset`) and grades the + model's LaTeX server-side (`step`) — no reward code to write yourself. +- **GRPO with TRL**: `GRPOTrainer` + `environment_factory`, LoRA adapters, on a single GPU. +- **Eval before & after**: score the model on the held-out `test` split (same reward used in + training) to measure the actual improvement (the delta). +- **Live tracking**: reward/loss curves stream to a [Trackio](https://huggingface.co/blog/trackio) + dashboard, embedded right in the notebook. +- **Ship it**: merge the LoRA adapter and push the trained model to the Hub. + +## 📁 Files + +- `grpo_latex_ocr_tutorial.ipynb` — the tutorial notebook (start here) +- `README.md` — this file + +## 🚀 Quick Start + +Open the notebook in Colab (badge above) and run top to bottom. A GPU is required — an **A100** is +recommended for the 4B model; drop to a 2B model or fewer generations on smaller GPUs. + +The notebook is self-contained: it `pip install`s TRL and the environment package, so no local +checkout is needed. By default it connects to the **hosted** environment Space +([`AdithyaSK/latex-ocr-env`](https://huggingface.co/spaces/AdithyaSK/latex-ocr-env)); set +`USE_LOCAL_ENV = True` to run the environment locally instead. + +## 🧩 The Environment + +See [`envs/latex_ocr_env`](../../envs/latex_ocr_env) for the full environment: a dataset-backed, +single-step (bandit) RL task with a weighted, server-side reward (edit similarity, exact match, +structural validity, length/format). It ships `train` and `test` splits. diff --git a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb new file mode 100644 index 000000000..52675bf9e --- /dev/null +++ b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb @@ -0,0 +1,435 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# \ud83e\uddee Teach a Vision Model to Read Math \u2014 GRPO + OpenEnv\n", + "\n", + "Reinforcement-learning a **vision-language model** to turn images of math formulas into **LaTeX**, using TRL's\n", + "`GRPOTrainer` and an **OpenEnv** environment that supplies *both* the image and the reward.\n", + "\n", + "**What you'll do:**\n", + "1. Install + connect to the LaTeX-OCR environment (hosted, or run it locally)\n", + "2. **Evaluate the base model** on held-out test images (a starting score)\n", + "3. **Train** with GRPO (live reward curve on a Trackio dashboard)\n", + "4. **Evaluate again** and see the improvement (the delta)\n", + "5. **Push** your model to the Hub\n", + "\n", + "> \ud83d\udca1 A GPU is required. An **A100** (Colab Pro / a beefy runtime) is recommended for a 4B model; drop to a 2B model or\n", + "> fewer generations on smaller GPUs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Install" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "%%capture\n", + "# trl (from source: VLM + environment_factory) + the LaTeX-OCR OpenEnv package + LoRA/util deps\n", + "!pip install -q \"trl @ git+https://github.com/huggingface/trl.git\" \\\n", + " \"openenv-latex_ocr_env @ git+https://github.com/adithya-s-k/OpenEnv.git@add-latex-ocr-multimodal-streaming-env#subdirectory=envs/latex_ocr_env\" \\\n", + " peft trackio fastmcp websockets jmespath hf_transfer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## \ud83d\udd11 Log in to Hugging Face\n", + "\n", + "You need a free HF account and a **token with _write_ access** \u2014 create one at\n", + "[huggingface.co/settings/tokens](https://huggingface.co/settings/tokens). The token lets the notebook create\n", + "your Trackio dashboard Space and push the trained model to the Hub. Run the cell and paste it in." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "from huggingface_hub import notebook_login\n", + "notebook_login() # paste a WRITE token (or instead: import os; os.environ[\"HF_TOKEN\"] = \"hf_...\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Settings\n", + "\n", + "OpenEnv is a tiny server that **hands you a formula image** and **scores your LaTeX** (edit-distance + exact-match,\n", + "computed server-side). By default we use the free **hosted Space** \u2014 zero setup. Flip `USE_LOCAL_ENV = True` to run\n", + "the same environment on this machine instead (next cell)." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "import os\n", + "from huggingface_hub import whoami\n", + "os.environ[\"HF_HUB_ENABLE_HF_TRANSFER\"] = \"1\"\n", + "\n", + "USERNAME = whoami()[\"name\"] # from your login above \u2014 used to name your repos\n", + "\n", + "MODEL = \"Qwen/Qwen3.5-4B\" # any image-text-to-text VLM (e.g. Qwen/Qwen3.5-2B for smaller GPUs)\n", + "USE_LOCAL_ENV = False # False = hosted Space (no setup); True = serve locally (next cell)\n", + "ENV_URL = \"https://AdithyaSK-latex-ocr-env.hf.space\"\n", + "\n", + "N_EVAL_SAMPLES = 50 # test images to score for eval\n", + "NUM_TRAIN_SAMPLES = 200 # env tasks to train on\n", + "MAX_STEPS = 30\n", + "NUM_GENERATIONS = 8\n", + "\n", + "# Your repos (auto-named from your username). Set PUSH_REPO_ID = \"\" to skip pushing the model.\n", + "PUSH_REPO_ID = f\"{USERNAME}/qwen3.5-latex-ocr-grpo\" # trained model goes here\n", + "TRACKIO_SPACE_ID = f\"{USERNAME}/trackio-latex-ocr\" # dashboard Space (auto-created)\n", + "TRACKIO_PROJECT = \"latex-ocr-grpo\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### (Optional) Run the environment locally\n", + "\n", + "Only needed if `USE_LOCAL_ENV = True`. Starts the OpenEnv LaTeX-OCR server on this machine (CPU-only, runs\n", + "alongside your GPU training) and points `ENV_URL` at it." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "if USE_LOCAL_ENV:\n", + " import subprocess, time, requests\n", + " os.environ[\"LATEX_OCR_MAX_SESSIONS\"] = str(max(16, NUM_GENERATIONS)) # allow concurrent rollouts\n", + " _server = subprocess.Popen([\"python\", \"-c\", \"from latex_ocr_env.server.app import main; main()\"])\n", + " ENV_URL = \"http://localhost:8000\"\n", + " for _ in range(90):\n", + " try:\n", + " if requests.get(f\"{ENV_URL}/healthz\", timeout=2).ok:\n", + " print(\"\u2705 local env server ready:\", ENV_URL); break\n", + " except Exception:\n", + " pass\n", + " time.sleep(2)\n", + " else:\n", + " raise RuntimeError(\"local env server did not start \u2014 check the logs above\")\n", + "else:\n", + " print(\"Using hosted environment:\", ENV_URL)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. The environment wrapper + reward\n", + "\n", + "`GRPOTrainer` talks to an environment through a small class: `reset()` returns the **image + instruction** (TRL puts\n", + "the image straight into the VLM's prompt), and the reward function submits the model's LaTeX with `step()` and reads\n", + "the **server-computed reward**. The dataset just carries `{split, index}` so every generation in a group sees the\n", + "same image." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "import base64, re\n", + "from io import BytesIO\n", + "from PIL import Image\n", + "from datasets import Dataset\n", + "from latex_ocr_env import LatexOCRAction, LatexOCREnv\n", + "\n", + "INSTRUCTION = \"Transcribe the mathematical formula in the image to LaTeX. Output only the LaTeX code.\"\n", + "\n", + "def _strip_fences(t):\n", + " t = (t or \"\").strip()\n", + " m = re.search(r\"```(?:latex)?\\s*(.*?)\\s*```\", t, flags=re.DOTALL)\n", + " if m: t = m.group(1)\n", + " return t.strip().strip(\"$\").strip()\n", + "\n", + "def _decode(b64, max_px=512):\n", + " img = Image.open(BytesIO(base64.b64decode(b64))).convert(\"RGB\")\n", + " img.thumbnail((max_px, max_px), Image.LANCZOS)\n", + " return img\n", + "\n", + "class LatexOCREnv_GRPO:\n", + " \"\"\"environment_factory: the env supplies the image (reset) and the reward (step).\"\"\"\n", + " def __init__(self):\n", + " self.client = LatexOCREnv(base_url=ENV_URL, connect_timeout_s=60, message_timeout_s=180)\n", + " def reset(self, split=\"train\", index=None, **kw):\n", + " idx = int(index) if index is not None else None\n", + " obs = self.client.reset(split=split, index=idx).observation\n", + " return [{\"type\": \"image\", \"image\": _decode(obs.image_base64)},\n", + " {\"type\": \"text\", \"text\": obs.prompt or INSTRUCTION}]\n", + "\n", + "def env_reward(completions, environments, **kw):\n", + " return [float(e.client.step(LatexOCRAction(latex=_strip_fences(c[0][\"content\"]))).reward or 0.0)\n", + " for e, c in zip(environments, completions)]\n", + "\n", + "def build_dataset(n, split=\"train\"):\n", + " probe = LatexOCREnv(base_url=ENV_URL, connect_timeout_s=60)\n", + " k = min(n, probe.num_tasks(split))\n", + " print(f\"{split}: using {k} tasks\")\n", + " return Dataset.from_dict({\"split\": [split] * k, \"index\": list(range(k))})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Evaluation\n", + "\n", + "A simple, honest score: for `N` **test-split** images, let the model generate LaTeX and grade it with the **same\n", + "reward** used in training. The average is our metric. We'll run it before *and* after training." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "import torch\n", + "\n", + "def generate_latex(model, processor, image, prompt, max_new_tokens=256):\n", + " msgs = [{\"role\": \"user\", \"content\": [{\"type\": \"image\", \"image\": image}, {\"type\": \"text\", \"text\": prompt}]}]\n", + " inputs = processor.apply_chat_template(\n", + " msgs, add_generation_prompt=True, tokenize=True, return_dict=True,\n", + " return_tensors=\"pt\", enable_thinking=False,\n", + " ).to(model.device)\n", + " with torch.no_grad():\n", + " out = model.generate(**inputs, max_new_tokens=max_new_tokens, do_sample=False)\n", + " return processor.batch_decode(out[:, inputs[\"input_ids\"].shape[1]:], skip_special_tokens=True)[0]\n", + "\n", + "def evaluate(model, processor, n_samples, split=\"test\"):\n", + " \"\"\"Average env reward over the first N images of `split` (deterministic / greedy).\"\"\"\n", + " client = LatexOCREnv(base_url=ENV_URL, connect_timeout_s=60, message_timeout_s=180)\n", + " scores = []\n", + " for i in range(n_samples):\n", + " obs = client.reset(split=split, index=i).observation\n", + " pred = generate_latex(model, processor, _decode(obs.image_base64), obs.prompt or INSTRUCTION)\n", + " scores.append(float(client.step(LatexOCRAction(latex=_strip_fences(pred))).reward or 0.0))\n", + " return sum(scores) / len(scores)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Build the trainer\n", + "\n", + "We load the VLM with **LoRA** (adapters \u2014 light on memory) and hand `GRPOTrainer` the `environment_factory` +\n", + "`env_reward`. `enable_thinking=False` keeps Qwen from emitting a long `` block so it outputs LaTeX directly.\n", + "\n", + "We also turn on **[Trackio](https://huggingface.co/blog/trackio)** \u2014 a free, local-first experiment tracker with a\n", + "`wandb`-style API. Setting `report_to=\"trackio\"` + `trackio_space_id` streams the reward/loss/KL curves live to a\n", + "Hugging Face Space (a real-time dashboard you can share). We'll embed it right in this notebook after training." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "from trl import GRPOConfig, GRPOTrainer\n", + "from peft import LoraConfig\n", + "\n", + "train_dataset = build_dataset(NUM_TRAIN_SAMPLES, \"train\")\n", + "\n", + "peft_config = LoraConfig(task_type=\"CAUSAL_LM\", r=16, lora_alpha=32, lora_dropout=0.05,\n", + " target_modules=[\"q_proj\", \"v_proj\"])\n", + "\n", + "trainer = GRPOTrainer(\n", + " model=MODEL,\n", + " train_dataset=train_dataset,\n", + " reward_funcs=env_reward,\n", + " environment_factory=LatexOCREnv_GRPO,\n", + " peft_config=peft_config,\n", + " args=GRPOConfig(\n", + " output_dir=\"latex_ocr_grpo\",\n", + " model_init_kwargs={\"dtype\": \"bfloat16\"},\n", + " num_generations=NUM_GENERATIONS,\n", + " per_device_train_batch_size=NUM_GENERATIONS,\n", + " max_steps=MAX_STEPS,\n", + " max_completion_length=256,\n", + " temperature=0.9,\n", + " learning_rate=1e-5,\n", + " chat_template_kwargs={\"enable_thinking\": False},\n", + " mask_truncated_completions=True,\n", + " bf16=True,\n", + " gradient_checkpointing=True,\n", + " logging_steps=1, save_strategy=\"no\",\n", + " # --- Trackio logging ---\n", + " report_to=\"trackio\",\n", + " run_name=\"train\",\n", + " project=TRACKIO_PROJECT,\n", + " trackio_space_id=(TRACKIO_SPACE_ID or None),\n", + " trackio_static_space_id=False, # keep the live Space (skip freezing it)\n", + " ),\n", + ")\n", + "processor = trainer.processing_class" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. Baseline \u2014 how good is it *before* training?\n", + "\n", + "(With LoRA freshly initialized, this is effectively the base model's score.)" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "baseline = evaluate(trainer.model, processor, N_EVAL_SAMPLES, split=\"test\")\n", + "print(f\"\ud83d\udcca Baseline reward (before training): {baseline:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. Train" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "trainer.train()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 8. Did it improve?\n", + "\n", + "Same `N` test images, same reward \u2014 now with the trained adapter." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "trained = evaluate(trainer.model, processor, N_EVAL_SAMPLES, split=\"test\")\n", + "print(f\"\ud83d\udcca Before: {baseline:.4f} After: {trained:.4f} \u0394 = {trained - baseline:+.4f}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## \ud83d\udcc8 Live dashboard (Trackio)\n", + "\n", + "Training already streamed its reward curve to Trackio. Now we log the **eval** as its own run \u2014 `test_reward` at\n", + "step 0 (before) and at the final step (after) \u2014 so the before\u2192after jump shows up as a line. Then we embed the\n", + "whole dashboard (train + eval) right here in the notebook." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "import trackio\n", + "\n", + "# Log the baseline/after eval as a 2-point 'eval' run in the same project\n", + "trackio.init(project=TRACKIO_PROJECT, name=\"eval\", space_id=(TRACKIO_SPACE_ID or None))\n", + "trackio.log({\"test_reward\": baseline}, step=0)\n", + "trackio.log({\"test_reward\": trained}, step=MAX_STEPS)\n", + "trackio.finish()\n", + "\n", + "# Embed the dashboard inline (train curves + eval line)\n", + "from IPython.display import IFrame, display\n", + "if TRACKIO_SPACE_ID:\n", + " sub = TRACKIO_SPACE_ID.replace(\"/\", \"-\").lower()\n", + " display(IFrame(f\"https://{sub}.hf.space/?project={TRACKIO_PROJECT}\", width=\"100%\", height=640))\n", + "else:\n", + " trackio.show(project=TRACKIO_PROJECT) # local dashboard (no Space configured)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 9. Push to the Hub\n", + "\n", + "We **merge the LoRA adapter into the base weights** and push a standalone model (+ processor) \u2014 so anyone can load\n", + "it directly with `from_pretrained`, no adapter step needed. Set `PUSH_REPO_ID` in the settings cell first and log in\n", + "(`huggingface-cli login` or `notebook_login()`)." + ] + }, + { + "cell_type": "code", + "metadata": {}, + "execution_count": null, + "outputs": [], + "source": [ + "if PUSH_REPO_ID:\n", + " merged = trainer.model.merge_and_unload() # fold LoRA into the base weights\n", + " merged.push_to_hub(PUSH_REPO_ID)\n", + " processor.push_to_hub(PUSH_REPO_ID)\n", + " print(\"\u2705 pushed to https://huggingface.co/\" + PUSH_REPO_ID)\n", + "else:\n", + " print(\"Set PUSH_REPO_ID in the settings cell to push your model.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recap\n", + "\n", + "You evaluated a VLM, trained it with GRPO against an OpenEnv reward, measured the improvement, and pushed it.\n", + "\n", + "**Try next:** more `MAX_STEPS`, a bigger `N_EVAL_SAMPLES` for a steadier score, a different `MODEL`, or\n", + "`USE_LOCAL_ENV=True` to run the environment yourself." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU", + "colab": { + "provenance": [] + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file From b3924062f687f573b03f77021427a1c692ba3bbd Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 08:19:12 +0000 Subject: [PATCH 07/17] grpo_latex_ocr tutorial: verbose cell output + example previews in eval --- .../grpo_latex_ocr_tutorial.ipynb | 83 ++++++++++++++----- 1 file changed, 64 insertions(+), 19 deletions(-) diff --git a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb index 52675bf9e..33be85e06 100644 --- a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb +++ b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb @@ -24,7 +24,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 1. Install" + "## 1. Install\n", + "\n", + "\u23f3 Takes ~2\u20133 min and prints nothing (output is hidden). The `[*]` turns into a number when it's done \u2014 then move on." ] }, { @@ -37,7 +39,7 @@ "# trl (from source: VLM + environment_factory) + the LaTeX-OCR OpenEnv package + LoRA/util deps\n", "!pip install -q \"trl @ git+https://github.com/huggingface/trl.git\" \\\n", " \"openenv-latex_ocr_env @ git+https://github.com/adithya-s-k/OpenEnv.git@add-latex-ocr-multimodal-streaming-env#subdirectory=envs/latex_ocr_env\" \\\n", - " peft trackio fastmcp websockets jmespath hf_transfer" + " peft trackio ipywidgets fastmcp websockets jmespath hf_transfer" ] }, { @@ -96,7 +98,14 @@ "# Your repos (auto-named from your username). Set PUSH_REPO_ID = \"\" to skip pushing the model.\n", "PUSH_REPO_ID = f\"{USERNAME}/qwen3.5-latex-ocr-grpo\" # trained model goes here\n", "TRACKIO_SPACE_ID = f\"{USERNAME}/trackio-latex-ocr\" # dashboard Space (auto-created)\n", - "TRACKIO_PROJECT = \"latex-ocr-grpo\"" + "TRACKIO_PROJECT = \"latex-ocr-grpo\"\n", + "\n", + "print(f\"\ud83d\udc64 logged in as : {USERNAME}\")\n", + "print(f\"\ud83e\udde0 model : {MODEL}\")\n", + "print(f\"\ud83c\udf10 environment : {'local (next cell)' if USE_LOCAL_ENV else ENV_URL}\")\n", + "print(f\"\ud83c\udfcb\ufe0f train / steps : {NUM_TRAIN_SAMPLES} tasks \u00b7 {MAX_STEPS} steps \u00b7 {NUM_GENERATIONS} generations\")\n", + "print(f\"\ud83d\udccf eval samples : {N_EVAL_SAMPLES}\")\n", + "print(f\"\ud83d\udce4 push to : {PUSH_REPO_ID or '(skipped)'}\")" ] }, { @@ -141,8 +150,11 @@ "\n", "`GRPOTrainer` talks to an environment through a small class: `reset()` returns the **image + instruction** (TRL puts\n", "the image straight into the VLM's prompt), and the reward function submits the model's LaTeX with `step()` and reads\n", - "the **server-computed reward**. The dataset just carries `{split, index}` so every generation in a group sees the\n", - "same image." + "the **server-computed reward**.\n", + "\n", + "**The dataset lives inside the environment.** It serves `train` and `test` splits of formula images; we never load a\n", + "dataset ourselves. Our local \"dataset\" is just a list of `{split, index}` rows telling the trainer which task to\n", + "`reset()` to \u2014 so every generation in a group sees the same image." ] }, { @@ -187,8 +199,17 @@ "def build_dataset(n, split=\"train\"):\n", " probe = LatexOCREnv(base_url=ENV_URL, connect_timeout_s=60)\n", " k = min(n, probe.num_tasks(split))\n", - " print(f\"{split}: using {k} tasks\")\n", - " return Dataset.from_dict({\"split\": [split] * k, \"index\": list(range(k))})" + " print(f\"{split}: using {k} of {probe.num_tasks(split)} tasks\")\n", + " return Dataset.from_dict({\"split\": [split] * k, \"index\": list(range(k))})\n", + "\n", + "# --- peek: connect to the env and show one task so you can see what the model sees ---\n", + "from IPython.display import display\n", + "_probe = LatexOCREnv(base_url=ENV_URL, connect_timeout_s=60)\n", + "print(f\"\u2705 connected to env \u00b7 train tasks: {_probe.num_tasks('train')} \u00b7 test tasks: {_probe.num_tasks('test')}\")\n", + "_obs = _probe.reset(split=\"train\", index=0).observation\n", + "print(f\"prompt: {(_obs.prompt or INSTRUCTION)}\")\n", + "print(\"example image the model must transcribe:\")\n", + "display(_decode(_obs.image_base64))" ] }, { @@ -208,6 +229,8 @@ "outputs": [], "source": [ "import torch\n", + "from tqdm.auto import tqdm\n", + "from IPython.display import display\n", "\n", "def generate_latex(model, processor, image, prompt, max_new_tokens=256):\n", " msgs = [{\"role\": \"user\", \"content\": [{\"type\": \"image\", \"image\": image}, {\"type\": \"text\", \"text\": prompt}]}]\n", @@ -219,15 +242,24 @@ " out = model.generate(**inputs, max_new_tokens=max_new_tokens, do_sample=False)\n", " return processor.batch_decode(out[:, inputs[\"input_ids\"].shape[1]:], skip_special_tokens=True)[0]\n", "\n", - "def evaluate(model, processor, n_samples, split=\"test\"):\n", - " \"\"\"Average env reward over the first N images of `split` (deterministic / greedy).\"\"\"\n", + "def evaluate(model, processor, n_samples, split=\"test\", show=3):\n", + " \"\"\"Average env reward over the first N `split` images (greedy). Prints progress + a few examples.\"\"\"\n", " client = LatexOCREnv(base_url=ENV_URL, connect_timeout_s=60, message_timeout_s=180)\n", - " scores = []\n", - " for i in range(n_samples):\n", + " scores, examples = [], []\n", + " for i in tqdm(range(n_samples), desc=f\"evaluating [{split}]\"):\n", " obs = client.reset(split=split, index=i).observation\n", - " pred = generate_latex(model, processor, _decode(obs.image_base64), obs.prompt or INSTRUCTION)\n", - " scores.append(float(client.step(LatexOCRAction(latex=_strip_fences(pred))).reward or 0.0))\n", - " return sum(scores) / len(scores)" + " img = _decode(obs.image_base64)\n", + " pred = generate_latex(model, processor, img, obs.prompt or INSTRUCTION)\n", + " r = float(client.step(LatexOCRAction(latex=_strip_fences(pred))).reward or 0.0)\n", + " scores.append(r)\n", + " if i < show: examples.append((img, _strip_fences(pred), r))\n", + " mean = sum(scores) / len(scores)\n", + " print(f\"\\n\ud83d\udcca mean reward over {n_samples} [{split}] samples = {mean:.4f}\\n\")\n", + " for j, (img, pred, r) in enumerate(examples):\n", + " print(f\"\u2014 example {j + 1} \u00b7 reward {r:.3f}\")\n", + " display(img)\n", + " print(f\" model output: {pred[:160]}\\n\")\n", + " return mean" ] }, { @@ -286,7 +318,12 @@ " trackio_static_space_id=False, # keep the live Space (skip freezing it)\n", " ),\n", ")\n", - "processor = trainer.processing_class" + "processor = trainer.processing_class\n", + "\n", + "_trainable = trainer.model.num_parameters(only_trainable=True) / 1e6\n", + "print(f\"\u2705 trainer ready \u00b7 {MODEL}\")\n", + "print(f\" trainable params: {_trainable:.1f}M (LoRA) \u00b7 dataset: {len(train_dataset)} env tasks \u00b7 {MAX_STEPS} steps\")\n", + "print(f\" metrics stream to Trackio project '{TRACKIO_PROJECT}'\" + (f\" on {TRACKIO_SPACE_ID}\" if TRACKIO_SPACE_ID else \" (local)\"))" ] }, { @@ -304,15 +341,18 @@ "execution_count": null, "outputs": [], "source": [ - "baseline = evaluate(trainer.model, processor, N_EVAL_SAMPLES, split=\"test\")\n", - "print(f\"\ud83d\udcca Baseline reward (before training): {baseline:.4f}\")" + "print(\"Scoring the untrained model on the test split \u2014 watch the examples below...\")\n", + "baseline = evaluate(trainer.model, processor, N_EVAL_SAMPLES, split=\"test\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 7. Train" + "## 7. Train\n", + "\n", + "Each step prints its metrics (loss, KL, and `rewards/env_reward/mean` \u2014 the number that should climb). The same\n", + "curves stream live to your Trackio dashboard, which we embed a couple of cells down." ] }, { @@ -321,6 +361,7 @@ "execution_count": null, "outputs": [], "source": [ + "print(\"\ud83d\ude80 training \u2014 watch 'rewards/env_reward/mean' trend up over the steps below\\n\")\n", "trainer.train()" ] }, @@ -340,7 +381,11 @@ "outputs": [], "source": [ "trained = evaluate(trainer.model, processor, N_EVAL_SAMPLES, split=\"test\")\n", - "print(f\"\ud83d\udcca Before: {baseline:.4f} After: {trained:.4f} \u0394 = {trained - baseline:+.4f}\")" + "print(\"=\" * 48)\n", + "print(f\" before training : {baseline:.4f}\")\n", + "print(f\" after training : {trained:.4f}\")\n", + "print(f\" improvement (\u0394) : {trained - baseline:+.4f}\")\n", + "print(\"=\" * 48)" ] }, { From 12f45a2e2fc8427c6e7dac5dc6435537a054f909 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 08:44:54 +0000 Subject: [PATCH 08/17] grpo_latex_ocr tutorial: USE_TRACKIO toggle, live eval avg, 500 train tasks --- .../grpo_latex_ocr_tutorial.ipynb | 47 ++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb index 33be85e06..46798d2d6 100644 --- a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb +++ b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb @@ -91,20 +91,24 @@ "ENV_URL = \"https://AdithyaSK-latex-ocr-env.hf.space\"\n", "\n", "N_EVAL_SAMPLES = 50 # test images to score for eval\n", - "NUM_TRAIN_SAMPLES = 200 # env tasks to train on\n", - "MAX_STEPS = 30\n", + "NUM_TRAIN_SAMPLES = 500 # env tasks to train on\n", + "MAX_STEPS = 30 # optimization steps (controls how many tasks are actually consumed)\n", "NUM_GENERATIONS = 8\n", "\n", "# Your repos (auto-named from your username). Set PUSH_REPO_ID = \"\" to skip pushing the model.\n", "PUSH_REPO_ID = f\"{USERNAME}/qwen3.5-latex-ocr-grpo\" # trained model goes here\n", - "TRACKIO_SPACE_ID = f\"{USERNAME}/trackio-latex-ocr\" # dashboard Space (auto-created)\n", + "\n", + "# Experiment tracking (Trackio). Turn OFF to train without any dashboard / Space.\n", + "USE_TRACKIO = True\n", + "TRACKIO_SPACE_ID = f\"{USERNAME}/trackio-latex-ocr\" # dashboard Space (auto-created when USE_TRACKIO)\n", "TRACKIO_PROJECT = \"latex-ocr-grpo\"\n", "\n", "print(f\"\ud83d\udc64 logged in as : {USERNAME}\")\n", "print(f\"\ud83e\udde0 model : {MODEL}\")\n", "print(f\"\ud83c\udf10 environment : {'local (next cell)' if USE_LOCAL_ENV else ENV_URL}\")\n", - "print(f\"\ud83c\udfcb\ufe0f train / steps : {NUM_TRAIN_SAMPLES} tasks \u00b7 {MAX_STEPS} steps \u00b7 {NUM_GENERATIONS} generations\")\n", + "print(f\"\ud83c\udfcb\ufe0f train / steps : {NUM_TRAIN_SAMPLES} tasks available \u00b7 {MAX_STEPS} steps \u00b7 {NUM_GENERATIONS} generations\")\n", "print(f\"\ud83d\udccf eval samples : {N_EVAL_SAMPLES}\")\n", + "print(f\"\ud83d\udcc8 tracking : {'Trackio \u2192 ' + TRACKIO_SPACE_ID if USE_TRACKIO else 'off'}\")\n", "print(f\"\ud83d\udce4 push to : {PUSH_REPO_ID or '(skipped)'}\")" ] }, @@ -246,12 +250,14 @@ " \"\"\"Average env reward over the first N `split` images (greedy). Prints progress + a few examples.\"\"\"\n", " client = LatexOCREnv(base_url=ENV_URL, connect_timeout_s=60, message_timeout_s=180)\n", " scores, examples = [], []\n", - " for i in tqdm(range(n_samples), desc=f\"evaluating [{split}]\"):\n", + " pbar = tqdm(range(n_samples), desc=f\"evaluating [{split}]\")\n", + " for i in pbar:\n", " obs = client.reset(split=split, index=i).observation\n", " img = _decode(obs.image_base64)\n", " pred = generate_latex(model, processor, img, obs.prompt or INSTRUCTION)\n", " r = float(client.step(LatexOCRAction(latex=_strip_fences(pred))).reward or 0.0)\n", " scores.append(r)\n", + " pbar.set_postfix(avg_reward=f\"{sum(scores) / len(scores):.3f}\") # live running average\n", " if i < show: examples.append((img, _strip_fences(pred), r))\n", " mean = sum(scores) / len(scores)\n", " print(f\"\\n\ud83d\udcca mean reward over {n_samples} [{split}] samples = {mean:.4f}\\n\")\n", @@ -310,11 +316,11 @@ " bf16=True,\n", " gradient_checkpointing=True,\n", " logging_steps=1, save_strategy=\"no\",\n", - " # --- Trackio logging ---\n", - " report_to=\"trackio\",\n", + " # --- Trackio logging (toggled by USE_TRACKIO) ---\n", + " report_to=(\"trackio\" if USE_TRACKIO else \"none\"),\n", " run_name=\"train\",\n", " project=TRACKIO_PROJECT,\n", - " trackio_space_id=(TRACKIO_SPACE_ID or None),\n", + " trackio_space_id=(TRACKIO_SPACE_ID if USE_TRACKIO else None),\n", " trackio_static_space_id=False, # keep the live Space (skip freezing it)\n", " ),\n", ")\n", @@ -323,7 +329,7 @@ "_trainable = trainer.model.num_parameters(only_trainable=True) / 1e6\n", "print(f\"\u2705 trainer ready \u00b7 {MODEL}\")\n", "print(f\" trainable params: {_trainable:.1f}M (LoRA) \u00b7 dataset: {len(train_dataset)} env tasks \u00b7 {MAX_STEPS} steps\")\n", - "print(f\" metrics stream to Trackio project '{TRACKIO_PROJECT}'\" + (f\" on {TRACKIO_SPACE_ID}\" if TRACKIO_SPACE_ID else \" (local)\"))" + "print(f\" metrics \u2192 Trackio project '{TRACKIO_PROJECT}' on {TRACKIO_SPACE_ID}\" if USE_TRACKIO else \" tracking: off\")" ] }, { @@ -405,21 +411,20 @@ "execution_count": null, "outputs": [], "source": [ - "import trackio\n", - "\n", - "# Log the baseline/after eval as a 2-point 'eval' run in the same project\n", - "trackio.init(project=TRACKIO_PROJECT, name=\"eval\", space_id=(TRACKIO_SPACE_ID or None))\n", - "trackio.log({\"test_reward\": baseline}, step=0)\n", - "trackio.log({\"test_reward\": trained}, step=MAX_STEPS)\n", - "trackio.finish()\n", - "\n", - "# Embed the dashboard inline (train curves + eval line)\n", - "from IPython.display import IFrame, display\n", - "if TRACKIO_SPACE_ID:\n", + "if USE_TRACKIO:\n", + " import trackio\n", + " # Log the baseline/after eval as a 2-point 'eval' run in the same project\n", + " trackio.init(project=TRACKIO_PROJECT, name=\"eval\", space_id=(TRACKIO_SPACE_ID or None))\n", + " trackio.log({\"test_reward\": baseline}, step=0)\n", + " trackio.log({\"test_reward\": trained}, step=MAX_STEPS)\n", + " trackio.finish()\n", + "\n", + " # Embed the dashboard inline (train curves + eval line)\n", + " from IPython.display import IFrame, display\n", " sub = TRACKIO_SPACE_ID.replace(\"/\", \"-\").lower()\n", " display(IFrame(f\"https://{sub}.hf.space/?project={TRACKIO_PROJECT}\", width=\"100%\", height=640))\n", "else:\n", - " trackio.show(project=TRACKIO_PROJECT) # local dashboard (no Space configured)" + " print(\"Trackio is disabled (USE_TRACKIO = False) \u2014 skipping the dashboard.\")" ] }, { From 483f49467dc69d14dfbfe30f7df72e2617f301b6 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 08:53:36 +0000 Subject: [PATCH 09/17] grpo_latex_ocr tutorial: fast eval (KV cache on, gradient checkpointing off during eval) --- .../grpo_latex_ocr_tutorial.ipynb | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb index 46798d2d6..494a50f54 100644 --- a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb +++ b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb @@ -249,16 +249,29 @@ "def evaluate(model, processor, n_samples, split=\"test\", show=3):\n", " \"\"\"Average env reward over the first N `split` images (greedy). Prints progress + a few examples.\"\"\"\n", " client = LatexOCREnv(base_url=ENV_URL, connect_timeout_s=60, message_timeout_s=180)\n", + " # Generation is ~10x faster with the KV cache. After training, the model still has gradient\n", + " # checkpointing on (which forces use_cache=False) and is in train mode \u2014 so switch to a fast\n", + " # eval state here and restore it afterwards, so before/after evals run at the same speed.\n", + " was_training = model.training\n", + " was_gc = getattr(model, \"is_gradient_checkpointing\", False)\n", + " model.eval()\n", + " if was_gc: model.gradient_checkpointing_disable()\n", + " model.config.use_cache = True\n", " scores, examples = [], []\n", - " pbar = tqdm(range(n_samples), desc=f\"evaluating [{split}]\")\n", - " for i in pbar:\n", - " obs = client.reset(split=split, index=i).observation\n", - " img = _decode(obs.image_base64)\n", - " pred = generate_latex(model, processor, img, obs.prompt or INSTRUCTION)\n", - " r = float(client.step(LatexOCRAction(latex=_strip_fences(pred))).reward or 0.0)\n", - " scores.append(r)\n", - " pbar.set_postfix(avg_reward=f\"{sum(scores) / len(scores):.3f}\") # live running average\n", - " if i < show: examples.append((img, _strip_fences(pred), r))\n", + " try:\n", + " pbar = tqdm(range(n_samples), desc=f\"evaluating [{split}]\")\n", + " for i in pbar:\n", + " obs = client.reset(split=split, index=i).observation\n", + " img = _decode(obs.image_base64)\n", + " pred = generate_latex(model, processor, img, obs.prompt or INSTRUCTION)\n", + " r = float(client.step(LatexOCRAction(latex=_strip_fences(pred))).reward or 0.0)\n", + " scores.append(r)\n", + " pbar.set_postfix(avg_reward=f\"{sum(scores) / len(scores):.3f}\") # live running average\n", + " if i < show: examples.append((img, _strip_fences(pred), r))\n", + " finally:\n", + " model.config.use_cache = False\n", + " if was_gc: model.gradient_checkpointing_enable()\n", + " if was_training: model.train()\n", " mean = sum(scores) / len(scores)\n", " print(f\"\\n\ud83d\udcca mean reward over {n_samples} [{split}] samples = {mean:.4f}\\n\")\n", " for j, (img, pred, r) in enumerate(examples):\n", From 141f8c2e4b44cfceed71649c529124d0528e62ba Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 08:58:45 +0000 Subject: [PATCH 10/17] grpo_latex_ocr tutorial: pin local env to materialize mode + cap rows for fast startup --- .../grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb index 494a50f54..4921be74f 100644 --- a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb +++ b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb @@ -119,7 +119,14 @@ "### (Optional) Run the environment locally\n", "\n", "Only needed if `USE_LOCAL_ENV = True`. Starts the OpenEnv LaTeX-OCR server on this machine (CPU-only, runs\n", - "alongside your GPU training) and points `ENV_URL` at it." + "alongside your GPU training) and points `ENV_URL` at it.\n", + "\n", + "Two knobs keep it fast:\n", + "- **`LATEX_OCR_MODE=materialize`** \u2014 loads + indexes the split so `reset(split, index)` is O(1) random access.\n", + " (The other mode, `stream`, is a sequential cursor with *no* random access \u2014 our training/eval need indices, so\n", + " streaming would be unusably slow here.)\n", + "- **`LATEX_OCR_MAX_ROWS`** \u2014 materialize would otherwise decode the *entire* split (68k+ train images). We cap it to\n", + " just the rows we actually touch, so the server is ready in seconds instead of minutes." ] }, { @@ -130,7 +137,9 @@ "source": [ "if USE_LOCAL_ENV:\n", " import subprocess, time, requests\n", - " os.environ[\"LATEX_OCR_MAX_SESSIONS\"] = str(max(16, NUM_GENERATIONS)) # allow concurrent rollouts\n", + " os.environ[\"LATEX_OCR_MODE\"] = \"materialize\" # random-access reset(split, index)\n", + " os.environ[\"LATEX_OCR_MAX_ROWS\"] = str(max(NUM_TRAIN_SAMPLES, N_EVAL_SAMPLES)) # only load what we use\n", + " os.environ[\"LATEX_OCR_MAX_SESSIONS\"] = str(max(16, NUM_GENERATIONS)) # allow concurrent rollouts\n", " _server = subprocess.Popen([\"python\", \"-c\", \"from latex_ocr_env.server.app import main; main()\"])\n", " ENV_URL = \"http://localhost:8000\"\n", " for _ in range(90):\n", From 0bf2592453603f0c281505a11723d5e427a66fa8 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 09:33:52 +0000 Subject: [PATCH 11/17] latex_ocr_env: address review feedback + add docs stub - stream: reset(index=...) now raises instead of silently ignoring - stream: exhaustion clears target and marks done (no stale-target scoring) - stream: honor LATEX_OCR_MAX_ROWS; cap get_task_range stub generation - materialize: clear IndexError on empty split instead of randrange ValueError - encode images as real PNG (normalize raw bytes) to match image_format - client: mirror reward/done onto the observation, matching StepResult - docs: generate docs/source/environments/latex_ocr.md stub --- docs/source/environments/latex_ocr.md | 67 +++++++++++++++++ envs/latex_ocr_env/client.py | 15 ++-- .../server/latex_ocr_environment.py | 73 +++++++++++++++---- 3 files changed, 135 insertions(+), 20 deletions(-) create mode 100644 docs/source/environments/latex_ocr.md diff --git a/docs/source/environments/latex_ocr.md b/docs/source/environments/latex_ocr.md new file mode 100644 index 000000000..70f4c0842 --- /dev/null +++ b/docs/source/environments/latex_ocr.md @@ -0,0 +1,67 @@ + +# LaTeX OCR Environment + +A dataset-backed, single-step (bandit) RL environment for **image → LaTeX** +transcription, served through OpenEnv. + +- **Task**: the agent is shown an image of a math/text expression and must + return its LaTeX source. +- **Dataset**: tasks are served from a Hugging Face dataset (default + [`unsloth/LaTeX_OCR`](https://huggingface.co/datasets/unsloth/LaTeX_OCR): + `image` + `text` columns, `train`/`test` splits) via the OpenEnv **Task API**. +- **Reward**: `(1 - exact_weight) * (1 - CER) + exact_weight * exact_match`, + where `CER` is the normalized character edit distance over whitespace-stripped + LaTeX. Partial answers score in `[0, 0.8]`; only an exact match reaches `1.0`. + Computed **server-side** against the hidden ground truth — the agent never + sees the target on `reset`. Dense and smooth, for stable RL training. + +## Episode + +``` +reset(split="test", index=0) -> observation { image_base64, prompt, ... } # target hidden +step(LatexOCRAction(latex=…)) -> reward, done=True { target_latex, exact_match, char_error_rate } +``` + +## Task API + +| Endpoint | Purpose | +|---|---| +| `GET /latex_ocr_env/splits` | list splits (`train`, `test`) | +| `POST /latex_ocr_env/num_tasks` | row count for a split | +| `POST /latex_ocr_env/tasks` | all task specs for a split | +| `POST /latex_ocr_env/task` | one task by `{split, index}` | +| `POST /latex_ocr_env/task_range` | slice `{split, start, stop}` | + +Client helpers: `env.list_splits()`, `env.num_tasks(split)`, +`env.get_task(split, index)`, `env.get_task_range(split, start, stop)`. + +## Run locally + +```bash +# From the repo root. LATEX_OCR_SPLITS=test avoids the 380MB train download. +PYTHONPATH=src:envs/latex_ocr_env LATEX_OCR_SPLITS=test \ + uv run --with datasets --with pillow --with fastapi --with uvicorn --with websockets \ + uvicorn server.app:app --host 0.0.0.0 --port 8000 +``` + +Then drive it (needs `HF_TOKEN` for the real VLM policy): + +```bash +HF_TOKEN=hf_xxx PYTHONPATH=src \ + uv run --with datasets --with pillow --with requests --with websockets --with openai \ + python envs/latex_ocr_env/validate.py --split test --num 3 \ + --model Qwen/Qwen2.5-VL-7B-Instruct +``` + +## Configuration (env vars) + +| Var | Default | Meaning | +|---|---|---| +| `LATEX_OCR_DATASET` | `unsloth/LaTeX_OCR` | source dataset | +| `LATEX_OCR_IMAGE_COLUMN` | `image` | image column | +| `LATEX_OCR_TEXT_COLUMN` | `text` | ground-truth LaTeX column | +| `LATEX_OCR_SPLITS` | `train,test` | splits to expose | +| `LATEX_OCR_MAX_ROWS` | — | cap rows per split (dev) | + +Swap in any `(image, latex)` dataset by pointing `LATEX_OCR_DATASET` at it (and +the column vars if they differ). diff --git a/envs/latex_ocr_env/client.py b/envs/latex_ocr_env/client.py index 4d516fbc3..83e520385 100644 --- a/envs/latex_ocr_env/client.py +++ b/envs/latex_ocr_env/client.py @@ -66,13 +66,16 @@ def _step_payload(self, action: LatexOCRAction) -> dict[str, Any]: return action.model_dump() def _parse_result(self, data: dict[str, Any]) -> StepResult[LatexOCRObservation]: - obs_data = data.get("observation", data) + obs_data = dict(data.get("observation", data)) + # Core serialization lifts reward/done to the top level and strips them from + # the observation payload; merge them back so observation.reward/.done match + # StepResult (consistent with other env clients). + reward = data.get("reward", obs_data.get("reward")) + done = data.get("done", obs_data.get("done")) + obs_data["reward"] = reward + obs_data["done"] = done obs = LatexOCRObservation(**obs_data) - base = dict( - observation=obs, - reward=data.get("reward", obs.reward), - done=data.get("done", obs.done), - ) + base = dict(observation=obs, reward=reward, done=done) # Newer core's StepResult carries `info`; older core does not. try: return StepResult(**base, info=data.get("info", {})) diff --git a/envs/latex_ocr_env/server/latex_ocr_environment.py b/envs/latex_ocr_env/server/latex_ocr_environment.py index 8b7735ac2..859cb432e 100644 --- a/envs/latex_ocr_env/server/latex_ocr_environment.py +++ b/envs/latex_ocr_env/server/latex_ocr_environment.py @@ -40,6 +40,7 @@ from openenv.core.env_server.interfaces import Environment from openenv.core.env_server.types import State +from PIL import Image try: from ..models import LatexOCRAction, LatexOCRObservation @@ -69,6 +70,17 @@ def _configured_splits() -> list[str]: return [s.strip() for s in raw.split(",") if s.strip()] +def _max_rows() -> int | None: + """Per-split row cap (LATEX_OCR_MAX_ROWS), honored in both modes. None = no cap.""" + v = os.environ.get("LATEX_OCR_MAX_ROWS") + return int(v) if v else None + + +# Safety cap on get_task_range() stub generation in stream mode: the metadata +# row-count can be enormous, so an unbounded range must not build a giant list. +_STREAM_RANGE_CAP = int(os.environ.get("LATEX_OCR_STREAM_RANGE_CAP", "100000")) + + @lru_cache(maxsize=None) def _load_split(dataset_name: str, split: str): """Load + cache a full split (materialize mode) for the process lifetime.""" @@ -97,8 +109,10 @@ def _split_total(dataset_name: str, split: str) -> int: def _encode_image(image: Any) -> str: + # Normalize to PNG so the hard-coded image_format="png" is always correct, + # even when a swapped-in dataset stores raw (e.g. JPEG) bytes in its image column. if isinstance(image, (bytes, bytearray)): - return base64.b64encode(bytes(image)).decode("ascii") + image = Image.open(io.BytesIO(bytes(image))) buffer = io.BytesIO() image.convert("RGB").save(buffer, format="PNG") return base64.b64encode(buffer.getvalue()).decode("ascii") @@ -139,7 +153,9 @@ def list_splits(self) -> list[str]: def num_tasks(self, split: str) -> int: # Honest denominator in both modes; stream reads metadata only. if self.mode == "stream": - return _split_total(self.dataset_name, split) + total = _split_total(self.dataset_name, split) + cap = _max_rows() + return min(total, cap) if (cap is not None and total > 0) else total return len(_load_split(self.dataset_name, split)) def list_tasks(self, split: str) -> list[dict[str, Any]]: @@ -169,6 +185,16 @@ def get_task_range( n = self.num_tasks(split) start = 0 if start is None else start stop = n if stop is None else (min(stop, n) if n > 0 else stop) + # In stream mode `n` comes from metadata and can be enormous; cap the number + # of generated stubs so an unbounded range can't OOM the process. + if self.mode == "stream" and stop - start > _STREAM_RANGE_CAP: + logger.warning( + "get_task_range: capping stream range %d..%d to %d stubs", + start, + stop, + _STREAM_RANGE_CAP, + ) + stop = start + _STREAM_RANGE_CAP return [ {"id": f"{split}-{i}", "index": i, "split": split} for i in range(start, stop) @@ -190,6 +216,11 @@ def reset( self._done = False self._state = State(episode_id=episode_id or str(uuid4()), step_count=0) if self.mode == "stream": + if index is not None: + raise ValueError( + "Random-access reset(index=...) is not supported in stream mode; " + "use materialize mode (LATEX_OCR_MODE=materialize) for indexed access." + ) return self._reset_stream(split) return self._reset_materialize(split, index, seed) @@ -198,6 +229,10 @@ def _reset_materialize( ) -> LatexOCRObservation: ds = _load_split(self.dataset_name, split) n = len(ds) + if n == 0: + raise IndexError( + f"split {split!r} is empty (n=0); check the dataset or LATEX_OCR_MAX_ROWS" + ) if index is None: index = random.Random(seed).randrange(n) if index < 0 or index >= n: @@ -234,23 +269,33 @@ def _ensure_stream(self, split: str) -> None: self._cursor = 0 self._exhausted = False + def _stream_exhausted(self, split: str, total: int) -> LatexOCRObservation: + # Mark the episode finished and clear the target so a following step() fails + # fast instead of grading against the previous (stale) task. + self._exhausted = True + self._done = True + self._target = None + return LatexOCRObservation( + done=True, + split=split, + index=self._cursor, + total=total, + remaining=0, + pct_done=1.0, + exhausted=True, + task_id=f"{split}-stream-end", + ) + def _reset_stream(self, split: str) -> LatexOCRObservation: self._ensure_stream(split) - total = _split_total(self.dataset_name, split) + total = self.num_tasks(split) # honors LATEX_OCR_MAX_ROWS + cap = _max_rows() + if cap is not None and self._cursor >= cap: + return self._stream_exhausted(split, total) try: row = next(self._stream) except StopIteration: - self._exhausted = True - return LatexOCRObservation( - done=True, - split=split, - index=self._cursor, - total=total, - remaining=0, - pct_done=1.0, - exhausted=True, - task_id=f"{split}-stream-end", - ) + return self._stream_exhausted(split, total) self._cursor += 1 self._target = str(row[TEXT_COLUMN]) self._current_split, self._current_index = split, self._cursor From ed46f0dbfac662621626107060caf09f61a890a8 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 09:39:13 +0000 Subject: [PATCH 12/17] latex_ocr_env: more review fixes (split-total 0 vs unknown, strict split, stream restart, consistent task_id, validate fallback) - _split_total: report 0 for known-empty splits, -1 only when unknown - reset(): raise on unknown split instead of silently remapping to splits[0] - _ensure_stream: rebuild the iterator after a pass is exhausted (restartable) - step()/reset(): emit a consistent task_id - validate.py: handle unknown count and fall back to sequential when stream rejects index - models.py: drop unused RewardValue alias - docs: remove dangling STREAMING.md reference --- envs/latex_ocr_env/models.py | 3 --- .../server/latex_ocr_environment.py | 21 ++++++++++++++----- envs/latex_ocr_env/validate.py | 16 +++++++++++--- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/envs/latex_ocr_env/models.py b/envs/latex_ocr_env/models.py index b47d00685..390ea42b2 100644 --- a/envs/latex_ocr_env/models.py +++ b/envs/latex_ocr_env/models.py @@ -16,9 +16,6 @@ from pydantic import Field -RewardValue = bool | int | float | None - - class LatexOCRAction(Action): """Agent's transcription attempt for the current image. diff --git a/envs/latex_ocr_env/server/latex_ocr_environment.py b/envs/latex_ocr_env/server/latex_ocr_environment.py index 859cb432e..d05697b7a 100644 --- a/envs/latex_ocr_env/server/latex_ocr_environment.py +++ b/envs/latex_ocr_env/server/latex_ocr_environment.py @@ -21,7 +21,7 @@ ``reset()`` pulls the *next* sample; every observation carries progress (``index``, ``total``, ``remaining``, ``pct_done``). No-repeat within a pass; ``reset(index=i)`` random access is unsupported by design. Best for very large - / TB-scale datasets. See STREAMING.md. + / TB-scale datasets. The dataset (materialize) and the split row-count (stream) are cached at module scope because the server instantiates a fresh env per Task API call. @@ -105,7 +105,9 @@ def _split_total(dataset_name: str, split: str) -> int: dataset_name, name=CONFIG, token=os.environ.get("HF_TOKEN") ) info = builder.info.splits.get(split) - return int(info.num_examples) if info and info.num_examples else -1 + if info is None or info.num_examples is None: + return -1 + return int(info.num_examples) def _encode_image(image: Any) -> str: @@ -137,6 +139,7 @@ def __init__( self._target: Optional[str] = None self._current_split: str = "" self._current_index: int = -1 + self._current_task_id: str = "" self._done = False # streaming cursor state (per session/instance) self._stream = None @@ -212,7 +215,9 @@ def reset( **kwargs: Any, ) -> LatexOCRObservation: if split not in self.list_splits(): - split = self.list_splits()[0] + raise ValueError( + f"unknown split {split!r}; configured splits: {self.list_splits()}" + ) self._done = False self._state = State(episode_id=episode_id or str(uuid4()), step_count=0) if self.mode == "stream": @@ -240,6 +245,7 @@ def _reset_materialize( row = ds[int(index)] self._target = str(row[TEXT_COLUMN]) self._current_split, self._current_index = split, int(index) + self._current_task_id = f"{split}-{index}" return LatexOCRObservation( done=False, image_base64=_encode_image(row[IMAGE_COLUMN]), @@ -251,7 +257,11 @@ def _reset_materialize( ) def _ensure_stream(self, split: str) -> None: - if self._stream is not None and self._stream_split == split: + if ( + self._stream is not None + and self._stream_split == split + and not self._exhausted + ): return from datasets import load_dataset @@ -299,6 +309,7 @@ def _reset_stream(self, split: str) -> LatexOCRObservation: self._cursor += 1 self._target = str(row[TEXT_COLUMN]) self._current_split, self._current_index = split, self._cursor + self._current_task_id = f"{split}-stream-{self._cursor}" remaining = (total - self._cursor) if total > 0 else -1 return LatexOCRObservation( done=False, @@ -334,7 +345,7 @@ def step(self, action: LatexOCRAction, **kwargs: Any) -> LatexOCRObservation: reward=result.reward, split=self._current_split, index=self._current_index, - task_id=f"{self._current_split}-{self._current_index}", + task_id=self._current_task_id, predicted_latex=prediction, target_latex=self._target, exact_match=result.exact_match, diff --git a/envs/latex_ocr_env/validate.py b/envs/latex_ocr_env/validate.py index f679109fe..6decb788f 100644 --- a/envs/latex_ocr_env/validate.py +++ b/envs/latex_ocr_env/validate.py @@ -91,9 +91,19 @@ def main() -> None: rewards = [] seen_targets = [] - for i in range(min(args.num, n)): - # In stream mode `index` is ignored — reset() pulls the next sample. - result = env.reset(split=args.split, index=i) + # n <= 0 means unknown count (stream metadata); fall back to --num. + count = args.num if n <= 0 else min(args.num, n) + stream_mode = False + for i in range(count): + if stream_mode: + result = env.reset(split=args.split) + else: + try: + result = env.reset(split=args.split, index=i) + except Exception: + # stream-mode server rejects random index -> pull sequentially + stream_mode = True + result = env.reset(split=args.split) obs = result.observation prog = "" if obs.total and obs.total > 0: From a81bd872f19298ba3ae5ea798e9213a48f421cd3 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 09:41:43 +0000 Subject: [PATCH 13/17] docs: add latex_ocr env to the toctree --- docs/source/_toctree.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/source/_toctree.yml b/docs/source/_toctree.yml index 499138c66..320c44098 100644 --- a/docs/source/_toctree.yml +++ b/docs/source/_toctree.yml @@ -131,6 +131,8 @@ title: OpenCode - local: environments/sophistry_bench_sprint title: Sophistry Bench Sprint + - local: environments/latex_ocr + title: LaTeX OCR title: Environments - isExpanded: false sections: From 4d1730fd50f51497082ab03a9416180a133dded4 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 10:10:28 +0000 Subject: [PATCH 14/17] grpo_latex_ocr tutorial: install gradio in the local-serve cell (env server imports its UI) --- examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb index 4921be74f..d82fcb6f0 100644 --- a/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb +++ b/examples/grpo_latex_ocr/grpo_latex_ocr_tutorial.ipynb @@ -136,7 +136,8 @@ "outputs": [], "source": [ "if USE_LOCAL_ENV:\n", - " import subprocess, time, requests\n", + " import subprocess, sys, time, requests\n", + " subprocess.run([sys.executable, \"-m\", \"pip\", \"install\", \"-q\", \"gradio\"], check=True) # env server's UI import\n", " os.environ[\"LATEX_OCR_MODE\"] = \"materialize\" # random-access reset(split, index)\n", " os.environ[\"LATEX_OCR_MAX_ROWS\"] = str(max(NUM_TRAIN_SAMPLES, N_EVAL_SAMPLES)) # only load what we use\n", " os.environ[\"LATEX_OCR_MAX_SESSIONS\"] = str(max(16, NUM_GENERATIONS)) # allow concurrent rollouts\n", From e4f7ef4a054b4e1775fd8a90fe02cd948a2be38d Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 15:55:46 +0530 Subject: [PATCH 15/17] Reward: raise exact-match weight to 0.4 (edit 0.6 / exact 0.4), env-var tunable Default exact_weight 0.2 -> 0.4 so partial answers cap at 0.6 and exact matches are rewarded more strongly. Tunable at runtime via LATEX_OCR_EXACT_WEIGHT. --- envs/latex_ocr_env/README.md | 3 ++- envs/latex_ocr_env/openenv.yaml | 2 +- envs/latex_ocr_env/server/latex_ocr_environment.py | 5 ++++- envs/latex_ocr_env/server/rubric.py | 4 ++-- tests/envs/test_latex_ocr_rubric.py | 9 +++++++++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/envs/latex_ocr_env/README.md b/envs/latex_ocr_env/README.md index ecb115bda..3f069ca27 100644 --- a/envs/latex_ocr_env/README.md +++ b/envs/latex_ocr_env/README.md @@ -20,7 +20,8 @@ transcription, served through OpenEnv. `image` + `text` columns, `train`/`test` splits) via the OpenEnv **Task API**. - **Reward**: `(1 - exact_weight) * (1 - CER) + exact_weight * exact_match`, where `CER` is the normalized character edit distance over whitespace-stripped - LaTeX. Partial answers score in `[0, 0.8]`; only an exact match reaches `1.0`. + LaTeX. With the default `exact_weight=0.4` (tunable via `LATEX_OCR_EXACT_WEIGHT`), + partial answers score in `[0, 0.6]`; only an exact match reaches `1.0`. Computed **server-side** against the hidden ground truth — the agent never sees the target on `reset`. Dense and smooth, for stable RL training. diff --git a/envs/latex_ocr_env/openenv.yaml b/envs/latex_ocr_env/openenv.yaml index b0093d297..25c0d79de 100644 --- a/envs/latex_ocr_env/openenv.yaml +++ b/envs/latex_ocr_env/openenv.yaml @@ -19,7 +19,7 @@ environment: image_column: image # LATEX_OCR_IMAGE_COLUMN text_column: text # LATEX_OCR_TEXT_COLUMN splits: "train,test" # LATEX_OCR_SPLITS - exact_weight: 0.2 + exact_weight: 0.4 # LATEX_OCR_EXACT_WEIGHT (edit 0.6 / exact 0.4) # Reward definition rubric: diff --git a/envs/latex_ocr_env/server/latex_ocr_environment.py b/envs/latex_ocr_env/server/latex_ocr_environment.py index d05697b7a..ecf54f480 100644 --- a/envs/latex_ocr_env/server/latex_ocr_environment.py +++ b/envs/latex_ocr_env/server/latex_ocr_environment.py @@ -128,12 +128,15 @@ class LatexOCREnvironment(Environment): def __init__( self, dataset_name: str = DEFAULT_DATASET, - exact_weight: float = 0.2, + exact_weight: float | None = None, mode: str = DEFAULT_MODE, ) -> None: super().__init__() self.dataset_name = dataset_name self.mode = mode + # Exact-match share of the reward; env-var tunable (default 0.4 -> 0.6/0.4). + if exact_weight is None: + exact_weight = float(os.environ.get("LATEX_OCR_EXACT_WEIGHT", "0.4")) self._rubric = LatexOCRRubric(exact_weight=exact_weight) self._state = State(episode_id=str(uuid4()), step_count=0) self._target: Optional[str] = None diff --git a/envs/latex_ocr_env/server/rubric.py b/envs/latex_ocr_env/server/rubric.py index cec3af412..d588871d1 100644 --- a/envs/latex_ocr_env/server/rubric.py +++ b/envs/latex_ocr_env/server/rubric.py @@ -73,11 +73,11 @@ class LatexOCRRubric: Args: exact_weight: fraction of the reward reserved for an exact match. With - the default 0.2, partial answers score in ``[0, 0.8]`` and only an + the default 0.4, partial answers score in ``[0, 0.6]`` and only an exact (whitespace-insensitive) match reaches ``1.0``. """ - def __init__(self, exact_weight: float = 0.2) -> None: + def __init__(self, exact_weight: float = 0.4) -> None: if not 0.0 <= exact_weight <= 1.0: raise ValueError("exact_weight must be in [0, 1]") self.exact_weight = exact_weight diff --git a/tests/envs/test_latex_ocr_rubric.py b/tests/envs/test_latex_ocr_rubric.py index 61fe8de60..60ab7a51f 100644 --- a/tests/envs/test_latex_ocr_rubric.py +++ b/tests/envs/test_latex_ocr_rubric.py @@ -78,6 +78,15 @@ def test_empty_target_only_empty_prediction_correct(): assert r.grade("x", "").exact_match is False +def test_default_exact_weight_is_point_four(): + # Default 0.4 -> edit 0.6 / exact 0.4; partial answers cap at 0.6. + r = rubric.LatexOCRRubric() + assert r.exact_weight == pytest.approx(0.4) + g = r.grade("x^2 + 2", "x^2 + 1") # one char off, not exact + assert g.exact_match is False + assert 0.0 < g.reward <= 0.6 + + def test_exact_weight_bounds_validated(): with pytest.raises(ValueError): rubric.LatexOCRRubric(exact_weight=1.5) From 3154ef94293c86105e4a7c3f8dbc6144860281e6 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Thu, 23 Jul 2026 14:24:33 +0000 Subject: [PATCH 16/17] latex_ocr: length guard against whitespace-padding reward hack The whitespace-insensitive reward let a policy score 1.0 by emitting the correct answer followed by unlimited whitespace (the padding is stripped before scoring). In RL this shows up as completions drifting to the generation-length cap. Add a length_factor to the rubric that decays the reward once the RAW prediction exceeds overlong_ratio x the target length (default 4.0, floor 80 chars; tunable via LATEX_OCR_OVERLONG_RATIO / LATEX_OCR_OVERLONG_FLOOR, 0 disables). The rubric now also cleans raw completions (code fences, $-delimiters) itself and measures their true length, so it can score model output directly. Legit answers and normal LaTeX spacing are unaffected; padded completions go from 1.0 to ~0. --- docs/source/environments/latex_ocr.md | 16 +++- envs/latex_ocr_env/README.md | 13 +++- envs/latex_ocr_env/openenv.yaml | 5 +- .../server/latex_ocr_environment.py | 9 ++- envs/latex_ocr_env/server/rubric.py | 78 +++++++++++++++++-- tests/envs/test_latex_ocr_rubric.py | 43 ++++++++++ 6 files changed, 152 insertions(+), 12 deletions(-) diff --git a/docs/source/environments/latex_ocr.md b/docs/source/environments/latex_ocr.md index 70f4c0842..1fe8faae6 100644 --- a/docs/source/environments/latex_ocr.md +++ b/docs/source/environments/latex_ocr.md @@ -9,11 +9,20 @@ transcription, served through OpenEnv. - **Dataset**: tasks are served from a Hugging Face dataset (default [`unsloth/LaTeX_OCR`](https://huggingface.co/datasets/unsloth/LaTeX_OCR): `image` + `text` columns, `train`/`test` splits) via the OpenEnv **Task API**. -- **Reward**: `(1 - exact_weight) * (1 - CER) + exact_weight * exact_match`, +- **Reward**: `[(1 - exact_weight) * (1 - CER) + exact_weight * exact_match] * length_factor`, where `CER` is the normalized character edit distance over whitespace-stripped - LaTeX. Partial answers score in `[0, 0.8]`; only an exact match reaches `1.0`. + LaTeX. With the default `exact_weight=0.4` (tunable via `LATEX_OCR_EXACT_WEIGHT`), + partial answers score in `[0, 0.6]`; only an exact match reaches `1.0`. Computed **server-side** against the hidden ground truth — the agent never sees the target on `reset`. Dense and smooth, for stable RL training. +- **Length guard**: because the score is whitespace-insensitive, a policy could + otherwise emit the correct answer followed by unlimited whitespace and still + score `1.0` — a reward hack that, in RL, shows up as completions drifting to + the generation-length cap. `length_factor` decays the reward once the *raw* + prediction grows past `LATEX_OCR_OVERLONG_RATIO`× the target length (default + `4.0`, floor `LATEX_OCR_OVERLONG_FLOOR=80` chars); normal LaTeX spacing is well + within the allowance. Set `LATEX_OCR_OVERLONG_RATIO=0` to disable. The rubric + also strips code fences / `$`-delimiters from raw completions itself. ## Episode @@ -62,6 +71,9 @@ HF_TOKEN=hf_xxx PYTHONPATH=src \ | `LATEX_OCR_TEXT_COLUMN` | `text` | ground-truth LaTeX column | | `LATEX_OCR_SPLITS` | `train,test` | splits to expose | | `LATEX_OCR_MAX_ROWS` | — | cap rows per split (dev) | +| `LATEX_OCR_EXACT_WEIGHT` | `0.4` | exact-match share of the reward | +| `LATEX_OCR_OVERLONG_RATIO` | `4.0` | raw length allowed as a multiple of the target before the reward decays (`0` disables the length guard) | +| `LATEX_OCR_OVERLONG_FLOOR` | `80` | minimum allowed raw length (chars) for short targets | Swap in any `(image, latex)` dataset by pointing `LATEX_OCR_DATASET` at it (and the column vars if they differ). diff --git a/envs/latex_ocr_env/README.md b/envs/latex_ocr_env/README.md index 3f069ca27..19b153179 100644 --- a/envs/latex_ocr_env/README.md +++ b/envs/latex_ocr_env/README.md @@ -18,12 +18,20 @@ transcription, served through OpenEnv. - **Dataset**: tasks are served from a Hugging Face dataset (default [`unsloth/LaTeX_OCR`](https://huggingface.co/datasets/unsloth/LaTeX_OCR): `image` + `text` columns, `train`/`test` splits) via the OpenEnv **Task API**. -- **Reward**: `(1 - exact_weight) * (1 - CER) + exact_weight * exact_match`, +- **Reward**: `[(1 - exact_weight) * (1 - CER) + exact_weight * exact_match] * length_factor`, where `CER` is the normalized character edit distance over whitespace-stripped LaTeX. With the default `exact_weight=0.4` (tunable via `LATEX_OCR_EXACT_WEIGHT`), partial answers score in `[0, 0.6]`; only an exact match reaches `1.0`. Computed **server-side** against the hidden ground truth — the agent never sees the target on `reset`. Dense and smooth, for stable RL training. +- **Length guard**: because the score is whitespace-insensitive, a policy could + otherwise emit the correct answer followed by unlimited whitespace and still + score `1.0` — a reward hack that, in RL, shows up as completions drifting to + the generation-length cap. `length_factor` decays the reward once the *raw* + prediction grows past `LATEX_OCR_OVERLONG_RATIO`× the target length (default + `4.0`, floor `LATEX_OCR_OVERLONG_FLOOR=80` chars); normal LaTeX spacing is well + within the allowance. Set `LATEX_OCR_OVERLONG_RATIO=0` to disable. The rubric + also strips code fences / `$`-delimiters from raw completions itself. ## Episode @@ -72,6 +80,9 @@ HF_TOKEN=hf_xxx PYTHONPATH=src \ | `LATEX_OCR_TEXT_COLUMN` | `text` | ground-truth LaTeX column | | `LATEX_OCR_SPLITS` | `train,test` | splits to expose | | `LATEX_OCR_MAX_ROWS` | — | cap rows per split (dev) | +| `LATEX_OCR_EXACT_WEIGHT` | `0.4` | exact-match share of the reward | +| `LATEX_OCR_OVERLONG_RATIO` | `4.0` | raw length allowed as a multiple of the target before the reward decays (`0` disables the length guard) | +| `LATEX_OCR_OVERLONG_FLOOR` | `80` | minimum allowed raw length (chars) for short targets | Swap in any `(image, latex)` dataset by pointing `LATEX_OCR_DATASET` at it (and the column vars if they differ). diff --git a/envs/latex_ocr_env/openenv.yaml b/envs/latex_ocr_env/openenv.yaml index 25c0d79de..6246914b5 100644 --- a/envs/latex_ocr_env/openenv.yaml +++ b/envs/latex_ocr_env/openenv.yaml @@ -20,12 +20,15 @@ environment: text_column: text # LATEX_OCR_TEXT_COLUMN splits: "train,test" # LATEX_OCR_SPLITS exact_weight: 0.4 # LATEX_OCR_EXACT_WEIGHT (edit 0.6 / exact 0.4) + overlong_ratio: 4.0 # LATEX_OCR_OVERLONG_RATIO (length guard; 0 disables) + overlong_floor: 80 # LATEX_OCR_OVERLONG_FLOOR (min allowed raw chars) # Reward definition rubric: name: LatexOCRRubric - formula: "(1 - exact_weight) * (1 - CER) + exact_weight * exact_match" + formula: "[(1 - exact_weight) * (1 - CER) + exact_weight * exact_match] * length_factor" cer: "normalized Levenshtein distance over whitespace-stripped LaTeX" + length_factor: "decays reward when the raw prediction exceeds overlong_ratio x target length (anti whitespace-padding hack)" # Task API (dataset discovery) — auto-exposed by the OpenEnv server task_api: diff --git a/envs/latex_ocr_env/server/latex_ocr_environment.py b/envs/latex_ocr_env/server/latex_ocr_environment.py index ecf54f480..a3c54ce6b 100644 --- a/envs/latex_ocr_env/server/latex_ocr_environment.py +++ b/envs/latex_ocr_env/server/latex_ocr_environment.py @@ -137,7 +137,14 @@ def __init__( # Exact-match share of the reward; env-var tunable (default 0.4 -> 0.6/0.4). if exact_weight is None: exact_weight = float(os.environ.get("LATEX_OCR_EXACT_WEIGHT", "0.4")) - self._rubric = LatexOCRRubric(exact_weight=exact_weight) + # Length guard against whitespace-padding reward hacks; env-var tunable. + overlong_ratio = float(os.environ.get("LATEX_OCR_OVERLONG_RATIO", "4.0")) + overlong_floor = int(os.environ.get("LATEX_OCR_OVERLONG_FLOOR", "80")) + self._rubric = LatexOCRRubric( + exact_weight=exact_weight, + overlong_ratio=overlong_ratio, + overlong_floor=overlong_floor, + ) self._state = State(episode_id=str(uuid4()), step_count=0) self._target: Optional[str] = None self._current_split: str = "" diff --git a/envs/latex_ocr_env/server/rubric.py b/envs/latex_ocr_env/server/rubric.py index d588871d1..06f4832ec 100644 --- a/envs/latex_ocr_env/server/rubric.py +++ b/envs/latex_ocr_env/server/rubric.py @@ -12,13 +12,26 @@ exact-string reward alone is too sparse (and discontinuous auxiliary terms make training spiky): - reward = (1 - exact_weight) * (1 - CER) + exact_weight * exact_match + reward = [(1 - exact_weight) * (1 - CER) + exact_weight * exact_match] * length_factor where ``CER`` is the normalized character error rate (Levenshtein distance over the longer whitespace-stripped string). A perfect transcription scores 1.0; a partial one is capped at ``1 - exact_weight``. Whitespace-insensitive, since LaTeX spacing is cosmetic. +**Length guard.** Because the score is whitespace-insensitive, a policy could +otherwise emit the correct answer followed by unlimited whitespace and still +score 1.0 — a reward hack that shows up in RL as completions drifting to the +generation-length cap ("correct LaTeX + padding"). ``length_factor`` closes it: +the reward decays once the *raw* prediction grows past a multiple of the target +length (padding is measured before it is stripped away). Normal LaTeX spacing +stays well within the allowance, so legitimate answers are unaffected. + +The rubric also cleans the raw completion itself (strips markdown code fences +and surrounding math delimiters) so it can score the model's raw output +directly and measure its true length. Cleaning is idempotent, so callers that +pre-clean their text still work unchanged. + Implemented with a pure-Python Levenshtein so the environment carries no extra runtime dependency. """ @@ -30,6 +43,13 @@ _WHITESPACE = re.compile(r"\s+") +_FENCE = re.compile(r"```[a-zA-Z]*\s*(.*?)\s*```", re.DOTALL) + +# Length-guard defaults. A correct transcription is about as long as the target; +# allow up to ``ratio`` times the target length (with a small floor so very short +# targets get breathing room) before the reward starts to decay. +_DEFAULT_OVERLONG_RATIO = 4.0 +_DEFAULT_OVERLONG_FLOOR = 80 def normalize_latex(text: str) -> str: @@ -41,6 +61,19 @@ def _strip_all_whitespace(text: str) -> str: return _WHITESPACE.sub("", text or "") +def clean_latex(text: str) -> str: + """Strip markdown code fences and surrounding math delimiters from a completion. + + Idempotent: already-clean LaTeX is returned unchanged. Applied inside the rubric so it + can score the model's raw output directly (and measure its true length for the guard). + """ + text = (text or "").strip() + m = _FENCE.search(text) + if m: + text = m.group(1) + return text.strip().strip("$").strip() + + def levenshtein(a: str, b: str) -> int: """Edit distance between two strings (pure Python, O(len(a) * len(b))).""" if a == b: @@ -66,27 +99,45 @@ class GradeResult: reward: float exact_match: bool char_error_rate: float + length_factor: float = ( + 1.0 # < 1.0 when the raw prediction was penalized for being overlong + ) class LatexOCRRubric: - """Normalized edit distance + exact-match bonus. + """Normalized edit distance + exact-match bonus, with a length guard against padding. Args: exact_weight: fraction of the reward reserved for an exact match. With the default 0.4, partial answers score in ``[0, 0.6]`` and only an exact (whitespace-insensitive) match reaches ``1.0``. + overlong_ratio: the raw prediction may be up to ``overlong_ratio`` times + the target length before the reward decays; it reaches 0 at twice the + allowance. Set ``<= 0`` to disable the length guard. + overlong_floor: minimum allowed raw length (chars), so very short targets + still tolerate normal formatting before the guard engages. """ - def __init__(self, exact_weight: float = 0.4) -> None: + def __init__( + self, + exact_weight: float = 0.4, + overlong_ratio: float = _DEFAULT_OVERLONG_RATIO, + overlong_floor: int = _DEFAULT_OVERLONG_FLOOR, + ) -> None: if not 0.0 <= exact_weight <= 1.0: raise ValueError("exact_weight must be in [0, 1]") self.exact_weight = exact_weight + self.overlong_ratio = overlong_ratio + self.overlong_floor = overlong_floor def grade(self, prediction: str, target: str) -> GradeResult: - # LaTeX spacing is cosmetic, so score on the whitespace-stripped form: - # an exact match => CER 0 => reward 1.0. - pred_canon = _strip_all_whitespace(normalize_latex(prediction)) - target_canon = _strip_all_whitespace(normalize_latex(target)) + raw = prediction or "" + # Clean the raw completion (fences, $-delimiters) before scoring; LaTeX spacing is + # cosmetic, so score on the whitespace-stripped form: an exact match => CER 0. + cleaned = clean_latex(raw) + pred_canon = _strip_all_whitespace(normalize_latex(cleaned)) + target_norm = normalize_latex(target) + target_canon = _strip_all_whitespace(target_norm) exact = pred_canon == target_canon if not target_canon: @@ -99,8 +150,21 @@ def grade(self, prediction: str, target: str) -> GradeResult: reward = (1.0 - self.exact_weight) * similarity + self.exact_weight * float( exact ) + + # Length guard: penalize predictions whose RAW length (measured before whitespace is + # stripped, so padding counts) far exceeds the target's. Reward decays linearly with + # the excess and reaches 0 at twice the allowance. + length_factor = 1.0 + if self.overlong_ratio > 0: + allowed = max(self.overlong_floor, self.overlong_ratio * len(target_norm)) + if len(raw) > allowed: + over = (len(raw) - allowed) / allowed + length_factor = max(0.0, 1.0 - over) + reward *= length_factor + return GradeResult( reward=round(reward, 6), exact_match=exact, char_error_rate=round(cer, 6), + length_factor=round(length_factor, 6), ) diff --git a/tests/envs/test_latex_ocr_rubric.py b/tests/envs/test_latex_ocr_rubric.py index 60ab7a51f..6046fc9a3 100644 --- a/tests/envs/test_latex_ocr_rubric.py +++ b/tests/envs/test_latex_ocr_rubric.py @@ -90,3 +90,46 @@ def test_default_exact_weight_is_point_four(): def test_exact_weight_bounds_validated(): with pytest.raises(ValueError): rubric.LatexOCRRubric(exact_weight=1.5) + + +def test_clean_latex_strips_fences_and_delimiters(): + # The rubric cleans raw completions itself; cleaning is idempotent. + assert rubric.clean_latex("```latex\nx^2 + 1\n```") == "x^2 + 1" + assert rubric.clean_latex("$x^2 + 1$") == "x^2 + 1" + assert rubric.clean_latex("x^2 + 1") == "x^2 + 1" # already clean -> unchanged + + +def test_raw_fenced_completion_scored_correctly(): + # A raw completion wrapped in a code fence still scores as an exact match. + g = rubric.LatexOCRRubric().grade("```latex\nx^2 + 1\n```", "x^2 + 1") + assert g.exact_match is True + assert g.reward == pytest.approx(1.0) + + +def test_whitespace_padding_reward_hack_is_penalized(): + # The core hack: correct answer + a wall of trailing whitespace. Whitespace-insensitive + # scoring alone would give this 1.0; the length guard must drive the reward down. + target = r"\frac{x^2}{2} + c" + r = rubric.LatexOCRRubric() + clean = r.grade(target, target) + padded = r.grade(target + "\n" * 500, target) + assert clean.reward == pytest.approx(1.0) # clean answer unaffected + assert clean.length_factor == pytest.approx(1.0) + assert padded.exact_match is True # content is still exact... + assert padded.reward < 0.1 # ...but the padding is punished + assert padded.length_factor < 0.1 + + +def test_normal_spacing_within_allowance_is_free(): + # Ordinary LaTeX spacing must not trip the guard. + target = r"\frac{x^2}{2} + c" + g = rubric.LatexOCRRubric().grade(r"\frac{x^2}{2} + c", target) + assert g.length_factor == pytest.approx(1.0) + assert g.reward == pytest.approx(1.0) + + +def test_length_guard_can_be_disabled(): + target = r"\frac{x^2}{2} + c" + g = rubric.LatexOCRRubric(overlong_ratio=0).grade(target + "\n" * 500, target) + assert g.length_factor == pytest.approx(1.0) # guard off -> old (hackable) behavior + assert g.reward == pytest.approx(1.0) From 238b36e082dbefb829f3f6a446dae7ef09df1853 Mon Sep 17 00:00:00 2001 From: adithya-s-k Date: Fri, 24 Jul 2026 06:41:26 +0000 Subject: [PATCH 17/17] grpo_latex_ocr example: add Results section with 4-model training curves Add held-out eval results + train/eval curves for four VLMs trained against the latex_ocr env (Qwen3-VL-2B, Qwen3.5-2B, GLM-OCR, Gemma-4-E2B), showing stable, monotonic improvement (deltas +3% to +48%). --- examples/grpo_latex_ocr/README.md | 20 ++++++++++++++++++ .../grpo_latex_ocr/assets/training_curves.png | Bin 0 -> 336677 bytes 2 files changed, 20 insertions(+) create mode 100644 examples/grpo_latex_ocr/assets/training_curves.png diff --git a/examples/grpo_latex_ocr/README.md b/examples/grpo_latex_ocr/README.md index 2673cf93c..901f70645 100644 --- a/examples/grpo_latex_ocr/README.md +++ b/examples/grpo_latex_ocr/README.md @@ -37,3 +37,23 @@ checkout is needed. By default it connects to the **hosted** environment Space See [`envs/latex_ocr_env`](../../envs/latex_ocr_env) for the full environment: a dataset-backed, single-step (bandit) RL task with a weighted, server-side reward (edit similarity, exact match, structural validity, length/format). It ships `train` and `test` splits. + +## 📈 Results + +We ran this GRPO setup against the environment on four open vision-language models (colocated vLLM, +8 generations per prompt, held-out `test` reward scored every 500 steps — the same reward used in +training). All four **improve monotonically and stay stable**: + +![Training curves](assets/training_curves.png) + +| Model | Base eval | Best eval | Δ (absolute) | Δ (relative) | +|---|---|---|---|---| +| **GLM-OCR** | 0.449 | 0.665 | **+0.215** | **+48%** | +| **Gemma-4-E2B** | 0.392 | 0.570 | +0.178 | +45% | +| **Qwen3-VL-2B** | 0.615 | **0.723** | +0.108 | +18% | +| **Qwen3.5-2B** | 0.688 | 0.711 | +0.022 | +3% | + +*Reward is the environment's own score (0–1). The models with the most headroom (GLM-OCR, Gemma) see +the largest gains; Qwen3.5-2B already starts near the ceiling. Qwen3-VL-2B reaches the highest final +score with the cleanest curve. Numbers are for the hosted [`AdithyaSK/latex-ocr-env`](https://huggingface.co/spaces/AdithyaSK/latex-ocr-env) +environment; your exact deltas will vary with model, generations, and step budget.* diff --git a/examples/grpo_latex_ocr/assets/training_curves.png b/examples/grpo_latex_ocr/assets/training_curves.png new file mode 100644 index 0000000000000000000000000000000000000000..2c57a1439ed945831453ed1c74940e1095d671d6 GIT binary patch literal 336677 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 z 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�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 Y6